SQL学习笔记——null与限定谓语、极值函数
最近在学习MICK[日]的《SQL进阶教程》,该教材内容深入浅出,非常值得学习。
记录下该教程中的一些难点与疑惑,方便之后继续学习。
class_1
name |
age |
city |
black |
22 |
beijing |
raj |
19 |
shanghai |
jack |
21 |
guangzhou |
class_4
name |
age |
city |
may |
18 |
guangzhou |
make |
20 |
guangzhou |
robin |
19 |
shenzhen |
找出比4班住在北京的所有学生年纪都小的1班学生
如果4班中没有住在北京的学生,就返回所有1班学生(假设这样更符合查询业务需求)
使用限定谓语all
select * from class_1
where age<all (select age from class_4 where city='beijing')
使用极值函数min()
select * from class_1
where age<(select min(age) from class_4 where city='beijing')
因为select min(age) from class_4 where city='beijing'返回null
age<null,逻辑判断为unknown
而age<all (select age from class_4 where city='beijing')返回结果为true
也可以使用coalesce()函数
select * from class_1
where age<(select coalesce(min(age), 100) from class_4 where city='beijing')
【注意】
select age from class_4 where city='beijing'返回空值
select 1<all (select age from class_4 where city='beijing')返回1
但是select 1<(select age from class_4 where city='beijing')返回unknown
添加all后结果有很大的变化,这是为什么呢?欢迎大家讨论。