Python学习笔记·第35天:SQL入门——DQL数据查询语言全掌握
·
一、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(...)、LIKE、IS 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;
今日核心总结
- DQL完整语法:
SELECT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...LIMIT - 条件查询:
=、>、<、!=、BETWEEN、IN、LIKE、IS NULL,组合用AND/OR - 聚合函数:
COUNT/MAX/MIN/AVG/SUM,NULL不参与 - 分组:
WHERE分组前过滤,HAVING分组后过滤 - 排序:
ASC升序默认,DESC降序 - 分页:
LIMIT 起始索引, 条数,起始索引 = (页码-1) × 每页条数
更多推荐
所有评论(0)