SQL语句基础-⼦查询
⼦查询
在SQL语句中,⼀个select-from-where语句称为⼀个查询块。如果⼀个select语句嵌套在⼀个select,insert,update或delete语句中,则称之为⼦查询或者内存查询。包含⼦查询的语句则称为主查询或者外层查询
⼦查询语句⼀般出现在where和having⼦句中
写在where中的⼦句中的⼦查询⼀般有下⾯的形式
WHERE <;列名> [NOT] IN (⼦查询) // (集合
WHERE <;列名> ⽐较运算符 (⼦查询) //(单值
WHERE EXISTS (⼦查询) //(是否空值
例如:
使⽤⼦查询进⾏基于集合的查询
//查询与钟⽂辉同学在同⼀个系的同学
//第⼀步先查询钟⽂辉同学所在的系
//然后把系作为已知条件查同学信息
SELECT*FROM Student
WHERE Sdept IN(
SELECT Sdept FROM Student Where Sname ='钟⽂辉');
使⽤⼦查询进⾏⽐较查询
//查询选修了C04课程且课程成绩⾼于此课程平均成绩的的学⽣学号和该门课成绩
//先查出C04课程的平均成绩
//然后把平均成绩作为已知条件查同学学号和成绩
SELECT Sno, Grade FROM SC
WHERECno='C04'AND Grade>(
SELECT AVG(Grade)FROM SC Where Cno ='C04');
带有ANY和ALL的⼦查询
//查询⽐C03课程成绩都⾼的选了C04课程的学⽣的学号和成绩
SELECT Sno, Grade FROM SC
WHERECno='C04'AND Grade>ALL(
SELECT  Grade  FROM SC Where Cno ='C03');
使⽤带EXSITS谓词的⼦查询
//查询选修了C04课程且课程的学⽣姓名
SELECT Sname FROM SC
WHERE EXISTS(
SELECT*FROM SC
Where SC.Sno=Student.Sno  AND  Cno ='C04');
注意,带exists谓词的⼦查询是先执⾏外层,再执⾏内层查询,根据内存查询返回的true和false来判断外层数据是否满⾜条件。
查询的集合运算
SQL提供与关系代数中集合并,交,差对应的谓词,他们分别是UNION,INTERSECT,EXCEPT,当使⽤这些操作进⾏查询时,参与运算的两个查询分别⽤括号括起来。
例如:
//查询计算机系和机电系的所有学⽣信息
sql语句查询不包含(SELECT*FROM Student
WHERE Sdept='计算机系')
UNION
(SELECT*FROM Student
WHERE Sdept='机电系')
//查询同时选修了C03和C04课程的学⽣的学号(SELECT Sno FROM SC WHERE Cno='C03') INTERSECT
(SELECT Sno FROM SC WHERE Cno='C04')
//查询选修了C01但是没有选修C02课程的学⽣的学号(SELECT Sno FROM SC WHERE Cno='C01') EXCEPT
(SELECT Sno FROM SC WHERE Cno='C02')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。