概述
目录
- 一.带有IN谓词的子查询
- 二.带有比较运算的子查询
- 三.带有ANY或SOME或ALL谓词的字查询
- 四.带有EXISTS谓词的子查询
一.带有IN谓词的子查询
例:查询与“刘晨”在同一个系学习的学生。
按照常规操作的话:
第一步:查询刘晨在哪个系
select Sdept
from Student
where Sname = '刘晨';
查询出来的结果为CS
第二步:查询CS系的同学
select Sno,Sname,Sdept
from Student
where Sdept = 'CS';
另一种方法就是利用嵌套查询把第一步的结果嵌套到第二步中
select Sno,Sname,Sdept
from Student
where Sdept in
(select Sdept
from Student
where Sname='刘晨'
);
二.带有比较运算的子查询
例:找出每个学生超过他自己选修课程平均成绩的课程号
思路:先找到这个学生每个选修课程的成绩平均一下,然后查询大于这个平均成绩的课程。
select 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 |
例:查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄。
select Sname,Sage
from Student
where Sage<any(
select Sage
from Student
where Sdept='CS'
)
and Sdept<>'CS';
条件一:年龄比任意一个计算机系的学生年龄下也就是只有比其中的一个小就行了
条件二:非计算机系
例:查询非计算机科学系中比计算机科学系所以学生年龄都小的学生姓名以及年龄
select Sname,Sage
from Student
where Sage<all(
select Sage
from Student
where Sdept='CS'
)
and Sdept<>'CS';
条件一:比所有的都小
条件二:是非计算机专业的
四.带有EXISTS谓词的子查询
exists代表存在量词。带有exists谓词的子查询不返回任意数据,只返回逻辑真假
select 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谓词的子查询二.带有比较运算的子查询三.带有ANY或SOME或ALL谓词的字查询四.带有EXISTS谓词的子查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复