SQL笔记——嵌套查询

  • Post author:
  • Post category:其他




嵌套查询


定义

一个SELECT-FROM语句为一个查询块

每一个查询块返回一个元组集和,这个查询块也可以用在其他查询块中

被嵌入的查询块叫做子查询,被嵌入的查询块叫做父查询

可嵌入的子句:WHERE,HAVING,FROM

嵌入FROM :基于派生表的查询

嵌入WHERE,HAVING :嵌套查询



基于派生表的查询

子查询的结果集可以和基本关系一样作为查询的数据源,



不过需要对结果集命名以便引用

\textcolor{red}{不过需要对结果集命名以便引用}






不过需要对结果集命名以便引用






例子
SELECT S.Sno,Sname,avg_grade
FROM S,
	(SELECT Sno,AVG(Grade) AS avg_grade
     FROM SC
     GROUP BY Sno
    ) AS SC_AVG
WHERE S.sno=SC_AVG.Sno


嵌套查询

将一个查询块嵌套在另外一个查询块的WHERE子句或者HAVING短语的条件中的查询



带有谓词IN的查询

查询与’刘晨’在同一个系学习的学生

1.确定刘晨所在系

SELECT Sdept
FROM S
WHERE Sname='刘晨';

2.查找所有在IS系学习的学生

SELECT Sno,Sname,Sdept
FROM S
WHERE Sdept IN ('IS');

3.将1嵌入2中得

SELECT Sno,Sname,Sdept
FROM S
WHERE Sdept IN 
(
    SELECT 
    FROM S
    WHERE Sname='刘晨'
);

先执行子查询,得到结果集{‘IS’}

再执行父查询

这种



子查询的执行不需要依赖父查询的嵌套查询称为不相关子查询

\textcolor{red}{子查询的执行不需要依赖父查询的嵌套查询称为不相关子查询}






子查询的执行不需要依赖父查询的嵌套查询称为不相关子查询






带有比较运算符的子查询

当能确切知道内层查询返回一个



单值

\textcolor{red}{单值}






单值





时,可以用比较运算符(>,<.=,>=,<=,<>,!=),



子查询一定要放在运算符号之前

\textcolor{red}{子查询一定要放在运算符号之前}






子查询一定要放在运算符号之前




找出这样的学号和课程号:该生选修这门课的成绩超过他所有选修课的平均成绩

SELECT Sno,Cno
FROM SC AS X
WHERE Grade>=(SELECT AVG(Grade)
              FROM SC AS Y
              WHERE X.Sno=Y.Sno
);

该查询为



相关子查询

\textcolor{red}{相关子查询}






相关子查询






带有SOME,ALL谓词的子查询

需要配合比较运算符使用

谓词 作用
>SOME 大于子查询结果的某个值
>ALL 大于子查询结果的所有值
<SOME 小于子查询结果的某个值
<ALL 大于子查询结果的所有值
>=SOME 大于等于子查询结果的某个值
>=ALL 大于等于子查询结果的所有值
<=SOME 小于等于子查询结果的某个值
>=ALL 大于等于子查询结果的所有值
=SOME 等于子查询结果的某个值
=ALL 等于子查询结果的所有值
<> SOME 不等于子查询结果的某个值
<> ALL 不等于子查询结果的所有值

其他系中比信息系某些学生年龄小的学生姓名和年龄

SELECT Sname,Sage,
FROM S
WHERE Sage<SOME(SELECT Sage 
                FROM S
                WHERE Sdept='IS'
) AND Sdept<>'IS';


带有EXISTS谓词的子查询

带有EXISTS的子查询不返回数据,之返回逻辑值 ‘true’或’false’

若内层结果为空 返回false

若内层结果不为空 返回true

查询所有选修了c1课程的学生姓名

SELECT Sname
FROM S
WHERE EXISTS(SELECT *
             FROM SC
             WHERE Sno=S.Sno AND Cno='C1'
);


小结

1.嵌套查询分为相关子查询和不相关子查询

2.子查询的属性不会出现在父查询的输出上

3.子查询不能使用ORDER BY,ORDER BY语句只能对最终结果排序



版权声明:本文为weixin_51335655原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。