zoukankan      html  css  js  c++  java
  • SQL中EXISTS/NOT EXISTS的用法

    student/course

      

    SCORE/TEACHER


    例1:查询所有选修了3-245号课程的学生姓名

    有以下四种写法:

    1.exists写法

    首先取Student表中的一个元组,然后在SCORE表中依次找SCORE.Sno=该元组的Sno,并且对应的Cno='3-245',如果存在,则外层查询的where子句返回为真,则Student表中的该元组可以输出。然后依次遍历Student表中的其他元组。

    select SNAME FROM STUDENT 
    where EXISTS(select * from SCORE where STUDENT.SNO = SCORE.SNO and SCORE.CNO = '3-245')

    2. join on写法

    select SNAME from STUDENT 
    JOIN SCORE on STUDENT.SNO = SCORE.SNO and SCORE.cno = '3-245'

    3.in写法

    SELECT SNAME from STUDENT
    WHERE sno in (select sno from SCORE WHERE SNO = STUDENT.SNO and CNO = '3-245')

     4.引用两个表

    SELECT SNAME from STUDENT,SCORE
    WHERE STUDENT.SNO = SCORE.SNO and SCORE.CNO = '3-245'

    结果都是:


    例2:查询没有选修3-245号课程的学生姓名

    select SNAME FROM STUDENT 
    where NOT EXISTS(select * from SCORE where STUDENT.SNO = SCORE.SNO and SCORE.CNO = '3-245')

     例3:查询选修了全部课程的学生姓名

    查找语义:查询这样的学生,没有一门课程是他不选修的。

    查找过程:

    首先,选取Student表中的一个元组,然后在依次判断Course表中的每个元组是否可以输出,只要有一个课程可以输出,则最外层查询的where子句返回为false;而在判断某个课程是否可以输出时,则要利用第三层查询,利用当前的学号和当前的课程号,在SC表中查询,如果存在,则第二层查询where子句返回false。至此,每一门课程都不可以输出时,这个学号对应的元组才可以输出。表示这个学生选修了全部的课程。

    select Sname
    from STUDENT
    where not exists
              (
                     select *
                     from COURSE
                     where not exists
                               (
                                     select *
                                     from  SCORE
                                     where SNO=STUDENT.SNO AND
                                                CNO=COURSE.CNO
                               ) )
  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
    Codeforces Round #278 (Div. 2) B. Candy Boxes [brute force+constructive algorithms]
    noj 2069 赵信的往事 [yy题 无限gcd]
    noj 2068 爱魔法的露露 [线性扫一遍]
    Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
    Word2007文档中怎么输入上标下标
    Linux下查找命令
    矩阵求逆
    LRC算法在人脸识别中应用
    java从txt文档读写数据
  • 原文地址:https://www.cnblogs.com/hjhsysu/p/5731677.html
Copyright © 2011-2022 走看看