SQL小白笔记 SQL相关子查询与非相关子查询

SQL子查询可以分为相关子查询和非相关子查询两类

表格数据如下

score 表

student 表

非相关子查询不依赖于外部查询条件 换句话说非相关子查询可以从母查询中独立出来且可以单独运行。

例:

SELECT * FROM dbo.Student
WHERE SID IN (SELECT SID FROM dbo.SC WHERE score>70)

SId  Sname    Sage                             Ssex
01    赵雷    1990-01-01 00:00:00.000    男
02    钱电    1990-12-21 00:00:00.000    男
03    孙风    1990-12-20 00:00:00.000    男
05    周梅    1991-12-01 00:00:00.000    女
07    郑竹    1989-01-01 00:00:00.000    女

将非相关子查询从母查询中取出后

SELECT SID FROM dbo.SC WHERE score>70

SID
02
03
03
03
05
05
07
07

可以独立运行

相关子查询 相关子查询依赖于外部于外部查询条件,需要母查询中的查询条件来进行查询  无法独立出来单独运行

查询每个同学小于自己最高分的成绩

例:SELECT *FROM dbo.Score AS A
WHERE Degree<(SELECT MAX(Degree) FROM dbo.Score AS B WHERE A.Sno=B.Sno)

Sno    Cno    Degree
103    3-245    86
103    6-166    85
105    6-166    79
105    3-245    75
109    3-245    68
109    3-105    76

将相关子查询独立出来进行查询

SELECT MAX(Degree) FROM dbo.Score AS B WHERE A.Sno=B.Sno

报错无法绑定由多个部分组成的标识符 "A.Sno"

由此我们可知相关子查询是需要母查询给予相对应的查询条件才可以运行

拆解此相关子查询

SELECT *FROM dbo.Score AS A
WHERE Degree<(SELECT MAX(Degree) FROM dbo.Score AS B WHERE A.Sno=B.Sno)

=

where a.Degree<(select MAX(degree) from Score b where b.Sno=a.Sno)

where a.Degree<(select MAX(degree) from Score b where b.Sno=103)
and a. Sno=103
where a.Degree<(select MAX(degree) from Score b where b.Sno=105)
and a. Sno=105
 where a.Degree<(select MAX(degree) from Score b where b.Sno=109)
and a. Sno=109

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值