第三章 关系数据库标准语言SQL

第一节 第二节 第三节 第四节

第三节 查 询   (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送入结果
关系。

吉林大学网络教育学院 版权所有