我是靠谱客的博主 高兴大米,这篇文章主要介绍SQLServer数据库作业:嵌套查询一.带有IN谓词的子查询二.带有比较运算的子查询三.带有ANY或SOME或ALL谓词的字查询四.带有EXISTS谓词的子查询,现在分享给大家,希望可以做个参考。
目录
- 一.带有IN谓词的子查询
- 二.带有比较运算的子查询
- 三.带有ANY或SOME或ALL谓词的字查询
- 四.带有EXISTS谓词的子查询
一.带有IN谓词的子查询
例:查询与“刘晨”在同一个系学习的学生。
按照常规操作的话:
第一步:查询刘晨在哪个系
复制代码
1
2
3
4select Sdept from Student where Sname = '刘晨';
查询出来的结果为CS
第二步:查询CS系的同学
复制代码
1
2
3
4select Sno,Sname,Sdept from Student where Sdept = 'CS';
另一种方法就是利用嵌套查询把第一步的结果嵌套到第二步中
复制代码
1
2
3
4
5
6
7
8select Sno,Sname,Sdept from Student where Sdept in (select Sdept from Student where Sname='刘晨' );
二.带有比较运算的子查询
例:找出每个学生超过他自己选修课程平均成绩的课程号
思路:先找到这个学生每个选修课程的成绩平均一下,然后查询大于这个平均成绩的课程。
复制代码
1
2
3
4
5
6
7
8select Sno,Cno from SC x where Grade>=( select avg(Grade) from SC y where x.Sno=y.Sno );
第二层中的查询结果就为每科的平均成绩
SC 后面的x和y是给同一个表起别名这是因为第二层的平均成绩必须是上一层同学的平均成绩,如果没有条件x.Sno=y.Sno的话那么就变成了查询每个同学超过全体平均成绩的课程号。
三.带有ANY或SOME或ALL谓词的字查询
ANY与ALL与聚集函数的对应关系
= | <>或!= | < | <= | > | >= | |
---|---|---|---|---|---|---|
ANY | IN | — | <MAX | <=MAX | >MIN | >=MIN |
ALL | – | NOT IN | <MIN | <=MIN | >MAX | >=MAX |
例:查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄。
复制代码
1
2
3
4
5
6
7
8
9select Sname,Sage from Student where Sage<any( select Sage from Student where Sdept='CS' ) and Sdept<>'CS';
条件一:年龄比任意一个计算机系的学生年龄下也就是只有比其中的一个小就行了
条件二:非计算机系
例:查询非计算机科学系中比计算机科学系所以学生年龄都小的学生姓名以及年龄
复制代码
1
2
3
4
5
6
7
8
9select Sname,Sage from Student where Sage<all( select Sage from Student where Sdept='CS' ) and Sdept<>'CS';
条件一:比所有的都小
条件二:是非计算机专业的
四.带有EXISTS谓词的子查询
exists代表存在量词。带有exists谓词的子查询不返回任意数据,只返回逻辑真假
复制代码
1
2
3
4
5
6
7
8select Sname from Student where exists( select * from SC where Sno=Student.Sno and Cno='1' );
第二层先判断条件是否满足学生学号与上一层一样,然后满足选择1号课程
如果条件满足那么就返回true 第一层就会输出这个学生的姓名
最后
以上就是高兴大米最近收集整理的关于SQLServer数据库作业:嵌套查询一.带有IN谓词的子查询二.带有比较运算的子查询三.带有ANY或SOME或ALL谓词的字查询四.带有EXISTS谓词的子查询的全部内容,更多相关SQLServer数据库作业:嵌套查询一.带有IN谓词内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复