本篇大纲:
数据分组操作
过滤分组
分组结果排序
select语句中字句的执行顺序
子查询
01:查询结果的分组操作
- 分组允许把数据分为多个组,以便能对每个组进行聚集计算
- 分组是在select语句的group by子句中建立的
- 注意:group by 只是创建分组,但并不保证分组里面的数据的排序顺序,需要使用order by子句对分组里面的数据进行排序
02:分组操作实例
- 使用group by语句对select查询的结果进行分组,以便统计
- select语句指定了两个列,vend_id 包含产品供应商的ID,num_prods为计算字段(使用count()函数)
- group by子句按vend_id 排序并分组数据,这导致对每个vend_id 而不是整个表计算
num_prods一次,从而按照vend_id为单位,来计算每个组的总和
注意:group by子句必须出现在where子句之后,order by子句之前
03:过滤分组
- 除了能用group by 分组数据外,MySQL还允许对分组指定条件,规定包含哪些分组,排除哪些分组
- MySQL使用having子句来完成该操作
- where子句过滤指定的行,having子句过滤指定的分组
过滤分组实例一
过滤总数大于等于2的分组
过滤分组实例二
- where与having同时使用,列出具有2个(含)以上,价格为10(含)以上的产品供应商
04:SELECT中子句的顺序
- select语句中使用的子句必须按照一定的次序,下图列出来各个子句在select语句中出现的次数
05:子查询
- 子查询是嵌套在其他查询中的查询
- 子查询实例(业务需求)
- 上述每个步骤都可以单独作为一个查询来执行,可以把一条select语句返回的结果用于另一条select语句的
where子句中
- 查找包含物品TNT2的所有订单的编号
2.查找前一步骤出的订单编号的所有客户ID
3.使用子查询语句完成