第三节 查 询 (1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)
父查询和子查询中的表均可以定义别名。
SELECT Sno,Sname,Sdept
FROM Student S1
WHERE S1.Sdept IN
(SELECT Sdept
FROM Student S2
WHERE S2.Sname= ‘ 刘晨 ’);
二、带有比较运算符的子查询,当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,
!=或< >)。与ANY或ALL谓词配合使用。
三、带有ANY或ALL谓词的子查询,谓词语义——ANY:任意一个值;ALL:所有值。需要配合使用比较运算符:
> ANY 大于子查询结果中的某个值;
> ALL 大于子查询结果中的所有值;
< ANY 小于子查询结果中的某个值;
< ALL 小于子查询结果中的所有值;
>= ANY 大于等于子查询结果中的某个值;
>= ALL 大于等于子查询结果中的所有值;
<= ANY 小于等于子查询结果中的某个值;
<= ALL 小于等于子查询结果中的所有值;
= ANY 等于子查询结果中的某个值;
=ALL 等于子查询结果中的所有值(通常没有实际意义);
!=(或<>)ANY 不等于子查询结果中的某个值;
!=(或<>)ALL 不等于子查询结果中的任何一个值。
结果:
Sname Sage
王敏 18
执行过程:1.DBMS执行此查询时,首先处理子查询,找出IS系中所有学生的年龄,构成一个集合(19,
18);2. 处理父查询,找所有不是IS系且年龄小于19 或 18的学生,ANY和ALL谓词有时可以用集函数实现
ANY与ALL与集函数的对应关系:

用集函数实现子查询通常比直接用ANY或ALL查询效率要高,因为前者通常能够减少比较次数。
四、带有EXISTS谓词的子查询:1. EXISTS谓词;2. NOT EXISTS谓词;3. 不同形式的查询间的替换;4. 相
关子查询的效率;5. 用EXISTS/NOT EXISTS实现全称量词;6. 用EXISTS/NOT EXISTS实现逻辑蕴函。
1. EXISTS谓词,
存在量词,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假
值“false”。若内层查询结果非空,则返回真值。若内层查询结果为空,则返回假值。由EXISTS引出的子
查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。
2. NOT EXISTS谓词
思路分析:本查询涉及Student和SC关系。在Student中依次取每个元组的Sno值,用此值去检查SC关系。
若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= '1',则取此Student.Sname送入结果
关系。
|