1、DQL基本查询
1.1DQL基本查询
SELECT 字段1,字段2,...FROM 表名;
SELECT 子句用于指定查询表中的字段
FROM子句用于指定数据来自那张表;
1.2 WHERE字句
在DQL语句中,WHERE用于指定过滤条件,此时仅将满足该过滤条件的记录查询出来
1、算数运算符:
+ ,- ,* ,/(DIV),%
2、逻辑运算符
NOT(逻辑非) AND(与) OR(或)
优先级:AND的优先级高于OR,为了提高OR的优先级,可以使用小括号 "()"
3、比较运算符
=,!=,>,<,<=,>=
BETWEEN:在两值之间 NOT BETWEEN:不在两值之间
IN:在集合中 NOT IN:不在集合中
IS NULL :为空 IS NOT NULL:不为空
NULL值判断:
判断一个字段值是否为NULL,使用IS NULL和 IS NOT NULL
注:不可以用= 和 != 判断NULL值
2、DQL高级查询
2.1 LIKE 模糊查询
_ :表示任意一个字符。确切的数量表示1个字符
%:表示任意个字符。不确切的数量表示0-任意个字符
LIKE '%X%' 表示字符串中包含字符X
LIKE '_X%' 表示字符串中第二个字符是X
LIKE 'X%' 表示字符串以X开始
LIKE '%X' 表示字符串以X结束
LIKE '%X_Y' 表示字符串倒数第三个字符数X并且最后一个字符是Y
2.2 AS 别名
语法格式:字段名AS别名(AS可以不写) 字段名<空格>别名
别名通常使用在SELECT子句和FROM子句中
在SELECT子句中我们可以为字段取别名。
当字段为函数或表达式时,我们通常给字段添加别名,为了增加可读性
为SELECT中的子查询取别名
在FROM 子句中可以为表添加别名
2.3 ORDER BY排序
ORDER BY字句用于查询结果集进行排序,可以按照ORDER BY后指定的字段值进行升序或降序排序
升序:ORDER BY 字段【ASC】
将当前结果集按照指定的字段值从大到小进行排序
降序:ORDER BY 字段 DESC
将当前结果集按照指定的字段值从打到小排序
ORDER BY可以按照多个字段排序,此时排序存在优先级
首先按照ORDER BY后指定的第一个字段的值将结果集按照该字段排序方式(升序或降序)排序
排序后再按照第二个字段指定的值排序,仅会对第一个字段值相同的记录按照第二个字段排序
若有第三个字段以此类推
不指定排序方式时,默认位升序
SELECT name,comm,salary
FROM teacher
ORDER BY comm ASC,salary DESC; # 每个字段都要单独指定排序方式
多字段排序时,首先将结果集按照comm的排序方式进行排序,之后将comm字段值相同的记录在按照salary的方式进行排序
当comm字段值不同的记录时,则不会按照salary字段排序
2.4 LIMT分页查询
LIMIT 字句用于限制有SELECT语句返回的数据数量 或者 UPDATE,DELETE语句的操作数量
1:使用场景:当一条DQL语句可以查询出非常大量的数据时,我们可以分批将数据查询,例如淘宝检索一件商品时, 分出现第一页,第二页等信息,每页展示30条记录。一次仅查询30条记录,避免因为数据庞大导致系统 过度的资源开销。
2:语法说明:
SELECT ...
FROM ...
WHERE ...
ORDER BY ...
LIMIT M,N;
M:表示跳过结果集M条记录(页数-1)*条目数
N:表示从跳过的M条记录后连续检索N条记录 条目数
3、聚合操作
聚合操作指的是在数据查找基础上对数据进一步整理筛选行为,实际上聚合操作也属于数据 的查询筛选范围
3.1聚合函数
avg(平均值)max(最大值)min(最小值)sum(所有记录的和)count(个数)
注:MIN、MAX、SUM、AVG是对值得统计;而COUNT是对记录数的统计
聚合函数忽略NULL的值;这个在AVG,COUNT上尤为明显
语法: SELECT MAX()... FROM 表名
3.2GROUP BY分组
GROUP BY字句可以将结果集按照制定字段值相同的记录进行分组,配合聚合函数可以 实现组内统计。
在SELECT字句中出现聚合函数时,那么不在聚合函数中的字段都要出现GROUP BY字句中
GROUP BY字句是配合聚合函数使用的,如果SELECT字句中没有聚合函数,通常不写GROUP BY
1、单字段分组
示例:SELECT AVG(salary),title FROM teacher GROUP BY title;
2、多字段分组
GROUP BY后面制定多个字段时,分组方式为:这些字段值都一样的记录看做一组
示例:SELECT COUNT(*),class_id,gender
FROM student
GROUP BY class_id,gender; # 班级号相同且性别相同的记录分为一组
3、分组聚合排序
示例:SELECT AVG(salary) avg_sal,subject_id
FROM teacher
GROUP BY subject_id ORDER BY avg_sal DESC;
3.3HAVING字句
HAVING字句用于分组中的过滤条件
聚合函数不能在WHERE字句中使用,需要使用HAVING字句
应用:HAVING字句是紧跟在GOUBO BY字句之后,用于对分组进行过滤
HAVING和WHERE的区别:
WHERE是第一次检索表数据时用于添加过滤条件,确定结果集
HAVING是在GROUP BY之后(将结果集分组之后)添加过滤条件的,用于确定分组
3.4 DISTINCT去重
DITINCT可以将结果集按照指定的字段取出重复行
DISTNCT必须紧跟在SELECT关键字之后