SQL(五)——group by子句

group by子句将查询结果按某一列或多列的值分组,值相等的为一组。
对查询结果分组,是为了细化“聚集函数”的作用范围
如果不对查询结果分组,“聚集函数”将作用于整个查询结果。
分组后“聚集函数”将作用于每一组,即每一组都有一个函数值。

这是在《数据库系统概论》里的话,但我觉的,group by子句可以理解成,先把数据按group by子句分组,再在分组里分别执行select。

查询结果分组

SQL(五)——group by子句_第1张图片

select cno 课程代号, count(sno) 选课人数
from sc
group by cno

将查询结果按课程代号分组,然后在各个分组里count
SQL(五)——group by子句_第2张图片

having

select sno 学号, count(cno) 选了多少课
from sc
group by sno
having count(*)>=3

having是将group by的分组进行筛选。
本例中,

  • group by sno 将数据分为四组,
  • having count(*)>=3 将元组数大于3的组筛选出来
  • select sno 学号, count(cno) 选了多少课 最后执行select

SQL(五)——group by子句_第3张图片

where、having的区别

where子句作用于基本表视图,从中选择满足条件的元组。
having短语作用于group by 组,从中选择满足条件的组。

你可能感兴趣的:(数据库)