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

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

第三节 查 询   (1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)
    相关子查询,首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若
WHERE子句返回值为真,则取此元组放入结果表;然后再取外层表的下一个元组;重复这一过程,直至外层
表全部检查完为止。引出子查询的谓词:带有IN谓词的子查询;带有比较运算符的子查询;带有ANY或ALL
谓词的子查询;带有EXISTS谓词的子查询。
一、带有IN谓词的子查询
    [例] 查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完成。
        ① 确定“刘晨”所在系名
        SELECT Sdept
        FROM Student
        WHERE Sname= ' 刘晨 ';
    结果为:
            Sdept
            IS
        ② 查找所有在IS系学习的学生。
        SELECT Sno,Sname,Sdept
        FROM Student
        WHERE Sdept= ' IS ';
    结果为:
        Sno Sname Sdept
        95001 刘晨 IS
        95004 张立 IS
    构造嵌套查询:将第一步查询嵌入到第二步查询的条件中。
        SELECT Sno,Sname,Sdept
        FROM Student
        WHERE Sdept IN
        (SELECT Sdept
        FROM Student
        WHERE Sname= ‘ 刘晨 ’);
    此查询为不相关子查询。DBMS求解该查询时也是分步去做的。构造嵌套查询:将第一步查询嵌入到第二
步查询的条件中。用自身连接完成本查询要求。
        SELECT S1.Sno,S1.Sname,S1.Sdept
        FROM Student S1,Student S2
        WHERE S1.Sdept = S2.Sdept AND
        S2.Sname = '刘晨';

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