本文主要是介绍嵌套查询(二)-谓词EXISTS实现嵌套查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、EXISTS谓词
1、作用:用于判断一个子查询的结果是否为空
2、使用语法:
【NOT】EXISTS(子查询)
语义:如果子查询的查询结果不为空,则EXISTS为真,否则为假
二、举例
1、举例1:查询选修“003”课程的学生姓名
select sN
from s
where exists(
select *
from sC
where sC.sNo=s.sNo and cNo='003'
)
该子查询是一个相关子查询,用到了父查询中当前元组的属性值
2、举例2:查询没有选修“003”课程的学生姓名(NOT是逻辑运算符,用于对布尔表达式的结果取反)
select sN
from s
where not exists(
select *
from sC
where sC.sNo=s.sNo and cNo='003'
)
3、举例3:查询选修全部课程的学生的姓名
(1)分析:
选修全部课程的学生=没有一门课他不选的学生=每门课他都有选课记录的学生
(2)SQL语句:
select sN
from s
where not exists(select *from cwhere not exists(select *from sCwhere s.sNo=sC.sNo and c.cNo=sC.cNo)
)
第一层子查询和第二层子查询都是相关子查询,用到了当前父查询元组的属性值
4、举例4:查询所学课程包含学生“嫦娥”所学课程的学生的姓名
select sN
from s
where not exists(select *from sC xwhere sNo='202218014030'and not exists(select *from sCwhere s.sNo=sC.sNo and x.cNo=sC.cNo)
)
第一层子查询和第二层子查询都是相关子查询,并且第二层子查询与第一层子查询中用到了相同的表并且还在第二层子查询中使用到了两个表的属性值比较,因此至少要对其中一个表进行重命名操作
三、总结
1、使用谓词EXISTS可实现连接查询,以及其它方式的嵌套查询无法实现的SELECT查询
2、所用带IN谓词、比较运算符、ANY谓词和ALL谓词的子查询都可以使用带EXISTS谓词的子查询来进行等价替换
3、嵌套查询是指在一个SELECT查询中嵌套另一个SELECT查询,增强了SQL语言的查询能力,层层嵌套的查询方式正是SQL语言的"结构化"特征所在
4、在实际应用中,应根据查询需求选择合适的查询嵌套方式,在相关子查询中一定要注意是否需要进行重命名操作。
这篇关于嵌套查询(二)-谓词EXISTS实现嵌套查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!