查询列表:一(多)个字段、常量、变量、表达式、函数
查询结果是虚拟表格
关键字 | 作用 |
---|---|
AS | 起别名(可省略) |
ORDER BY | 条件排序 |
LEFT/RIGHT/INNER JOIN | 联合查询 |
WHERE | 条件查询 |
LIMIT | 分页查询 |
GROUP BY | 分组查询 |
HAVING | 分组后过滤 |
书写顺序
select → from → where → group by → having → order by → limit
执行顺序
from → where → group by → having → select → order by → limi
基础查询
查询全部数据 - *
SELECT * FROM 表
查询部分数据 - 字段名
SELECT 查询列表 FROM 表
起别名
SELECT 字段名 AS '别名' FROM 表
条件查询
SELECT * FROM 表 WHERE 条件
模糊查询
SELECT 查询列表 FROM 表 WHERE 字段名 LIKE 模糊条件
占位 | 作用 |
---|---|
% | 占用任意多位 |
_ | 占用1位 |
-- 姓马的学生 SELECT * FROM student WHERE `name` LIKE '马%'; -- 姓名包含马的学生 SELECT * FROM student WHERE `name` LIKE '%马%'; -- 第二个字为马的学生 SELECT * FROM student WHERE `name` LIKE '_马%'; -- 3个字名字的学生 SELECT * FROM student WHERE `name` LIKE '___';
排序查询
关键字 | 排序规则 |
---|---|
ASC | 升序(默认) |
DESC | 降序 |
SELECT * FROM 表 ORDER BY 排序列 排序规则,排序列 排序规则
-- 多个排序规则,先按首个规则排序,再参照后序排列
-- 按照数学成绩升序排列 英语降序排列
SELECT * FROM student ORDER BY math,english DESC;
聚合函数
默认将null值过滤,用IFNULL(列,值)改变默认值
函数名 | 作用 |
---|---|
SUM(字段名) | 求和 |
AVG(字段名) | 求平均数 |
MAX(字段名) | 最大值 |
MIN(字段名) | 最小值 |
COUNT(字段名) | 统计出现次数 |
-- 不处理重复数据
SELECT COUNT(`name`) FROM stu;-- (包含重名)
-- 用DISTINCT实现去重
SELECT DISTINCT COUNT(`name`) FROM stu;
分组查询
SELECT 查询列表 FROM 表 [WHERE 子句] GROUP BY 分组字段,... [HAVING 子句]
结合聚合函数,聚合函数在每组运行
-- 男生和女生的数学平均分
SELECT AVG(IFNULL(math,0)) FROM stu GROUP BY sex;
WHERE :分组前过滤
-- 求男女数学平均分,低于70分不参与计算
SELECT AVG(math) FROM stu WHERE math>=70 GROUP BY sex
HAVING :分组后过滤
-- 求男女同学数学平均分,分数低于70分不参与计算,平均分小于90的分组不展示
SELECT AVG(math) mathavg FROM stu WHERE math>=70 GROUP BY sex HAVING mathavg>=90
分页查询
SELECT 查询列表 FROM 字段名 WHERE 条件 LIMIT 起点,条数
内连接
SELECT 查询字段 FROM
表1 a JOIN 表2 b
ON a.关系字段 = b.关系字段
外连接
左连接
返回左表所有记录和右表符合连接条件记录
SELECT 查询字段 FROM
表1 a LEFT JOIN 表2 b
ON a.关系字段 = b.关系字段
右连接
返回右表所有记录和左表符合连接条件记录
SELECT 查询字段 FROM
表1 a RIGHT JOIN 表2 b
ON a.关系字段 = b.关系字段
全连接SELECT 查询字段 FROM
表1 a LEFT JOIN 表2 b
ON a.关系字段 = b.关系字段
UNION
SELECT 查询字段 FROM
表1 a RIGHT JOIN 表2 b
ON a.关系字段 = b.关系字段
子查询
查询语句嵌套在另一个查询语句中的查询 ,通常可以使用比较运算符、IN、EXISTS、ANY、ALL等关键字