SQL进阶-11-having子句
HAVING
子句是SQL
中非常重要的功能,本文将再次介绍该子句的使用。作者指出:SQL语句处理的对象是集合而不是记录,我们要有面向集合的思考方式。
队伍点名
需求
从下面的表格中找出:所有队员都是待命状态的队伍
SQL实现
全称量化实现
所有的队员都是待命,这是一个全称量化的命题,我们使用not exist
来表达
都是待命状态等价于没有不是待命状态
1 | -- 1、全称量化实现 |
having-1-实现
下面我们使用having语句来实现:
1 | select |
自己想到的方法也和下面的特征标记方法类似:
having-2-实现
1 | select |
将条件放在select子句中:
1 | select |
单重集合和多重集合
需求
从下面的原材料表中找出重复的产地及材料
- 锌重复的东京
- 钛钢重复的名古屋
SQL实现
having实现
满足需求城市的特点:排除重复元素前后的个数不同!!!
如果不存在重复元素,不管是否加上distinct可选项,count的结果是相同的
1 | select center -- 查出存在重复的地方 |
1 | select |
exists实现
使用exists性能会变好写;如果想查出不存在重复材料的生产地,改成not exists即可
1 | select center, material |
缺失编号问题
查找一条序列是否存在缺失的编号
1 | select '存在缺失编号' as gap |
1 | -- 表为空也返回记录 |
查找最小的缺失值编号的SQL语句,去掉起始值是1的限制:
1 | select |
学生成绩查询
查询75%以上的学生分数都在80分以上的班级
1 | select class |
分数在50分以上的男生人数比分数在50分以上的女生的人数多的班级
1 | select class |
女生平均分比男生平均分高的班级
1 | select class |