3.2 查询函数
计算字段
当存储在数据库表中的数据不能直接满足我们的需求时,就需要我们利用已有的字段创造出所需内容,这就是计算字段
拼接 CONCAT( )
字段与字段拼接
SELECT CONCAT(p_name, p_id) FROM players;
字符与字段拼接
SELECT CONCAT('昂贵的', i_name) FROM items WHERE i_name REGEXP '金';
使用字段别名 AS
拼接后字段名消失,MySQL 不方便识别,因此使用字段别名
可以省略
AS
,但是为了规范我们不省略AS
SELECT CONCAT(p_id, p_name) AS 玩家姓名id FROM players;
算术运算:+ - * /
SELECT p_id, p_name, YEAR(NOW()) - YEAR(registration_time) AS 注册时长 FROM players;
使用函数
这一部分只做介绍,实际查询可以参考上述计算字段的使用,只需要把计算字段换成相应的函数即可
文本处理函数
函数名 | 函数作用 |
---|---|
UPPER(~) | 将字符串转换为大写 |
LOWER(~) | 将字符串转换为小写 |
LENGTH(~) | 返回字符串的长度 |
LEFT(~,n) | 返回字符串左边第n个字符 |
RIGHT(~,n) | 返回字符串右边第n个字符 |
SUBSTRING(~,m,n) | 返回字符串从m开始的n个字符 |
LTRIM(~) | 去除字符串左边的空格 |
RTRIM(~) | 去除字符串右边的空格 |
TRIM(~) | 去除字符串两边的空格 |
REPLACE(~,a,b) | 将字符串中的a替换为b |
CONCAT(~,~,~,...) | 将多个字符串连接起来 |
数值处理函数
函数名 | 函数作用 |
---|---|
ABS(~) | 取绝对值 |
CEIL(~) | 向上取整 |
FLOOR(~) | 向下取整 |
ROUND(~,n) | 四舍五入 |
SQRT(~) | 开平方 |
POWER(~,n) | 幂函数 |
日期和时间处理函数
函数名 | 函数作用 |
---|---|
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前时间 |
YEAR(~) | 返回日期的年 |
MONTH(~) | 返回日期的月 |
DAY(~) | 返回日期的日 |
DATEDIFF(~,~) | 返回两个日期之间的天数 |
聚集函数
对一组数据(一列数据)进行统计操作,如求和、平均值、最大值、最小值等,返回单个值
常见的聚集函数:
SUM( )
、AVG( )
仅对数值类型计算,MAX( )
,MIN( )
可对任意类型的列
COUNT( ) 计数
null
值字段不参与运算,因此选取计算的字段时一般选择非空字段,如主键或主属性(id)COUNT( )
函数还可以使用DISTINCT
关键字来忽略重复项,统计数目,比如# 统计交易记录中有多少个不同的物品 SELECT COUNT(DISTINCT ri_id) AS 交易记录物品类别数 FROM records;
SUM( ) 总计
AVG( ) 平均值
MAX( ) / MIN( ) 最大值 / 最小值
WHERE 与聚集函数
在 WHERE 子句中不能使用聚集函数
聚集函数也叫列函数,基于整列数据进行计算,而 WHERE
子句则是对数据进行过滤。在 WHERE
字句执行结束前,聚集函数无法获得列数据 ( 列数据需要等待 WHERE
子句通过行条件进行过滤后才能获得 ) ,因此,WHERE
子句中不能使用聚集函数。