数据库-DQL进阶

147 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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;