一、ABS(X)
返回的绝对值x,如果x为null则返回null。结果类型派生自参数类型。
SELECT ABS(2); -- 2
SELECT ABS(-32); -- 32
SELECT ABS(NULL); -- NULL
二、AVG([DISTINCT] expr)
返回的平均值
。该 expr
DISTINCT
选项可用于返回 的不同值的平均值 expr
。如果没有匹配的行,则AVG()返回 NULL
。该函数还返回 NULL如果
expr
is NULL
。
SELECT student_name, AVG(test_score)
FROM student
GROUP BY student_name;
三、COUNT(expr)
返回语句检索的行中非NULL
值的数量的计数。结果是一个值。 如果没有匹配的行,则COUNT()返回 0
。COUNT(NULL)
返回 0。
SELECT student.student_name, COUNT(*)
FROM student,course
WHERE student.student_id = course.student_id
GROUP BY student_name;
COUNT(*)有点不同,因为它返回检索到的行数,无论它们是否包含 NULL
值。
对于诸如之类的事务性存储引擎 InnoDB
,存储准确的行数是有问题的。多个事务可能同时发生,每个事务都可能影响计数。InnoDB
不保留表中行的内部计数,因为并发事务可能同时 “看到”不同数量的行。因此,SELECT COUNT(*)
语句只对当前事务可见的行进行计数。
从 MySQL 8.0.13 开始,如果没有额外的子句(例如or ),表的查询性能针对单线程工作负载进行了优化。InnoDB
通过遍历最小的可用二级索引来处理SELECT COUNT(*)
语句,除非索引或优化器提示指示优化器使用不同的索引。如果二级索引不存在,则通过扫描聚簇索引来 InnoDB
处理语句。
InnoDB
以相同的方式处理SELECT COUNT(*)
和SELECT COUNT(1)
操作。没有性能差异。
对于MyISAM
表, 如果从一个表中检索,没有检索到其他列,并且没有子句,COUNT(*)则优化为非常快速地返回 。
四、COUNT(DISTINCT expr,[expr...])
返回具有不同非NULL
expr
值的行数的计数。如果没有匹配的行,则 COUNT(DISTINCT)返回 0
。
SELECT COUNT(DISTINCT results)
FROM student;
五、MAX([DISTINCT] expr)、MIN([DISTINCT] expr)
- MAX() 返回的最大值
expr
。 - MIN() 返回的最小值
expr
。
DISTINCT
关键字可用于查找不同值的最大值。
SELECT student_name, MIN(test_score), MAX(test_score)
FROM student
GROUP BY student_name;
六、SUM([DISTINCT] expr)
返回的总和expr
。如果返回集没有行,则SUM()返回NULL
。DISTINCT
关键字可用于仅对不同值求和 expr
。如果没有匹配的行,或者如果 expr
是NULL
, 则SUM()返回 NULL
。
SELECT SUM(test_score)
FROM student;
七、NOW()
返回当前日期和时间作为值。该值以会话时区表示"YYYY-MM-DD hh:mm:ss"。
LOCALTIME()和LOCALTIMESTAMP()与NOW()的作用相同。
SELECT NOW();
八、CONCAT(str1,str2,...)
返回由连接参数产生的字符串。可能有一个或多个参数。如果有一个参数是NULL则返回NULL。
SELECT CONCAT('My', 'S', 'QL'); -- 'MySQL'
SELECT CONCAT('My', NULL, 'QL'); -- NULL
SELECT CONCAT(14.3); -- '14.3'
-- 对于带引号的字符串,可以通过将字符串彼此相邻来执行连接:
SELECT 'My' 'S' 'QL'; -- 'MySQL'
九、IF(expr1,expr2,expr3)、IFNULL(expr1,expr2)、NULLIF(expr1,expr2)
- IF(expr1,expr2,expr3)如果expr1结果为真,则返回expr2,反之返回expr3。
- IFNULL(expr1,expr2)如果expr1不是null,则返回expr1,反之返回expr2。
- NULLIF(expr1,expr2) 如果expr1 == expr2,则返回null,反之返回expr1。
select IF(1 = 1, "A", "B"); -- A
select IFNULL(null, "A"); -- A
select NULLIF("A", "A"); -- NULL