DQL:
DQL语言是用来检索表中数据的语言
执行顺序
SELECT 子句 6
FROM 子句 1
JOIN.. ON.. 子句 2
WHERE 子句 3
GROUP BY 子句 4
HAVING 子句 5
ORDER BY 子句 7
LIMIT 子句 8
基础查询
一条DQL语句中至少要包含的子句有两个:SELECT子句和FROM 子句
SELECT子句用来指定检索表中哪些字段
FROM 子句用来指定检索哪些表
SELECT 字段1[,字段2,...] 字段可以是具体字段名,也可以是"*",也可以是函数 或表达式
FROM 表1[,表2]
SELECT * FROM 表名,可以检索表中所有记录,并且结果集会列出该表每条记录所有字段
WHERE子句
在DQL中添加WHERE子句时,可以仅将满足WHERE子句要求的记录检索出来
连接多个条件
AND:"与",都为真时才为真
OR:"或",都为假时才为假
AND优先级高于OR的
为了提高OR的优先级,可以使用"()"
IN(列表)
IN(列表):判断是否等于列表中的其中之一
NOT IN(列表)
NOT IN(列表):判断不在列表中
BETWEEN...AND...
BEWTEEN...AND...用于判断是否在一个区间范围内
DISTINCT去重
DISTINCT关键字要紧跟在SELECT关键字之后
作用:可以将DISTINCT后面指定的字段值相同的记录从结果集中去除.
LIKE,模糊查询
LIKE中有两个通配符:
_:下划线表示任意一个字符(1个)
%:百分号表示任意个字符(0-多个)
LIKE '%X%' :字符串中含有X(X前面可以有任意个字符,后面也可以有任意个字符)
LIKE '_X%' :字符串中第二个字符是X
LIKE 'X%' :字符串以X开头
LIKE '%X' :字符串以X结尾
LIKE '%X_Y' :字符串倒数第三个字符是X,最后一个字符是Y
NULL值判断
判断一个字段的内容是否为空:
IS NULL:判断字段值为空
IS NOT NULL:判断字段值不为空
不可以使用=或<>判断NULL值
ORDER BY-排序
ORDER BY子句,用于对结果集按照指定的字段进行升序或降序排序.
ORDER BY 字段名 [ASC]:将结果集按照指定的字段升序排(从小到大)
ORDER BY 字段名 DESC:将结果集按照指定的字段降序排(从大到小)
可以按照多字段排序,排序存在优先级,优先按照第一个字段排序结果集,当第一个字段值相同的记录再按照第二个字段排序以此类推.
不指定排序方式时,默认为升序
ORDER BY 子句应当是DQL中最后一个子句(由于方言的存在,在Mysql,MariaDB中分页使用时会在其后追加LIMIT子句)
分页查询
将一个DQL的查询结果集分段查询出来.
场景:
当一个DQL语句查询的结果集记录数很多时,我们就可以分段将数据查询数来,提高查询速度减少资源开销
方言:
分页没有在SQL92中定义规定的语法,因此分页是方言,不同的数据库分页语法可能完全不一样.
在Mysql和MariaDB中使用LIMIT子句来完成,而ORACLE则是使用ROWNUM伪列来完成.
ORDER BY 字段
LIMIT M,N
M表示跳过结果集中的多少条记录
N检索出多少条记录
在分页中常见的两个参数:
每页显示的记录数
当前要显示第几页
分页的计算公式:
M:(当前页数-1)*每页显示的记录数
N:每页显示的记录数
DQL中使用函数或表达式请见(四)