有勇气的牛排博客
☰

SQL Sever 子查询与嵌套查询

有勇气的牛排 1003 数据库 2023-05-18 22:05:47

知止自律打卡-微信小程序APP
一款微信自律打卡小程序,支持自定义打卡项目、习惯记录、项目日记、专注计时与数据统计。自律打卡、学习打卡、读书打卡、健身打卡、运动打卡、减肥打卡、戒色打卡、养生打卡、戒烟、戒酒、戒熬夜等多种场景。万能打卡模板自由创建。可自定义每日打卡目标,记录习惯连续天数,可视化追踪成长进度。
了解产品详情 →
微信搜索「知止自律打卡」
知止自律打卡微信小程序

数据库表

image.png

image.png

image.png

1.带 in 的嵌套查询

查询Student表 并且 Sno 在 SC表中有

select * from Student where Sno in(select Sno from SC)

image.png

2.带 not in 的嵌套查询

查询学生表中 Sno在SC表不存在的学生

select * from Student where Sno not in (select Sno from SC)

伪代码

查询学生表 学生表中的Sno 不在SC表中

image.png

3.带 some 的嵌套查询

SQL支持3中定量比较谓词:some、any 和 all。他们都是判断是否任何或全部返回值都满足搜索要求的。其中,some和any谓词是存在量的,只注重是否有返回值满足搜索要求。这两谓词含义相同,可以替换使用。

查询学生表中,年龄小于平均值的学生

select * from Student where Sage < some (select avg(Sage) from Student)

伪代码

查询学生表 年龄小于 (查询 学生表 年龄平均值)

image.png

4. 带 all 的嵌套查询

all 谓词的使用方法和 any 或者 some 谓词一样,也是把列值与子查询结果进行比较,但是它不要求任意结果值得列值为真,而是要求所有列的查询结果都为真,否则就不返回行。

查询课程表 并且成绩 没有 有 成绩超过 90分的课程

select * from Course where Cno <> all (select Cno from SC where grade > 90)

伪代码

查询课程表 不存在的课程号在 (查询有分数>90分的课程号)

image.png

5. 带exists的嵌套查询

exists谓词只注重子查询结果是否返回行。如果子查询返回一个或多个行,谓词返回为真值,否则为假。
exists搜索条件并不真正使用子查询的结果。他仅测试子查询是否产生任何结果。

查询没有参加考试的学生

select * from Student where not exists (select Sno from SC where Student.Sno = SC.Sno)

伪代码

查询学生表 不存在 (查询 Student.Sno = SC.Sno的结果)

评论区

×
×