首页 理论教育 使用EXISTS和NOTEXISTS的子查询

使用EXISTS和NOTEXISTS的子查询

时间:2023-10-21 理论教育 版权反馈
【摘要】:在前面所介绍的子查询中,都是通过执行一次子查询并将得到的值代入外部查询的WHERE子句中进行计算,这样的子查询称为不相关子查询。图4-37 使用ALL的子查询 使用带有比较运算符的相关子查询实现查找成绩比该科平均成绩低的同学的成绩。带有EXISTS关键字的子查询就相当于进行一次存在测试,外部查询的WHERE子句测试子查询返回的行是否存在。 使用EXISTS运算符查询“教师”表中与“毛志远”同一部门的教师信息。图4-39 使用EXISTS运算符的相关子查询

使用EXISTS和NOTEXISTS的子查询

在前面所介绍的子查询中,都是通过执行一次子查询并将得到的值代入外部查询的WHERE子句中进行计算,这样的子查询称为不相关子查询。

与此相对的就是相关子查询。在包括相关子查询(也称为重复子查询)的查询中,子查询无法独立地与外部查询进行计算,它依靠外部查询获得值。这意味着子查询是重复执行的,为外部查询可能选择的每一行均执行一次。

978-7-111-33494-1-Chapter04-79.jpg

图4-37 使用ALL的子查询

【例4-37】 使用带有比较运算符的相关子查询实现查找成绩比该科平均成绩低的同学的成绩。

代码如下。

978-7-111-33494-1-Chapter04-80.jpg

结果如图4-38所示。

其执行过程为,外部查询先逐个选择成绩表中的行,然后子查询为外部查询的选择计算该行成绩所在课程的平均成绩。对于每一个可能的行,如果该行成绩小于计算的平均成绩,SQL Server 2005就会将该行放入结果集中。

为了便于比较,现执行下面语句查询出每门课的平均成绩。

978-7-111-33494-1-Chapter04-81.jpg(www.xing528.com)

同样,也可以使用EXISTS关键字引入一个相关子查询。带有EXISTS关键字的子查询就相当于进行一次存在测试,外部查询的WHERE子句测试子查询返回的行是否存在。子查询实际上不产生任何数据,它只返回TRUE或FALSE值。

978-7-111-33494-1-Chapter04-82.jpg

图4-38 使用比较运算符的相关子查询

由EXISTS引出的子查询,其目标列通常都用“*”表示。

【例4-38】 使用EXISTS运算符查询“教师”表中与“毛志远”同一部门的教师信息。

代码如下。

978-7-111-33494-1-Chapter04-83.jpg

结果如图4-39所示。

978-7-111-33494-1-Chapter04-84.jpg

图4-39 使用EXISTS运算符的相关子查询

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈