SQL基础学习总结:5(HAVING子句的使用&&ORDER BY排序子句的使用)

本文深入解析了SQL中GROUP BY与ORDER BY子句的使用技巧,包括HAVING子句的条件筛选,以及如何利用ORDER BY进行结果排序。通过实例展示了聚合函数、常数和列名在HAVING子句中的应用,强调了子句的书写顺序与执行流程,以及在ORDER BY中使用别名和避免使用列编号的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为聚合结果指定条件

HAVING子句

HAVING子句可以让我们筛选分组之后的各种数据,其语法结构如下:

SELECT <列名1>,<列名2>,<列名3>
FROM <表名>
GROUP BY <列名1>,<列名2>,<列名3>
HAVING <分组结果对应的条件>

例:

使用HAVING子句前:
在这里插入图片描述
使用HAVING子句后:
在这里插入图片描述
例:
在这里插入图片描述

HAVING子句的构成要素

HAVING子句中能够使用的3种要素,如下:

  • 常数
  • 聚合函数
  • GROUP BY子句中指定的列名(即聚合键)

例:HAVING子句的错误范例
在这里插入图片描述
product_name列并不包含在GROUP BY子句中,因此不允许写在HAVING子句中,可以理解为GROUP BY子句汇总后得到的表中并不存在product_name这一列。

例:正确示范
在这里插入图片描述

对查询结果进行排序

ORDER BY子句

ORDER BY子句可以用来指定排列的顺序,其语法结构如下:

SELECT <列名1>,<列名2>,<列名3>
FROM <表名>
ORDER BY <排序基准点1>,<排序基准点2>,<排序基准点3>,...;

ORDER BY子句中书写的列名称为排序键
例:
在这里插入图片描述
在这里插入图片描述
注意:如果有多个排序键的话,优先按照第一个排序键排序,如果该列存在相同值的话,再接着参考右侧的键,如下图所示:
在这里插入图片描述
在这里插入图片描述
子句书写顺序:
1.SELECT子句→2.FROM子句→3.WHERE子句→4.GROUP BY子句→5.HAVING子句→6.ORDER BY子句
ORDER BY子句子句通常写在SELECT语句的末尾。

指定升序或降序

想要降序排列时,我们可以在列名后面加上DESC关键字

例:
在这里插入图片描述
注:其实使用升序排序时,正式的书写方式应该是使用ASC关键字,但是省略该关键字时会默认使用升序排序。

由于ASC和DESC这两个关键字是以列为单位指定的,因此可以同时指定一个列为升序,指定其他列为降序,例:
在这里插入图片描述

NULL的顺序

默认情况下,MySQL将null算作最小值。

例:
在这里插入图片描述
在这里插入图片描述

在排序键中使用别名

在讲别名的使用之前我们先梳理一下MySQL的子句语法顺序和执行顺序

MySQL中子句的语法顺序:

SELECT[DISTINCT] →FROM→JOIN→ON→WHERE→GROUP BY→HAVING→UNION→ORDER BY→LIMIT

MySQL中子句的执行顺序,即在执行时SQL按照下面的顺序进行执行:

FROM→JOIN→ON→WHERE→GROUP BY(开始使用SELECT中的别名,后面的语句中都可以使用别名)→AVG,SUM,…→HAVING→SELECT→DISTINCT→ORDER BY

由此我们可以在OEDER BY子句中使用别名。

ORDER BY子句中可以使用的列

ORDER BY子句中也可以使用存在于表中、但并不包含在SELECT子句中的列,如下图:
在这里插入图片描述
除此以外,还可以使用聚合函数,如下图:
在这里插入图片描述

不要使用列编号

列编号是指SELECT子句中的列按照从左到右的顺序进行排列时所对应的编号(1,2,3…)。
例:
在这里插入图片描述
在这里插入图片描述
以上两个例子的执行结果是一样的,也就是说我们可以使用列编号来执行ORDER BY语句,但是使用列编号可能会造成一些问题。
不要使用列编号理由如下:

  1. 代码阅读起来比较困难;
  2. 该功能将来会被删除(SQL-92中明确指出了该排序功能未来会被删除)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值