1. SELECT查询基础语法

  1. -- 查询一列 --
  2. SELECT name FROM heros
  3. -- 查询多列 --
  4. SELECT name, hp_max, mp_max, attack_max, defense_max FROM heros
  5. -- 检索所有列 --
  6. SELECT * FROM heros;
  7. -- 起别名 --
  8. SELECT name AS n, hp_max AS hm, mp_max AS mm, attack_max AS am, defense_max AS dm FROM heros

1.1 查询常数

概念:在 SELECT 查询结果中增加一列固定的常数列。
作用:用常数列作为某种标记
SELECT '王者荣耀' as platform, name FROM heros
image.png

SELECT 123 as platform, name FROM heros
image.png

1.2 去除重复行

关键字DISTINCT
作用:去除重复的结果,作用类似于 distinct_func(selected result)
Example 1:


SQL:SELECT DISTINCT attack_range FROM heros

image.png
Example 2:


SQL:SELECT DISTINCT attack_range, name FROM heros

image.png

Note:

  1. DISTINCT需要放在所有列名前面
  2. DISTINCT作用是对后面所有列名的组合进行去重

2. 如何排序检索数据

关键字ORDER BY
排序列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。
排序顺序:在ORDER BY后面注明排序规则。ASC代表递增排序,DESC代表递减排序。
ORDER BY 位置:通常位于SELECT语句的最后一条子句


SQL:SELECT name, hp_max FROM heros ORDER BY mp_max, hp_max DESC  


SQL:SELECT name, hp_max FROM heros ORDER BY hp_max DESC LIMIT 5

3. SELECT的执行顺序

关键字顺序SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
执行循序
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT


SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
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 的执行过程中,对于我们来说是不可见的。

4. 如何提升 SELECT 查询效率

  • 如果不需要检索所有列,写清列名,可以减少数据表查询的网络传输量

    5. 总结

image.png