双层 not exist 嵌套
来源:互联网 发布:ocr软件手机版 编辑:程序博客网 时间:2024/04/29 12:00
STUDENT:
CREATE TABLE `student` ( `STUID` varchar(40) DEFAULT NULL, `STUNAME` varchar(100) DEFAULT NULL, )
COURSE:
CREATE TABLE `course` ( `COURSEID` varchar(40) DEFAULT NULL, `COURSENAME` varchar(100) DEFAULT NULL )
REGISTER:
CREATE TABLE `register` ( `STUID` varchar(40) DEFAULT NULL, `COURSEID` varchar(40) DEFAULT NULL, `GRADE` smallint(6) DEFAULT NULL )
问题:检索选读全部课程的学生姓名
SELECT STUNAME FROM STUDENT WHERE NOT EXISTS ( SELECT * FROM COURSE WHERE NOT EXISTS ( SELECT * FROM register WHERE register.COURSEID = COURSE.COURSEID AND register.STUID =STUDENT.STUID) )
现在我们从后面的子查询向前分解:
1.所有未选过的课程的数据集:
SELECT * FROM COURSE WHERE NOT EXISTS ( SELECT * FROM register WHERE COURSEID = COURSE.COURSEID)
2.所有没被某位学号为 @STUID 的学生选过的课程的记录集(@STUID学生的未选课程):
SELECT * FROM COURSE WHERE NOT EXISTS ( SELECT * FROM register WHERE register.COURSEID = COURSE.COURSEID AND STUID =@STUID)
3.遍历每一个主查询的学号,每一个学号都按第二筛选方法筛选出:没有未选课程的学生的学号。(不包括在第查询方法查询出的“有未学课程的学号的记录集”中的记录。)
请注意:用主查询中的 学生.学号 代替了@STUID。
SELECT STUNAME FROM STUDENT WHERE NOT EXISTS ( SELECT * FROM COURSE WHERE NOT EXISTS ( SELECT * FROM register WHERE register.COURSEID = COURSE.COURSEID AND register.STUID =STUDENT.STUID) )
这已经是整个查询语句,可以看出子查询中用学生.学号替换了第2步中的 @STUID,(没忘了吧,第二步求的是没有选修全部课程的某个学生)。
from http://blog.csdn.net/beiyetengqing
0 0
- 双层 not exist 嵌套
- 双层 not exist 嵌套
- SQL 双层 not exist 嵌套
- 双层嵌套GridView
- VIewpager双层嵌套
- Fragment双层嵌套时,
- 关于ListView嵌套双层布局
- Viewpager + Fragment 的双层嵌套
- iframe双层嵌套后,高度自适应
- 解决ViewPager双层嵌套的滑动问题
- 解决ViewPager双层嵌套的滑动问题
- 解决ViewPager双层嵌套的滑动问题
- viewPager双层嵌套的事件问题
- .Net MVC 视图双层foreach嵌套
- python装饰器为什么要双层嵌套?
- 自定义饼图---嵌套双层饼图
- Struts2标签嵌套以及遍历双层list
- .net 双层repeater嵌套 实现树形结构
- Tomcat调用两次Filter的init()方法
- JS中选择被选中的单选框radio和jQuery选择被选中的单选框的方法以及简单的数字加减
- 设备驱动中的tty(kernel-4.7)
- c++ 求最大公约数&&最小公倍数
- Android内存泄漏的简单检查与分析方法
- 双层 not exist 嵌套
- 哈夫曼树
- Ajax学习笔记
- 16-12.15随笔
- Jquery
- npm install —— 从一个简单例子,看本地安装与全局安装的区别
- mysql 重命名表 navicat for mysql小问题
- 多个请求使用同一个Servlet
- 变量(variables)