ANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系
[例1]  查询与“刘晨”在同一个系学习的学生。
        此查询要求可以分步来完成
    ① 确定“刘晨”所在系名           
        SELECT  Sdept 
        FROM    Student                           
        WHERE  Sname= ' 刘晨 ';
        结果为: CS
② 查所有在IS系学习的学生。   
        SELECT  Sno,Sname,Sdept   
        FROM      Student               
        WHERE  Sdept= ' CS ';
结果为:
Sno    Sname    Sdept
200215121    李勇    CS
200215122    刘晨    CS
将第一步查询嵌入到第二步查询的条件中
    SELECT Sno,Sname,Sdept
        FROM Student
      WHERE Sdept  IN
                  (SELECT Sdept
                  FROM Student
                  WHERE Sname= ‘ 刘晨 ’);
此查询为不相关子查询。
用自身连接完成[例1]查询要求
    SELECT  S1.Sno,S1.Sname,S1.Sdept
      FROM    Student S1,Student S2
      WHERE  S1.Sdept = S2.Sdept  AND
                      S2.Sname = '刘晨';
假设一个学生只可能在一个系学习,并且必须属于一个系,则在[例39]可以用 = 代替IN :
    SELECT Sno,Sname,Sdept
    FROM    Student
    WHERE Sdept  =
                  (SELECT Sdept
                    FROM    Student
                    WHERE Sname= ‘刘晨’);
查询与“刘晨”在同一个系学习的学生。
      可以用带EXISTS谓词的子查询替换:
    SELECT Sno,Sname,Sdept
    FROM Student S1
      WHERE EXISTS
                (SELECT *
                    FROM Student S2
                    WHERE S2.Sdept = S1.Sdept AND
                                  S2.Sname = ‘刘晨’);
[例2]查询选修了课程名为“信息系统”的学生学号和姓名
    SELECT Sno,Sname                      ③ 最后在Student关系中
      FROM    Student                                    取出Sno和Sname
    WHERE Sno  IN
            (SELECT Sno                              ② 然后在SC关系中出选
              FROM    SC                                    修了3号课程的学生学号
              WHERE  Cno IN
                    (SELECT Cno                      ① 首先在Course关系中出
                      FROM Course                      “信息系统”的课程号,为3号
                      WHERE Cname= ‘信息系统’
                    )
              );
用连接查询实现[例2]
    SELECT Sno,Sname
      FROM    Student,SC,Course
      WHERE Student.Sno = SC.Sno  AND
                    SC.Cno = Course.Cno AND
                    Course.Cname=‘信息系统’;
[例3]  查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄
    SELECT Sname,Sage
    FROM    Student
    WHERE Sage < ANY (SELECT  Sage
                                        FROM    Student
                                        WHERE Sdept= ' CS ')
          AND Sdept <> ‘CS ' ;          /*父查询块中的条件 */
用聚集函数实现[例3]
    SELECT Sname,Sage
    FROM  Student
    WHERE Sage <
                            (SELECT MAX(Sage)
                              FROM Student
                              WHERE Sdept= ‘CS ')
          AND Sdept <> ' CS ’;
[例4]  查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄。
方法一:用ALL谓词
    SELECT Sname,Sage
    FROM Student
    WHERE Sage < ALL
                          (SELECT Sage
                            FROM Student
基本的sql语句有哪些
                            WHERE Sdept= ' CS ')
          AND Sdept <> ' CS ’;
方法二:用聚集函数
        SELECT Sname,Sage
        FROM Student
        WHERE Sage <
                              (SELECT MIN(Sage)
                                FROM Student
                                WHERE Sdept= ' CS ')
              AND Sdept <>' CS ’;
[例5]查询所有选修了1号课程的学生姓名。
 
用嵌套查询
    SELECT Sname
    FROM Student
    WHERE EXISTS
                  (SELECT *
                    FROM SC
                    WHERE Sno=Student.Sno AND Cno= ' 1 ');
  用连接运算
    SELECT Sname
    FROM Student, SC
    WHERE Student.Sno=SC.Sno AND SC.Cno= '1';
[例6]  查询没有选修1号课程的学生姓名。
    SELECT Sname
    FROM Student
    WHERE NOT EXISTS
                  (SELECT *
                    FROM SC
                    WHERE Sno = Student.Sno AND Cno='1');
[例7] 查询选修了全部课程的学生姓名。
        SELECT Sname
        FROM Student
        WHERE NOT EXISTS
                    (SELECT *
                        FROM Course
                        WHERE NOT EXISTS
                                      (SELECT *
                                      FROM SC
                                      WHERE Sno= Student.Sno
                                            AND Cno= Course.Cno
                                      )
                      );
[例8]查询至少选修了学生200215122选修的全部课程的学生号码。
用NOT EXISTS谓词表示:   
    SELECT DISTINCT Sno
      FROM SC SCX
      WHERE NOT EXISTS
                    (SELECT *

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