一、DQL是什么?

一句话:DQL就是用来查数据库的,关键字是 SELECT

二、DQL完整语法顺序

SELECT 字段列表 FROM 表名
WHERE 条件列表
GROUP BY 分组字段
HAVING 分组后条件
ORDER BY 排序字段
LIMIT 分页参数

执行顺序FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

三、基本查询

SELECT name, age FROM emp;            -- 查指定字段
SELECT * FROM emp;                    -- 查所有字段(尽量不用*)
SELECT workaddress AS '工作地址' FROM emp;  -- 起别名,AS可省略
SELECT DISTINCT workaddress FROM emp;      -- 去重

四、条件查询

比较运算符>>=<<==<>/!=BETWEEN...AND...IN(...)LIKEIS NULL

逻辑运算符AND/&&OR/||NOT/!

SELECT * FROM emp WHERE age = 88;
SELECT * FROM emp WHERE age < 20;
SELECT * FROM emp WHERE age != 88;
SELECT * FROM emp WHERE idcard IS NULL;
SELECT * FROM emp WHERE idcard IS NOT NULL;
SELECT * FROM emp WHERE age BETWEEN 15 AND 20;        -- 含15和20
SELECT * FROM emp WHERE age IN(18, 20, 40);           -- 多选一
SELECT * FROM emp WHERE name LIKE '__';               -- 两字员工
SELECT * FROM emp WHERE idcard LIKE '%X';             -- 身份证以X结尾
SELECT * FROM emp WHERE gender='女' AND age<25;       -- 组合条件

五、聚合函数

函数作用
COUNT(*)统计行数
MAX(字段)最大值
MIN(字段)最小值
AVG(字段)平均值
SUM(字段)求和

注意:NULL 值不参与聚合函数运算。

SELECT COUNT(*) FROM emp;
SELECT AVG(age) FROM emp;
SELECT MAX(age) FROM emp;
SELECT MIN(age) FROM emp;

六、分组查询

SELECT 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组后条件;
子句作用区别
WHERE分组过滤不能用聚合函数
HAVING分组过滤可以用聚合函数
SELECT gender, COUNT(*) FROM emp GROUP BY gender;
SELECT gender, AVG(age) FROM emp GROUP BY gender;
SELECT workaddress, COUNT(*) FROM emp WHERE age<45 GROUP BY workaddress HAVING COUNT(*)>=3;

注意GROUP BY 之后,SELECT 只能跟分组字段聚合函数,查其他字段没意义。

七、排序查询

SELECT 字段 FROM 表名 ORDER BY 字段1 排序方式, 字段2 排序方式;
排序方式含义
ASC升序(默认)
DESC降序

多字段排序:先按字段1排,相同再按字段2排。

SELECT * FROM emp ORDER BY age;                -- 默认升序
SELECT * FROM emp ORDER BY entrydate DESC;     -- 降序
SELECT * FROM emp ORDER BY age ASC, entrydate DESC;  -- 先按年龄升序,再按入职降序

八、分页查询

SELECT 字段 FROM 表名 LIMIT 起始索引, 查询条数;
  • 起始索引从 0 开始
  • 公式:起始索引 = (页码 - 1) × 每页条数
  • 第一页可简写 LIMIT 10
SELECT * FROM emp LIMIT 0, 10;   -- 第1页,10条
SELECT * FROM emp LIMIT 10, 10;  -- 第2页,10条

九、综合练习

-- 1. 查询年龄为20,21,22,23岁的女员工
SELECT * FROM emp WHERE gender='女' AND age IN(20,21,22,23);

-- 2. 查询性别男,年龄20-40岁,姓名为三个字的员工
SELECT * FROM emp WHERE gender='男' AND age BETWEEN 20 AND 40 AND name LIKE '___';

-- 3. 统计年龄小于60岁的男女员工人数
SELECT gender, COUNT(*) FROM emp WHERE age<60 GROUP BY gender;

-- 4. 查询年龄≤35的员工姓名和年龄,按年龄升序,相同按入职降序
SELECT name, age FROM emp WHERE age<=35 ORDER BY age ASC, entrydate DESC;

-- 5. 查询性别男、年龄20-40岁前5个员工,按年龄升序
SELECT * FROM emp WHERE gender='男' AND age BETWEEN 20 AND 40 ORDER BY age ASC, entrydate DESC LIMIT 5;

今日核心总结

  1. DQL完整语法SELECT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...LIMIT
  2. 条件查询=、>、<、!=、BETWEEN、IN、LIKE、IS NULL,组合用 AND/OR
  3. 聚合函数COUNT/MAX/MIN/AVG/SUM,NULL不参与
  4. 分组WHERE 分组前过滤,HAVING 分组后过滤
  5. 排序ASC 升序默认,DESC 降序
  6. 分页LIMIT 起始索引, 条数,起始索引 = (页码-1) × 每页条数

更多推荐