提到where和having是我们平时经常用到的关键字,一起用到的免不了还有 group by 我们分别先简单说一下每个关键字的用法 where:用于提取那些满足指定条件的记录。 having:筛选分组后的各组数据 group by:通常搭配聚合函数来使用 我们通过一个例题来深刻理解这几个关键字的用法
有一个courses 表 ,有: student (学生) 和 class (课程)。 请列出所有超过或等于5名学生的课。
例如,表:
student | calss |
---|---|
A | Math |
B | English |
C | Math |
D | Biology |
E | Math |
F | Computer |
G | Math |
H | Math |
I | Math |
应该输出:
class |
---|
Math |
-- 方法一 select class from (select class, count(Distinct student) nums from courses group by class) where nums >= 5 -- 方法二 select class from courses group by class having count(distinct student)>=5
我们可以看到相于使用 where 和 having ,having的写法更加简洁易读 所以我们这里具体来说一下 where 和 having具体的区别
where
having
所以在流程上讲过程是 where ——> group by ——> having,由此我们可以推断出他们的效率 因为where是直接作用在原数据中,而 having 则要在各种分组后进行筛选,效率不言而喻 所以我们推荐常用 where 关键字,而在特殊的情况下再使用 having 关键字