2 qq 34500543 qq_34500543 于 2017.01.12 14:07 提问

求帮讲解一下这条sql语句,理解不了

已知表SC(sno(学号),cno(课程号),score(成绩))
问题:找出至少选修了101号学生选修过的全部课程的学生号
--不存在这样的课程y,学生2选修了y,而学生x没有选。
SELECT DISTINCT Sno
FROM SC X
WHERE NOT EXISTS
(SELECT *
FROM SC Y
WHERE Y.Sno ='101'AND NOT EXISTS
(SELECT *
FROM SC Z
WHERE Z.Sno=X.Sno AND Z.Cno=Y.Cno))

3个回答

xiaobailian1
xiaobailian1   2017.01.12 15:13

DISTINCT:用于返回唯一不同的值(查询的结果中若是有多个相同的值(两个A),使用DISTINCT会把多余的值去掉,留下一个唯一值(一个A))
NO EXISTS:返回除了条件意外的结果(具体详情可以看他的博客:http://blog.csdn.net/zhiweianran/article/details/7868894)
以上语句可翻译如下(如果有错请谅解小白):
查询SC表中除了(学号为101的学生并且除了(学生101选择的课程))的学号

Tiger_Zhao
Tiger_Zhao   Rxr 2017.01.12 15:26

暂时先别管 NOT EXIST,看剩下的条件:
X 是全体学生
Y 是101号学生的全部课程(下面简称为“相关课程”)
Z 这里不是直接的查询条件,而是:
1) 先用 学生*相关课程 “做”了个二维表;
2) 然后(和 NOT EXIST 相关了),找这些单元对应的 Z 记录,哪些是不存在的。
3) 不存在表示某个学生没有选修相关课程的其一,从最终返回结果中排除。

qq_24972061
qq_24972061   2017.01.12 17:40

SELECT DISTINCT Sno
FROM SC X
WHERE NOT EXISTS
(SELECT *
FROM SC Y
WHERE Y.Sno ='101'AND NOT EXISTS
(SELECT *
FROM SC Z
WHERE Z.Sno=X.Sno AND Z.Cno=Y.Cno))

可以把(SELECT *
FROM SC Y
WHERE Y.Sno ='101'AND NOT EXISTS
(SELECT *
FROM SC Z
WHERE Z.Sno=X.Sno AND Z.Cno=Y.Cno)) 看成为B,就是查找Sno这个字段在SC表中,不在B中。同样一次往下类推。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SQL学习笔记之数据库专题(一):SQL语句详解
SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能。常见的关系数据库有Oracle,SQLServer,DB2,Sybase。开源不收费的有MYSQL,SQLLite等。今天我们主要以MYSQL为例子,讲解SQL常用的SQL语句。 一.数据库 1.创建数据库 create database [if not exists] db_name [charact
mybatis mapper.xmlj讲解
MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。对于所有的力量,SQL 映射的 XML 文件是相当的简单。当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量。MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式。 SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 配置给定命名空间
LK的数学题 欧拉函数
LK的数学题 时间限制:1000 ms  |  内存限制:65535 KB  难度:3 描述 LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。 输入多组测试数据,每一行有一个整数n(n 输出小于n同时和n互素的整数的个数 样例输入 7 12 0 样例输出 6 4 来源 POJ 套上
第二十六套(三)
数据库部分1.简述mysql 中 MyISAM和Innodb这2种不同类型的数据类型的优缺点。 MyISAM InnoDB 事务 不支持 支持 数据行锁定 不支持,只有表锁定 支持 外键约束 不支持 支持 表空间大小 相对小 相对大,
Andorid和最近遇到的问题
安卓的环境变量弄死我了当打开安卓模拟器AVD时遇到:PANIC: Could not open: AVD         解决方法:http://www.cnblogs.com/jhxk/articles/3625865.html 前2天写一个班级管理系统遇到一个诡异的BUG:打开项目时报出404,下面的控制台报出“session or hibernateTemplte”;看到这个玩意,
nyoj 291-LK的数学题
http://acm.nyist.net/JudgeOnline/problem.php?pid=291 LK的数学题 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。 输入多组测试数据,每一行有一个整数n(n 输出小于n同时和n
SQL语句大全讲解
SQL语句大全讲解SQL语句大全讲解SQL语句大全讲解SQL语句大全讲解,全,有用。
291 LK的数学题【欧拉函数】
LK的数学题 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。 输入多组测试数据,每一行有一个整数n(n 输出小于n同时和n互素的整数的个数 样例输入 7 12 0 样例输出 6 4 欧拉函数,最主要是求
NYOJ 291 LK数学题(欧拉函数)
LK的数学题 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。   输入 多组测试数据,每一行有一个整数n(n 输出 小于n同时和n互素的整数的个数 样例输入 7 12 0 样例输出 6 4 初次接触到欧拉函数,当然先百度啦!!
【数据库之SQL复杂查询】SQL复杂查询基本语法
一:子查询概念出现在where子句中的select语句被称为子查询,子查询返回一个集合,通过与返回的集合比较来确定查询集合。二:子查询应用2.1 in | not in 基本语法 :表达式 [not] in 子查询 解释:表达式是子查询中的元素,表现为 表达式[不]包含于子查询返回的集合中,子查询返回的集合[不]包含表达式。eg:列出李四 张三同学的全部信息select * from stude