谁能帮我解释清楚这个sql
SELECT 姓名  FROM 学生
WHERE NOT EXISTS(SELECT *  FROM 课程
      WHERE NOT EXISTS(SELECT *  FROM 学生_课程
        WHERE 学生.学号=学号 AND 课程.课程号=课程号)); 这个语句谁知道是什么意思?
学生表的实验数据序号 学号 姓名 年龄 性别 所在系
1 S1 李明 21 男 计算机
2 S2 张小红 21 男 计算机
3 S3 李和明 22 女 计算机
4 S4 张三 21 男 计算机
5 S5 刘宏 23 男 计算机
6 S6 王红应 20 女 计算机
7 S7 吴非 19 男 数学
8 S8 丁玉 21 男 数学
9 S9 赵名 21 女 数学
10 S12 张共可 22 男 物理课程表的实验数据序号 课程号 课程名 先行课
1 C1 计算机引论
2 C2 数据结构 C3
3 C3 C语言编程 C1
4 C4 软件工程 C6
5 C6 数据库 C2
6 C5 计算机文化
7 C7 高等数学
8 C8 概率统计 C9
9 C9 线性代数 C7
10 C10 力学
选课表的实验数据序号 学号 课程号 成绩
1 S1 C1 60
2 S2 C1 93
3 S3 C1  
4 S4 C1 89
5 S1 C2 79
6 S2 C2  
7 S3 C2 80
8 S4 C3 90
9 S1 C3 92
10 S2 C3 81
11 S1 C7 85
12 S4 C7 75

解决方案 »

  1.   

    两个not exists,感觉不容易理解,建议重写
      

  2.   

    WHERE 学生.学号=学号放到外面的exists判断意思就明朗多了
      

  3.   

    先看帮助查EXISTS的使用方法,再找NOT EXISTS的使用方法。就明白语句的意思。
      

  4.   

    SELECT 姓名  FROM 学生 
    WHERE NOT EXISTS(SELECT *  FROM 课程 
          WHERE NOT EXISTS(SELECT *  FROM 学生_课程 
            WHERE 学生.学号=学号 AND 课程.课程号=课程号)); 
    查询没选任何课程的学生