查询列
SELECT name FROM heros; (单列)
SELECT name, hp_max, mp_max FROM heros; (多列)
SELECT * FROM heros; (所有列)
起别名
SELECT name AS n FROM heros; (AS 可以省略)
查询常数
字符串都用单引号
SELECT '王者荣耀' as platform, name FROM heros
去除重复行
SELECT DISTINCT attack_range FROM heros;
SELECT DISTINCT attack_range, name FROM heros;
- DISTINCT 需要放到所有列名的前面,如果写成
SELECT name, DISTINCT attack_range FROM heros会报错。 - DISTINCT 其实是对后面所有列名的组合进行去重
排序检索数据
- 排序的列名
ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。 - 排序的顺序
ORDER BY 后面可以注明排序规则,ASC代表递增排序,DESC 代表递减排序。如果没有注明排序规则,默认情况下是按照 ASC 递增排序。 - 非选择列排序
ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。 - ORDER BY 的位置
ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。
约束返回结果的数量
英雄名称及最大生命值,按照最大生命值从高到低排序,返回 5 条记录
SELECT name, hp_max FROM heros ORDER BY hp_max DES LIMIT 0,5; (从0开始,不包含5)
SELECT 的执行顺序
关键字的顺序
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY
SELECT 语句的执行顺序
FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT> ORDER BY
SELECT DISTINCT player_id, player_name, count(*) as nums # 顺序5
FROM player JOIN team ON player.team_id = team.team_id # 顺序
WHERE height > 1.80 # 顺序 2
GROUP BY player.team_id # 顺序 3
HAVING num > 2 # 顺序 4
ORDER BY num DESC # 顺序 6
LIMIT 2 # 顺序 7
在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入。
这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的
一、首先先执行 FROM 这一步的。在这个阶段,如果是多张表联查,还会经历下面的几个步骤:
- 首先先通过 CROSS JOIN 求笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;
- 通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行筛选,得到虚拟表 vt1-2;
- 添加外部行。如果我们使用的是左连接、右链接或者全连接,就会涉及到外部行,也就是在虚拟表 vt1-2 的基础上增加外部行,得到虚拟表 vt1-3。
二、最终的虚拟表vt1,就可以在此基础上再进行 WHERE 阶段。在这个阶段中,会根据 vt1 表的结果进行筛选过滤,得到虚拟表 vt2。
三、第三步和第四步,也就是 GROUP 和 HAVING 阶段。在这个阶段中,实际上是在虚拟表 vt2 的基础上进行分组和分组过滤,得到中间的虚拟表 vt3 和 vt4。
四、SELECT 阶段会提取想要的字段,然后在 DISTINCT阶段过滤掉重复的行,分别得到中间的虚拟表 vt5-1 和vt5-2。
五、提取了想要的字段数据之后,就可以按照指定的字段进行排序,也就是 ORDER BY 阶段,得到虚拟表 vt6。
六、 vt6 的基础上,取出指定行的记录,也就是 LIMIT阶段,得到最终的结果,对应的是虚拟表 vt7。
SELECT * 为什么不推荐
- 数据库需要去解析 * 包含哪些字段
- 增加了网络传输量,因为含有跟业务需求无关的数据
- 覆盖索引,影响性能
本文详细介绍了SQL查询中的SELECT语句,包括查询列、起别名、去除重复行、排序检索数据、约束返回结果数量及其执行顺序。强调了ORDER BY的用法和SELECT *的不推荐原因,指出其可能带来的性能问题。

被折叠的 条评论
为什么被折叠?



