本文已参与「新人创作礼」活动,一起开启掘金创作之路。
DQL数据查询语言
(一)排序
通过ORDER BY子句,可以将查询出的结果进行排序,排序只影响显示结果,不会影响数据库中数据的顺序。
语法
SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认是升序
DESC: 降序
1. 单列排序
单列排序就是使用一个字段排序。
示例
# 查询所有数据,使用年龄降序排序:
SELECT * FROM student3 ORDER BY age DESC;
2. 组合排序
语法
SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名1 [ASC|DESC],字段名2 [ASC|DESC];
示例
# 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序:
SELECT * FROM student3 ORDER BY age DESC, math DESC;
(二)单行函数
单行函数是指对于每一行数据进行计算后得到一行输出结果。SQL单行函数根据数据类型分为字符函数、数字函数、日期函数、转换函数等。
1. 数值函数
(1)abs(x)
返回 x 的绝对值
示例
SELECT ABS(-1) -- 返回1
(2)ceil(x)
返回大于或等于 x 的最小整数(向上取整)
示例
SELECT CEIL(1.5) -- 返回2
(3)floor(x)
返回小于或等于 x 的最大整数(向下取整)
示例
SELECT FLOOR(1.5) -- 返回1
(4)rand()
返回 0 到 1 的随机数
示例
SELECT RAND() --0.93099315644334
(5)round(x)
返回离 x 最近的整数(四舍五入取整)
示例
SELECT ROUND(1.23456) --返回1
2. 字符串函数
(1)concat(s1,s2...sn)
字符串 s1,s2 等多个字符串合并为一个字符串
示例
SELECT CONCAT("SQL ", "Runoob ", "Google ", "Facebook") AS ConcatenatedString;
--返回 SQLRunoobGooogleFacebook
(2)locate(s1,s)
从字符串s中获取s1的开始位置
示例
SELECT LOCATE('st','myteststring'); -- 5
(3)lower (s)
将字符串 s 的所有字母变成小写字母
示例
SELECT LOWER('RUNOOB'); -- runoob
(4)upper(s)
将字符串转换为大写
示例
SELECT UPPER("runoob"); -- RUNOOB
(5)replace(s,s1,s2)
将字符串 s2 替代字符串 s 中的字符串 s1
示例
SELECT REPLACE('abc','a','x'); --xbc
(6)substr(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
示例
SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO
(7)trim(s)
去掉字符串 s 开始和结尾处的空格和制表符
示例
SELECT TRIM(' RUNOOB ') AS TrimmedString; --RUNOOB
(8)reverse(s)
反转字符串
示例
SELECT reverse(' dog'); -- 返回god
3. 时间日期函数
(1)now()
返回系统当前时间(包括年月日时分秒)
示例
SELECT now()
(2)sysdate()
返回系统当前时间(包括年月日时分秒)
示例
SELECT sysdate()
(3)curdate()
返回当前日期(年月日)
示例
select curdate()
(4)curtime()
返回当前时间(时分秒)
示例
select curtime()
(5)month(date)
返回参数日期的月份值
示例
select MONTH('2020-11-12')
(6)week(date)
返回参数日期是一年中的第几个星期
示例
select week('2020-11-12')
(7)day(date)
返回参数日期的日值
示例
select day('2020-11-12')
(8)date_add(date,INTERVAL expr type) 在参数日期上增加相应的时间 date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。 type 参数可以是下列值:
4. 流程控制函数
(1)if(condition,expr1,expr2)
condition条件为true时返回expr1。condition条件为false时,返回expr2。
示例
(2)ifnull(expr1,expr2)
expr1不为null时返回expr1。expr1为null时返回expr2。
示例
用此函数解决前面null运算结果为null的问题
解决方式
因为english有null值,所以用ifnull函数处理english
select name,math+ifnull(english,0) as total from student3
5. 其它函数
(1)version()
查看数据库版本
(2)user()
查看数据库当前用户
(3)md5(expr)
返回参数md5加密后的值
(三)聚合函数
聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。
聚合函数会忽略空值。
五个聚合函数:
count: 统计指定列记录数,记录为NULL的不统计
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值,如果不是数值类型,那么计算结果为0
1. count函数
统计指定列记录数
示例1
# 查询总条数
SELECT COUNT(*) FROM student3;
示例2
# 查询年龄大于40的总人数
SELECT COUNT(*) FROM student3 WHERE age>40;
说明:先查询后进行聚合函数统计
示例3
说明:忽略了null值
2. sum函数
计算指定列的数值和,如果不是数值类型,那么计算结果为0
示例
# 计算math的总和
SELECT SUM(math) FROM student3;
3. avg函数
计算指定列的平均值,如果不是数值类型,那么计算结果为0
示例
# 查询数学成绩平均分
SELECT AVG(math) FROM student3;
4. max函数
计算指定列的最大值
示例
# 查询数学成绩最高分
SELECT MAX(math) FROM student3;
5. min函数
计算指定列的最小值
示例
# 查询数学成绩最低分
SELECT MIN(math) FROM student3;