mysql的一些函数及其用法
mysql
1-来自于leetcode1517的题目
表: Users+---------------+---------+
| Column Name | Type |
+---------------+---------+
| user_id | int |
| name | varchar |
| mail | varchar |
+---------------+---------+
已知一个表,它的创建语句
Create table If Not Exists Users
(user_id int, name varchar(30), mail varchar(50))
添加语句
Truncate table Users//清空users这个
insert into Users (user_id, name, mail) values ('1', 'Winston', 'winston@leetcode.com')
2----来自于1527道题
患者信息表: Patients
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| patient_id | int |
| patient_name | varchar |
| conditions | varchar |
+--------------+---------+
在 SQL 中,patient_id (患者 ID)是该表的主键。
'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。
这个表包含医院中患者的信息。
Create table If Not Exists Patients (patient_id int, patient_name varchar(30), conditions varchar(100))
3----第1581题
表:Visits+-------------+---------+
| Column Name | Type |
+-------------+---------+
| visit_id | int |
| customer_id | int |
+-------------+---------+
visit_id 是该表中具有唯一值的列。
该表包含有关光临过购物中心的顾客的信息。表:Transactions+----------------+---------+
| Column Name | Type |
+----------------+---------+
| transaction_id | int |
| visit_id | int |
| amount | int |
+----------------+---------+
transaction_id 是该表中具有唯一值的列。
此表包含 visit_id 期间进行的交易的信息。
Create table If Not Exists Visits(visit_id int, customer_id int)
Create table If Not Exists Transactions(transaction_id int, visit_id int, amount int)
4----第1587
表: Users+--------------+---------+
| Column Name | Type |
+--------------+---------+
| account | int |
| name | varchar |
+--------------+---------+
account 是该表的主键(具有唯一值的列)。
该表的每一行都包含银行中每个用户的帐号。
表中不会有两个用户具有相同的名称。表: Transactions+---------------+---------+
| Column Name | Type |
+---------------+---------+
| trans_id | int |
| account | int |
| amount | int |
| transacted_on | date |
+---------------+---------+
trans_id 是该表主键(具有唯一值的列)。
该表的每一行包含了所有账户的交易改变情况。
如果用户收到了钱, 那么金额是正的; 如果用户转了钱, 那么金额是负的。
所有账户的起始余额为 0。
Create table If Not Exists Users (account int, name varchar(20))
Create table If Not Exists Transactions (trans_id int, account int, amount int, transacted_on date)
常见且重要且关键的sql语句的一些匹配方式
关于某个数据需要进行判断,该数据的类型是字符串类型,其前缀必须是字母开头,可以包含字母(大写或小写),数字,下划线 '_'
,点 '.'
和/或破折号 '-'
。
#这道题需要用到正则表达式
regexp 是“正则表达式”(Regular Expression)的缩写,正则表达式是一种用于描述字符串模式的工具。它允许用户定义复杂的字符串匹配规则,可以用于搜索、替换和验证字符串。
^:表示字符串的开始。确保匹配从字符串的开头开始。[a-zA-Z]:表示匹配一个字母,范围是大写字母 A-Z 或小写字母 a-z。这意味着电子邮件的用户名部分必须以字母开头。[\\w.-]*:\\w:表示匹配任何字母数字字符(包括下划线),相当于 [a-zA-Z0-9_]。
.:表示匹配一个点字符。由于在正则表达式中,点 . 是一个特殊字符,表示匹配任何单个字符,因此需要转义为 \.(在某些语言中需要用双反斜杠 \\. 来表示)。
-:表示匹配一个连字符。
*:表示前面的字符集可以出现零次或多次。这意味着在字母之后,可以有多个字母、数字、下划线、点或连字符。
\\@leetcode:表示匹配字符串 @leetcode。同样,由于 @ 是一个特殊字符,通常需要转义,所以用 \\@ 来表示。\\.com:表示匹配字符串 .com。同样,点 . 需要转义,所以用 \\. 来表示。$:表示字符串的结束。确保匹配到字符串的末尾。
regexp '^[a-zA-Z][\\w.-]*\\@leetcode\\.com$'
详细的请看1517.
关于某个数据中间包含了某一个数据(字符,单词)
WHERE conditions LIKE 'DIAB1%':查找 conditions 字段以 DIAB1 开头的记录。OR conditions LIKE '% DIAB1%':查找 conditions 字段中包含 DIAB1 作为一个单词(前面有空格)的记录。OR conditions LIKE '%DIAB1%':查找 conditions 字段中包含 DIAB1 的记录,不论前面是否有空格。
详情间1527题
为什莫要用一个空格,由于有的单词可能会包含里面的这些单词
常见的查询顺序
select 数据
from 表
where 条件
·group by 某个数据的排序
聚合函数sum()和count()的区别
SUM() 和 COUNT() 是 SQL 中常用的聚合函数,它们的主要区别在于它们的功能和用途。以下是对这两个函数的详细解释:1. SUM()
功能:SUM() 函数用于计算指定列中所有数值的总和。
用法:通常用于数值型数据列。
返回值:返回一个数值,表示该列所有行的总和。如果没有行符合条件,则返回 NULL。
示例:
SELECT SUM(salary) AS total_salary
FROM Employees;
这个查询将计算 Employees 表中所有员工的薪水总和。
2. COUNT()
功能:COUNT() 函数用于计算符合条件的行数。
用法:可以用于任何类型的数据列,也可以用于 * 来计算所有行。
返回值:返回一个整数,表示符合条件的行数。如果没有行符合条件,则返回 0。
示例:
SELECT COUNT(*) AS total_employees
FROM Employees;
这个查询将计算 Employees 表中的所有员工数量。
主要区别
特点 SUM() COUNT()
功能 计算数值的总和 计算行数
返回值类型 数值 整数
用法 仅适用于数值型数据 可用于任何数据类型
NULL 值处理 忽略 NULL 值 NULL 值也会被计入(如果使用 COUNT(column_name),则 NULL 值不计入)
例子对比
假设有一个名为 Sales 的表,包含以下数据:id amount
1 100
2 200
3 NULL
4 300
使用 SUM():SELECT SUM(amount) AS total_amount FROM Sales;
返回结果:400(100 + 200 + 300,NULL 被忽略)使用 COUNT():SELECT COUNT(amount) AS total_count FROM Sales;
返回结果:3(计入了 100、200 和 300,NULL 不计入)总结
使用 SUM() 计算数值的总和。
使用 COUNT() 计算行数或特定列的非 NULL 值数量。
了解这两个函数的区别可以帮助您更有效地进行数据分析和查询。
Having这个函数在什么情况下会被使用
HAVING 子句在 SQL 中用于对聚合结果进行过滤,通常与 GROUP BY 子句一起使用。与 WHERE 子句不同,WHERE 用于在数据分组之前过滤行,而 HAVING 用于对分组后的结果进行过滤。下面是一些关于 HAVING 的使用场景和示例。使用场景
聚合条件过滤:当你需要根据聚合函数(如 SUM()、COUNT()、AVG() 等)的结果来过滤数据时,使用 HAVING。与 GROUP BY 一起使用:HAVING 通常与 GROUP BY 子句结合使用,以便在分组后对每个组的聚合结果进行条件筛选。复杂的条件:如果需要基于聚合结果的复杂条件进行过滤,HAVING 是合适的选择。示例
假设有一个名为 Sales 的表,包含以下字段:id、product_id、quantity 和 sales_amount。我们想要找出销售数量大于 100 的产品:SELECT product_id, SUM(quantity) AS total_quantity
FROM Sales
GROUP BY product_id
HAVING SUM(quantity) > 100;
解释
SELECT product_id, SUM(quantity) AS total_quantity:选择产品 ID 和该产品的总销售数量。FROM Sales:从 Sales 表中查询数据。GROUP BY product_id:按产品 ID 对数据进行分组。HAVING SUM(quantity) > 100:过滤出总销售数量大于 100 的产品。关键点
与 WHERE 的区别:WHERE 用于在数据分组之前过滤行,而 HAVING 用于在数据分组之后过滤聚合结果。例如,WHERE 不能用于聚合函数,而 HAVING 可以。性能考虑:由于 HAVING 是在数据分组后执行的,因此在某些情况下,使用 WHERE 进行初步过滤可以提高查询性能。总结
使用 HAVING 来对聚合结果进行过滤。
通常与 GROUP BY 子句一起使用。
适合复杂的聚合条件过滤。
降序升序关键字
返回的结果表按 percentage 的 降序 排序,若相同则按 contest_id 的 升序 排序。
ORDER BY percentage DESC, contest_id ASC
聚合函数avg()
AVG() 是 SQL 中的一个聚合函数,用于计算一组数值的平均值。它会将指定列中的所有数值相加,然后除以该列中非空值的数量,从而得到平均值。语法
AVG(column_name)
示例
假设有一个名为 employees 的表,包含员工的工资信息,如下所示:employee_id salary
1 5000
2 6000
3 7000
4 NULL
如果你想计算所有员工的平均工资,可以使用以下 SQL 查询:SELECT AVG(salary) AS average_salary
FROM employees;
在这个例子中,AVG(salary) 将计算出所有非空工资的平均值,即 (5000 + 6000 + 7000) / 3 = 6000。注意事项
AVG() 函数只会计算非空值(NULL)的平均值。
如果列中所有值都是 NULL,AVG() 将返回 NULL。
AVG() 函数在数据分析和报告中非常有用,能够帮助我们快速了解数据集的中心趋势。
如何将首字母变成大写的,其余都是小写
这段 SQL 代码的作用是将一个字符串的首字母转换为大写,其余字母转换为小写,从而实现首字母大写的效果。我们可以逐步解析这段代码的含义:LEFT(name, 1): 这部分提取 name 字符串的第一个字符(即首字母)。UPPER(LEFT(name, 1)): 将提取到的首字母转换为大写。SUBSTRING(name, 2): 这部分提取 name 字符串从第二个字符开始的所有字符。LOWER(SUBSTRING(name, 2)): 将从第二个字符开始的所有字符转换为小写。CONCAT(...): 最后,CONCAT 函数将大写的首字母和小写的其余部分连接在一起,形成一个新的字符串。示例
假设 name 的值为 "jOhn",那么:LEFT(name, 1) 会返回 "j"
UPPER(LEFT(name, 1)) 会返回 "J"
SUBSTRING(name, 2) 会返回 "Ohn"
LOWER(SUBSTRING(name, 2)) 会返回 "ohn"
CONCAT(UPPER(LEFT(name, 1)), LOWER(SUBSTRING(name, 2))) 会返回 "John"
总结
这段代码可以用于格式化名字,使其符合常见的“首字母大写,其余小写”的格式。
求字符串的长度
CHAR_LENGTH()
union
在 SQL 中,UNION 是一个用于合并两个或多个 SELECT 查询结果的操作符。使用 UNION 可以将多个查询的结果集合并成一个结果集,且该结果集会自动去除重复的行。语法
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
使用要求
列数和数据类型: 所有参与 UNION 的 SELECT 查询必须具有相同数量的列,并且对应列的数据类型应该兼容。
去重: UNION 默认会去除重复的记录。如果希望保留重复的记录,可以使用 UNION ALL。
示例
假设有两个表 employees_2022 和 employees_2023,它们的结构相同,包含员工的 ID 和姓名:employees_2022 表:employee_id name
1 Alice
2 Bob
employees_2023 表:employee_id name
2 Bob
3 Charlie
如果你想要获取这两年所有员工的姓名,可以使用 UNION:SELECT name FROM employees_2022
UNION
SELECT name FROM employees_2023;
结果
这个查询将返回以下结果:name
Alice
Bob
Charlie
注意:Bob 只会出现一次,因为 UNION 会自动去除重复的记录。使用 UNION ALL
如果希望保留所有记录,包括重复的,可以使用 UNION ALL:SELECT name FROM employees_2022
UNION ALL
SELECT name FROM employees_2023;
结果
这个查询将返回以下结果:name
Alice
Bob
Bob
Charlie
总结
UNION 是一个强大的工具,可以帮助我们合并来自不同表或查询的结果集,适用于需要整合多条查询结果的场景。
count(1)
你可以将 COUNT(1) 与其他 SQL 功能结合使用,例如 GROUP BY 和 HAVING:SELECT department,COUNT(1) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(1) > 10;
这个查询将返回每个部门的员工数量,并只显示员工数量大于 10 的部门。总结
使用 COUNT(1) 是一种有效的方式来获取记录数量,适用于多种场景。根据具体需求,可以选择 COUNT(1) 或 COUNT(*)。
第n行的数据
源查询语句
SELECT DISTINCTSalaryFROMEmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1LIMIT 1 表示只返回一条记录。
OFFSET 1 表示跳过第一条记录。结合使用 LIMIT 和 OFFSET,这条语句实际上是获取排序后第二条记录。
窗口函数DENSE_RANK()
是 SQL 中的一个窗口函数,用于为结果集中的行分配排名。与 RANK()
函数不同,DENSE_RANK()
在遇到重复值时不会跳过排名,而是为相同的值分配相同的排名,并为下一个不同的值分配下一个连续的排名。
窗口函数over()
OVER()
是 SQL 中用于窗口函数的一个关键字,它定义了窗口的范围和排序方式。窗口函数允许你在查询结果的每一行上执行计算,而不需要将结果分组。以下是一些常见的用法和示例:
示例
假设你有一个名为 Sales
的表,包含 salesperson
和 amount
列,你想计算每个销售人员的累计销售额。
SELECT salesperson,amount,SUM(amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS cumulative_sales
FROM Sales;
说明:
SUM(amount)
: 这是一个聚合函数,用于计算销售额的总和。OVER()
: 关键字,指示这是一个窗口函数。PARTITION BY salesperson
: 将结果集按销售人员分区,每个销售人员的计算是独立的。ORDER BY sale_date
: 在每个分区内,按销售日期排序,以便计算累计销售额。
注意事项:****
OVER()
可以与多种聚合函数一起使用,如ROW_NUMBER()
,RANK()
,DENSE_RANK()
,AVG()
,COUNT()
等。- 你可以根据需要使用
PARTITION BY
和ORDER BY
来定义窗口的范围和顺序。
over和dense_rank()结合一起使用
表: Scores
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| score | decimal |
+-------------+---------+
id 是该表的主键(有不同值的列)。
该表的每一行都包含了一场比赛的分数。Score 是一个有两位小数点的浮点值。
编写一个解决方案来查询分数的排名。排名按以下规则计算:
- 分数应按从高到低排列。
- 如果两个分数相等,那么两个分数的排名应该相同。
- 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
按 score
降序返回结果表。
查询结果格式如下所示。
示例 1:
输入:
Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
输出:
+-------+------+
| score | rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+-------+------+
SELECTS.score,DENSE_RANK() OVER (ORDER BYS.score DESC) AS 'rank'
FROMScores S;
datediff()
datediff(a.event_date, p.login)=1
ATEDIFF()
函数用于计算两个日期之间的差异,通常以天为单位。你提到的表达式 DATEDIFF(a.event_date, p.login) = 1
的含义是:
解释
DATEDIFF(a.event_date, p.login)
: 这个函数计算a.event_date
和p.login
之间的天数差。如果a.event_date
是晚于p.login
的日期,结果将是正整数;如果是早于,结果将是负整数;如果两者相同,结果为 0。= 1
: 这个条件表示我们只关心那些a.event_date
比p.login
晚一天的记录。换句话说,a.event_date
是p.login
的后一天。
COALESCE函数
COALESCE
函数用于返回其参数中的第一个非空值。你提到的 COALESCE(s2.student, s1.student)
的意思是,如果 s2.student
的值不为空,则返回 s2.student
的值;如果 s2.student
的值为空,则返回 s1.student
的值。
语法
COALESCE(value1, value2, ..., valueN)
value1, value2, ..., valueN
: 你可以传入多个值,COALESCE
将返回第一个非空值。
示例
假设你有两个表 students1
和 students2
,它们都有一个名为 student
的列。你想要从这两个表中获取学生的名字,但优先选择 students2
表中的名字,如果 students2
表中没有名字,则使用 students1
表中的名字。
SELECT COALESCE(s2.student, s1.student) AS student_name
FROM students1 s1
LEFT JOIN students2 s2 ON s1.id = s2.id;
结果解释
- 如果
s2.student
不为空,则student_name
的值将是s2.student
的值。 - 如果
s2.student
为空,则student_name
的值将是s1.student
的值。 - 这样,你可以确保
student_name
列总是有一个有效的学生名字(如果存在的话)。
用途
COALESCE
函数在处理缺失数据时非常有用,尤其是在需要从多个来源合并数据时。它可以确保查询结果中没有空值,提供更完整的信息。
row_number() over()连用
ROW_NUMBER()
是 SQL 中的一个窗口函数,用于为结果集中的每一行分配一个唯一的序列号。结合 PARTITION BY
和 ORDER BY
子句时,它可以按照指定的分组和排序规则生成行号。
语法
ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY column3, column4, ...)
- PARTITION BY: 指定如何将结果集划分为多个分区。每个分区内的行号是独立的。
- ORDER BY: 指定在每个分区内如何排序行,以确定行号的分配顺序。
示例
假设你有一个名为 orders
的表,包含以下列:
order_id
: 订单的唯一标识符customer_id
: 顾客的唯一标识符order_date
: 订单日期
你希望为每个顾客的订单分配一个行号,按照订单日期升序排列。可以使用如下查询:
SELECT order_id,customer_id,order_date,ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num
FROM orders;
结果解释
- PARTITION BY customer_id: 这意味着结果集将根据
customer_id
列的值进行分组。每个顾客的订单将被视为一个独立的分区。 - ORDER BY order_date: 在每个顾客的分区内,订单将按照
order_date
列的值进行升序排序。 - ROW_NUMBER(): 对于每个顾客的订单,
ROW_NUMBER()
将分配一个行号,最早的订单将被分配为 1,第二个订单为 2,以此类推。
示例结果
假设 orders
表的数据如下:
order_id | customer_id | order_date |
---|---|---|
1 | 101 | 2023-01-01 |
2 | 101 | 2023-01-05 |
3 | 102 | 2023-01-03 |
4 | 101 | 2023-01-02 |
5 | 102 | 2023-01-04 |
执行上述查询后,结果可能如下:
order_id | customer_id | order_date | row_num |
---|---|---|---|
1 | 101 | 2023-01-01 | 1 |
4 | 101 | 2023-01-02 | 2 |
2 | 101 | 2023-01-05 | 3 |
3 | 102 | 2023-01-03 | 1 |
5 | 102 | 2023-01-04 | 2 |
用途
ROW_NUMBER()
函数在许多场景中非常有用,例如:
- 在分页查询中为每一页的结果分配行号。
- 在需要对分组数据进行排序并获取前 N 条记录时。
- 数据分析和报告中,生成序列号以便于引用。
查找每个月和每个国家/地区。
数据表中的 trans_date 是精确到日,我们可以使用 DATE_FORMAT() 函数将日期按照年月 %Y-%m 输出。比如将 2019-01-02 转换成 2019-01 。
DATE_FORMAT(trans_date, ‘%Y-%m’)
sum(amount) over(rows 6 preceding)
SUM(amount) OVER (ROWS 6 PRECEDING)
是一种窗口函数的用法,用于对数据集中的某一列(在这个例子中是 amount
)进行求和,并且可以在特定的窗口范围内进行计算。
解释
- SUM(amount): 这是一个聚合函数,用于计算
amount
列的总和。 - OVER: 关键字用于定义窗口函数的范围。
- ROWS 6 PRECEDING: 这个部分指定了窗口的大小和位置。
6 PRECEDING
意味着从当前行开始向上(即之前的行)计算总和,包括当前行在内的前6行。
示例
假设我们有一个销售记录的表格,结构如下:
id | amount |
---|---|
1 | 100 |
2 | 200 |
3 | 300 |
4 | 400 |
5 | 500 |
6 | 600 |
7 | 700 |
8 | 800 |
如果我们执行如下 SQL 查询:
SELECT id, amount, SUM(amount) OVER (ROWS 6 PRECEDING) AS running_total
FROM sales;
结果
查询的结果将会是:
id | amount | running_total |
---|---|---|
1 | 100 | 100 |
2 | 200 | 300 |
3 | 300 | 600 |
4 | 400 | 1000 |
5 | 500 | 1500 |
6 | 600 | 2100 |
7 | 700 | 2700 |
8 | 800 | 3300 |
注意事项
- 窗口的起始点: 在第一行(
id = 1
)时,只有这一行可用,因此它的running_total
只会是100
。 - 窗口大小: 当行数少于6时,窗口会自动调整为可用的行数。例如,在
id = 1
到id = 6
的行中,running_total
会包含所有可用的行。 - 性能: 使用窗口函数时,可能会对查询性能产生影响,尤其是在处理大数据集时,因此在使用时需要注意。
limit
LIMIT
可以接受两个参数:第一个参数表示要跳过的行数,第二个参数表示要返回的行数。
语法
SELECT column1, column2, ...
FROM table_name
LIMIT offset, row_count;
- offset: 要跳过的行数。
- row_count: 要返回的行数。
示例
假设我们有一个名为 employees
的表,结构如下:
id | name | salary |
---|---|---|
1 | Alice | 50000 |
2 | Bob | 60000 |
3 | Charlie | 70000 |
4 | David | 80000 |
5 | Eva | 90000 |
6 | Frank | 100000 |
7 | Grace | 110000 |
8 | Henry | 120000 |
如果我们执行以下查询:
SELECT * FROM employees
LIMIT 6, 2;
结果
这个查询的结果将会是:
id | name | salary |
---|---|---|
7 | Grace | 110000 |
8 | Henry | 120000 |
解释
-
LIMIT 6, 2
:
6
表示跳过前 6 行。2
表示返回接下来的 2 行。
注意事项
- 行数限制: 在一些数据库系统(如 MySQL)中,
LIMIT
子句可以接受两个参数;而在其他数据库系统(如 SQL Server)中,可能使用不同的语法(如OFFSET
和FETCH NEXT
)。 - 性能: 使用
LIMIT
和OFFSET
时,尤其是在处理大数据集时,可能会影响查询性能,因为数据库需要跳过一定数量的行。 - 数据顺序: 使用
LIMIT
时,通常需要结合ORDER BY
子句,以确保返回的结果是有序的。
mod()
在 SQL 中,MOD()
函数用于计算两个数相除后的余数。这个函数常用于需要处理数值运算和判断奇偶性等场景。
语法
MOD(dividend, divisor)
- dividend: 被除数。
- divisor: 除数。
示例
假设我们有一个名为 numbers
的表,结构如下:
id | value |
---|---|
1 | 10 |
2 | 15 |
3 | 20 |
4 | 25 |
我们可以使用 MOD()
函数来计算每个值除以 3 的余数:
SELECT id, value, MOD(value, 3) AS remainder
FROM numbers;
结果
执行上述查询后,结果将会是:
id | value | remainder |
---|---|---|
1 | 10 | 1 |
2 | 15 | 0 |
3 | 20 | 2 |
4 | 25 | 1 |
解释
- 对于
value
为 10,计算10 MOD 3
得到余数 1。 - 对于
value
为 15,计算15 MOD 3
得到余数 0。 - 对于
value
为 20,计算20 MOD 3
得到余数 2。 - 对于
value
为 25,计算25 MOD 3
得到余数 1。
使用场景
- 判断奇偶性: 可以用
MOD()
函数来判断一个数是奇数还是偶数。例如,MOD(value, 2)
返回 0 表示偶数,返回 1 表示奇数。 - 分组: 在某些情况下,可以使用
MOD()
函数对数据进行分组,例如将数据分为不同的组。 - 循环: 在处理循环逻辑时,
MOD()
函数可以用于确定当前循环的状态。
注意事项
- 在使用
MOD()
函数时,除数不能为 0,否则会导致错误。 - 不同的数据库系统可能提供不同的实现方式。例如,在某些 SQL 方言中,可能使用
%
运算符来代替MOD()
函数。
如何判断非空值以及空值
表: 教师表
+-------------+---------+
| 字段名称 | 类型 |
+-------------+---------+
| 教师号 | int |
| 教师姓名 | varchar |
+-------------+---------+教师号 是该表的主键。
该表的每一行表示 一名教师的信息,包含编号、姓名。
找出姓名不为空值的教师信息。
查询结果如下例所示。
示例 1:
输入:
表:教师表
+-------+---------+
| 教师号 | 教师姓名 |
+-------+--------+
| 1 | 猴子 |
| 2 | 小明 |
| 3 | |
| 4 | null |
+-------+--------+输出:
+-------+---------+
| 教师号 | 教师姓名 |
+-------+--------+
| 1 | 猴子 |
| 2 | 小明 |
+-------+--------+
解释:
编号 3 的教师姓名为空值,编号 4 的教师姓名为 null,因此返回 编号 1 和 2 的教师信息
select*from教师表where 教师姓名 is not null and 教师姓名 <> ''
相关文章:
mysql的一些函数及其用法
mysql 1-来自于leetcode1517的题目 表: Users------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------已知一个表,它的…...
[java基础]LinkedList源码粗析
LinkedList 的数据结构 实现List、Deque 接口,基于 双向链表实现的列表。与基于数组的 ArrayList 不同,基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque,它提供了 add, offer, remove, poll, …...
基于Spring Boot的海滨体育馆管理系统的设计与实现
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 宠物医院…...
易支付二次元网站源码及部署教程
易支付二次元网站源码及部署教程 引言 在当今数字化时代,二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求,搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程…...
json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
在使用 Python 的 json 模块进行序列化时,默认情况下会将中文转换为 Unicode 编码。如果你希望在序列化时保留中文,可以通过设置 ensure_asciiFalse 来实现。 以下是示例代码: import jsondata {"name": "李浩瑞", &q…...
Perl语言的循环实现
Perl语言的循环实现 引言 Perl是一种强大的脚本语言,以其灵活的语法和强大的文本处理能力著称。无论是在系统管理、网络编程,还是在Web应用开发中,Perl都广泛应用于各种领域。循环是编程语言中一个极其重要的概念,它允许程序重复…...
IOMMU PT
什么是 IOMMU PT IOMMU PT(Input/Output Memory Management Unit - Pass-Through)是一种技术,主要用于虚拟化环境中,特别是在使用直接设备分配(也称为设备直通)的情况下。这项技术允许虚拟机直接访问物理硬…...
DNS协议漏洞利用实验_hust计算机网络安全实验
文章目录 计算机网络安全实验 DNS协议漏洞利用实验 docker使用 建立实验环境docker常用指令 一些注意事项设置本地 DNS 服务器 配置用户计算机设置本地DNS服务器在本地 DNS 服务器中建一个区域 修改主机文件(可略)netwox实施DNS的用户响应欺骗攻击netwo…...
深度学习中的卷积和反卷积(二)——反卷积的介绍
1 简介 反卷积(deconvolution)又称转置卷积,是卷积的拟操作,常用于GAN等模型中。反卷积是上采样的一种,上采样是指将特征图维度恢复到原始图的维度,这种增大维度的过程被称为上采样。上采样可以用插值或反…...
PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红
PyCharm 中引用其他路径下的文件提示 ModuleNotFound,将被引用目录添加到系统路径: # # 获取当前目录 dir_path os.path.dirname(os.path.realpath(__file__)) # # 获取上级目录 parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir))…...
【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)
目录 一、引言 二、自动语音识别(automatic-speech-recognition) 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数…...
Linux 工作队列
系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) Linux 工作队列 Linux 内核源代码情景分析(一) Linux 设备驱动程序(二) 文章目录 系列文章目录综述工作(work_…...
程序血缘分析技术在工商银行软件工程中的应用
当前,随着软件领域技术更新换代速度的日益加快,市场需求也变得更加多样化和个性化,业界普遍通过加速产品迭代来满足客户需求,但在此过程中也暴露出一些研发管理痛点问题,如服务和程序类资产信息分散于各个不同的应用和系统中,信息归集费时费力;设计、开发和测试人员无法…...
纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)
1 引言 最近读一些Java Web开发类的书籍时,发现书中的连接数据库的过程缺少了一些关键性的过程,这对初学者非常不友好。为此,本文将给出详细的连接MySQL数据库的过程,并且是纯手工,不依赖于pom.xml和Web容器ÿ…...
node-sass@4.14.1报错的最终解决方案分享
输入npm i全安装文件所需的依赖的时候,博主是使用sass去书写的,使用的是node-sass4.14.1和sass-loader7.3.1的版本的,安装的时候老是出现错误, node-sass4.14.1版本不再被支持的原因 node-sass 是一个基于 LibSass 的 Node.js 绑…...
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代,智能聊天助手已然化身成为提升用户体验的关键利器,全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮,我毅然投身于极具挑战性…...
【Linux系列】如何使用 nohup 命令在后台运行脚本
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Web渗透测试之XSS跨站脚本攻击 跨域是什么?同源机制又是什么? cors以及Jsonp是什么 一篇文章给你说明白
目录 Cookie的Httponly属性和逃过方式 浏览器同源机制 cors跨域和jsonp跨域和跨域标签 Cors跨域 - 跨源 Jsonp 跨域 jsonp跨域原理: 说明: Cookie的Httponly属性和逃过方式 Xss攻击手段 最常用的目的获取cookie Cookie中设置了 httponlyTrue 方式js操作获…...
K-Means 聚类算法:用生活场景讲解机器学习的“分组”方法
一、K-Means 算法概述 K-Means 是一种经典的无监督学习聚类算法,目的是将数据集中 n 个样本划分成 K 个簇(cluster),每个样本根据其特征被归入与之最接近的簇。简单来说,这就像在超市购物时,顾客会被根据购…...
C语言与ASCII码应用之简单加密
加密是什么?什么是加密通话?用人话说就是一句有含义的话,经过一定的特殊规则把里面的每个字按照这个规则进行改变,但是这个规则只有你和你想让知道这条信息的人知道 今天我们来用ASCII码编写一个简单加密与解密的程序,…...
python无需验证码免登录12306抢票 --selenium(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示:这里可以添加本文要记录的大概内容: 就在刚刚我抢的票:2025年1月8日…...
[论文阅读]Corpus Poisoning via Approximate Greedy Gradient Descent
Corpus Poisoning via Approximate Greedy Gradient Descent [2406.05087] Corpus Poisoning via Approximate Greedy Gradient Descent 基于近似贪婪梯度下降的语料库投毒 面向检索器的攻击 AGGD 通过从所有符元位置中选择排名最高的符元,而不是从单个随机采样…...
C++—9、如何在Microsoft Visual Studio中调试C++
本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...
《深度剖析:开源与闭源模型,AI舞台上的不同角色》
在人工智能蓬勃发展的当下,模型的选择如同为一场战役挑选合适的武器,至关重要。开源模型与闭源模型作为AI领域的两大阵营,在性能和应用场景上展现出显著差异,深刻影响着开发者、企业以及整个行业的走向。 性能差异:实…...
开源 vGPU 方案 HAMi 解析
开源 vGPU 方案 HAMi 一、k8s 环境下 GPU 资源管理的现状与问题 (一)资源感知与绑定 在 k8s 中,资源与节点紧密绑定。对于 GPU 资源,我们依赖 NVIDIA 提供的 device-plugin 来进行感知,并将其上报到 kube-apiserver…...
Unity 大地图功能 离线瓦片地图
不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下: 按下M键打开/关闭大地图功能 打开大地图时,默认玩家位置居中 大地图支持拖拽,可调节拖拽速度,支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...
【计算机网络】什么是网关(Gateway)?
网上冲浪多了,你可以听到过网关(Gateway)这个词,但是却不太清楚网关(Gateway)到底是干什么的、负责网络当中的什么任务,本篇文字将会为你介绍网关(Gateway)的作用&#x…...
AIOps 平台
AIOps(Artificial Intelligence for IT Operations)平台是一种结合人工智能(AI)技术和IT运营管理的解决方案,旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...
使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备
一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB,这里会将创建数据库的代码放到了,将文件复制到data/sql目录中,然后在终端中的项目文件夹中执行: pip install sqlite3现在创建一个名为sqldb的数据库&a…...
TCP与UDP协议
一、主要区别 ① 连接的建立和断开: TCP(Transform Control Protocol)通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后,TCP提供稳定的数据传输服务。当通信结束时,TCP通过四次…...
【MySQL】MVCC详解, 图文并茂简单易懂
欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...
Cisco认证是Cisco公司建立的网络技术证书体系
思科认证体系是由Cisco公司建立的分为3个层次的网络技术证书体系,随着Cisco产品线的扩大和市场份额的不断提升,Cisco产品从当初仅有的 Cisco路由器和Cisco交换机发展到现在的6大方向:路由交换,网络设计,网络安全&#…...
Clojure语言的面向对象编程
Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言,它特别强调函数式编程,Immutable数据结构和强大的并发能力。然而,很多人可能会问:Clojure支持面向对象编程吗?虽然Clojure没有像Java或C那样的传统类和…...
React快速上手到项目实战总篇
React核心价值与前置知识 时刻保持对知识的渴望 家人们 开学!!! 核心价值 组件化(易开发易维护) 数据驱动视图 :定义好数据和ui的显示规则 即UIf(state) 只关注业务数据修改,不在操作DOM 增加开发效率 使用vite创建Recat项目 …...
Dart语言的语法
Dart语言的魅力与应用 引言 随着互联网的发展和移动设备的普及,编程语言层出不穷,各种语言如雨后春笋般被创造出来。其中,Dart语言作为一种现代编程语言,凭借其简洁的语法、强大的功能以及良好的性能,受到了越来越多…...
C++——多态
目录 前言 1. 多态的概念 2. 多态的定义及其实现 2.1 多态的构成条件 2.1.1 实现多态的两个重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 多态场景的⼀个选择题 2.1.5 虚函数重写的⼀些其他问题 2.1.5.1 协变(了解) 2.1.5.2 析构函…...
什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行
什么是Transformer模型中的KV缓存? 在Transformer模型中,KV缓存(Key-Value Cache)具有重要作用,以下是关于它的详细介绍: 概念含义 KV缓存主要是用于存储在模型推理过程中已经计算过的键(Key)和值(Value)信息。在Transformer架构里,比如在自注意力机制等计算环节…...
12.C语言中的struct详解:定义、赋值、指针、嵌套与位字段
目录 1.简介2.struct 的复制3.struct 指针4.struct 的嵌套5.位字段6.弹性数组成员 1.简介 本篇原文为:C语言中的struct详解:定义、赋值、指针、嵌套与位字段。 更多C进阶、rust、python、逆向等等教程,可点击此链接查看:酷程网 …...
洛谷 P3000 [USACO10DEC] Cow Calisthenics G
思路 题目要求断若干条边后形成的连通块中,最大的直径最小,很明显的二分。关键就在于如何写 c h e c k check check 函数了。 可以用 d f s dfs dfs 来判断要断哪条边。 一、 d [ u ] d[u] d[u] 定义 设 d [ u ] d[u] d[u] 为从 u u u 出发到子树…...
前端拿到zip中所有文件并下载为新的zip文件
问题原因:后端返回了一个zip格式文件供前端下载,然后下载后,形成了zip套zip的形式,当后端不愿处理时,前端不能坐以待毙 PS:当压缩包文件量过大,前端可能会出问题(脑测,未…...
JVM调优
jvm调优步骤:1发现问题、2。定位问题、3.解决问题 jdk自带的命令行调优工具: 1. jps 查看正在运行的 Java 进程 jps -v 查看进程启动时的JVM参数 options 参数: -q:仅仅显示 LVMID(local virtual machine id&#x…...
【前端】【HTML】入门基础知识
参考视频:【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>:一级标题,通常用于页面的主标题,字体较大且醒目。 <h2>:二级标题,用于副标题或主要章节标…...
Ubuntu桌面管理环境: GDM3,KDM,LightDM
介绍 Ubuntu是一个广受欢迎的Linux操作系统,拥有强大而多样化的桌面管理环境。其中三个常用的桌面管理环境是GDM3,KDM和LightDM。本篇博客将介绍这三个桌面管理环境的特点和功能。 GDM3 (GNOME Display Manager) GDM3是默认的桌面管理环境,…...
每天你好20250110(距离春节19天!!!)
亲爱的朋友们,大家早上好! 🌞 今晨乃 2025 年 1 月 10 日,星期五,农历乙巳[蛇]年十一月二十一日。祥蛇逸彩送祥,金乌喷薄耀世,晨晖破雾而来,恰似“赤日初升,其道大光”&…...
iOS 本地新项目上传git仓库,并使用sourceTree管理
此文记录的场景描述: iOS前期开发时,在本地创建项目,直至开发一段时间,初期编码及框架已完善后,才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库,可以使用终端,键入命令…...
计算机网络之---计算机网络的性能评估
计算机网络的性能评估是指通过各种标准和指标来衡量网络的工作效率和质量,进而对网络进行优化和改进的过程。评估的目标是确保网络能够满足预期的服务质量(QoS)和性能需求。常见的计算机网络性能评估指标包括带宽、延迟、吞吐量、丢包率等。 …...
对话|企业如何构建更完善的容器供应链安全防护体系
对话|企业如何构建更完善的容器供应链安全防护体系 云布道师 随着云计算和 DevOps 的兴起,容器技术和自动化成为软件开发中的必要手段,软件供应链也进入了自动化及 CI/CD 阶段。然而,容器技术和自动化虽然提升了软件的更新速度&…...
【SpringSecurity】二、自定义页面前后端分离
文章目录 1、用户认证流程AuthenticationSuccessHandler AuthenticationFailureHandlerSecurityFilterChain配置用户认证信息 2、会话并发处理2.1、实现处理器接口2.2、SecurityFilterChain配置 1、用户认证流程 AuthenticationSuccessHandler AuthenticationFailureHandler …...
在 Vue 3 集成 e签宝电子合同签署功能
实现 Vue 3 e签宝电子合同签署功能,需要使用 e签宝提供的实际 SDK 或 API。 e签宝通常提供针对不同平台(如 Web、Android、iOS)的 SDK,而 Web 端一般通过 WebView 或直接使用嵌入式 iframe 来加载合同签署页面。 下面举个 &…...
基于华为ENSP的OSPF接口网络类型深入浅出(4)
本篇技术博文摘要 🌟 OSPF的接口在不同网络类型下的工作方式;不同网络类型下的报文通告方式深入浅出hub-spoke架构 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的必修课。我是肾透侧视攻城狮,一名什么都会一…...