(三)DQL——SELECT

三、DQL——SELECT

1. 查询列

select name from heros
select name, hp_max, mp_max, attack_max, defense_max from heros
select * from heros

2. 起别名

select name as n, hp_max as hm, mp_max as mm, attack_max as am, defense_max as dm from heros

3. 查询常数

SELECT查询还可以对常数进行查询。对的,就是在SELECT查询结果中增加一列固定的常数列。这列的取值是我们指定的,而不是从数据表中动态取出的。

select '王者荣耀' as platform, name from heros
select 123 as platform, name from heros
select 'King' as platform, name from heros

4. 去除重复行

select distinct attack_range from heros

5. 排序

  1. 排序的列名:ORDER BY后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。
  2. 排序的顺序:ORDER BY后面可以注明排序规则,ASC代表递增排序,DESC代表递减排序。如果没有注明排序规则,默认情况下是按照ASC递增排序。我们很容易理解ORDER BY对数值类型字段的排序规则,但如果排序字段类型为文本数据,就需要参考数据库的设置方式了,这样才能判断A是在B之前,还是在B之后。比如使用MySQL在创建字段的时候设置为BINARY属性,就代表区分大小写。
  3. ORDER BY的位置:ORDER BY通常位于SELECT语句的最后一条子句,否则会报错。
select name, hp_max from heros order by hp_max desc
select name, hp_max from heros order by mp_max, hp_max desc

6. 约束返回结果的数量

使用LIMIT关键字,约束返回结果的数量

select name, hp_max from heros order by hp_max desc limit 5

7. Select关键字顺序

SELECT查询时的两个顺序:

1.关键字的顺序(不能颠倒的):

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

2.SELECT语句的执行顺序:

FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

SQL执行原理:

  • 首先SELECT是先执行FROM这一步的。在这个阶段,如果是多张表联查,还会经历下面的几个步骤:

    • 首先先通过CROSS JOIN求笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;
    • 通过ON进行筛选,在虚拟表vt1-1的基础上进行筛选,得到虚拟表 vt1-2;
    • 添加外部行。如果我们使用的是左连接、右链接或者全连接,就会涉及到外部行,也就是在虚拟表vt1-2的基础上增加外部行,得到虚拟表vt1-3。
  • 进行WHERE阶段。在这个阶段中,会根据vt1表的结果进行筛选过滤,得到虚拟表vt2。

  • 进入第三步和第四步,也就是GROUP和 HAVING阶段。得到中间的虚拟表vt3和vt4。

  • 进入到SELECT和DISTINCT阶段。首先在SELECT阶段会提取想要的字段,然后在DISTINCT阶段过滤掉重复的行,分别得到中间的虚拟表vt5-1和vt5-2。

  • 按照指定的字段进行排序,也就是ORDER BY阶段,得到虚拟表vt6。

  • 最后在vt6的基础上,取出指定行的记录,也就是LIMIT阶段,得到最终的结果,对应的是虚拟表vt7。

8. 为什么不用SELECT*

当我们初学SELECT语法的时候,经常会使用SELECT *,因为使用方便。实际上这样也增加了数据库的负担。所以如果我们不需要把所有列都检索出来,还是先指定出所需的列名,因为写清列名,可以减少数据表查询的网络传输量

posted @ 2022-08-24 17:06  言思宁  阅读(21)  评论(0编辑  收藏  举报