sql如何查询所有学生都选修了的课程的课程号cno?

  • 思考:如何查询所有学生都选修了的课程的课程号cno?
  • 语句:select cno from course where NOT EXISTS(select *from student where NOT EXISTS(select *from sc B where B.sno = student.sno and course.cno = B.cno));
  • 分析:

这个问题是我最近作业遇见的,当时想了挺久的,发现不会,然后去网上搜索了也有蛮久的,但是就是没搜到和我这个类似的,就算有我也有点看不懂或者和我要求的不一样,最后我还是通过对我的需求(其实就是EXISTS和NOT EXISTS)进行相关的查阅和了解最终还是把这个题解决了,至于到底对不对,我有进行比较多次的分析和实例的测试,应该是没有问题的,那么首先看题:

思考:如何查询所有学生都选修了的课程的课程号cno?

其中表分别为course sc student
表中的具体数值如下(使用的软件为navicat不是说一定需要用这个软件,sql语句大多是通的,但是不同软件的话可能会有一定的小出入)
以下分别是course表、sc表、student表


语句:select cno from course where NOT EXISTS(select *from student where NOT EXISTS(select *from sc B where B.sno = student.sno and course.cno = B.cno));

分析:

*首先从课程表里面选出一个课程,然后再从学生表里面取出所有的学生,然后进行B.sno = student.sno and course.cno = B.cno的判断来确定该名学生有没有选这门课,如果有则查询到了结果则第二个NOT EXISTS 返回false则student里面的where则接受到false不进行任何操作,即为空,如果没有查询到结果则第二个NOT EXISTS返回true则将结果放到结果表里面,结果表不为空则第一个NOT EXISTS返回false输出结果表最终为空,而当且仅当满足所有的B.sno = student.sno and course.cno = B.cno情况下第二个NOT EXISTS返回的都是false则select from student 产生的结果表整体为空,此时再遇到第一个NOT EXISTS 则返回true,这是将结果放到最终输出表上,即为所求。

由于总共有五个学生其中95005学号的学生没有选课,所以最后的结果输出肯定为空,但是输出为空的可能性会有很多,所以为了验证语句的正确性,我们给95005也设置一门课程号为2的选修,那么语句查询 的结果应该为2结果图如下

和预期的结果一致,所以语句应该是正确的
如果存在有思路不太能看懂的话可以参考一下这一篇来自小绵杨Yancy的博客
https://blog.csdn.net/ZHANGYANG_1109/article/details/116977882?spm=1001.2014.3001.5506
最后如果本题的思路或者答案存在什么问题的话,还请指正。谢谢

sql如何查询所有学生都选修了的课程的课程号cno?相关推荐

  1. 10-5 查询全部学生都选修的课程的课程号与课程名

    查询全部学生都选修的课程的课程号与课程名 提示:请使用SELECT语句作答. 表结构: CREATE TABLE STUDENT ( SNO CHAR(5) PRIMARY KEY,SNAME VAR ...

  2. 4. 查询全部学生都选修的课程的课程号与课程名称。

    use hngy go /*查询全部学生都选修的课程的课程号与课程名称.*/ use hngy go select CourseInfo.CNO 课程编号,CourseInfo.CName 课程名称, ...

  3. 11. 查询每个学生及其选修课程的情况,保留学生学号,姓名,课程号,课程名,成绩

    SELECTstudent.sno,sname,course.cno,cname,grade FROMstudent,course,sc WHEREstudent.sno = sc.sno AND s ...

  4. 9. 查询每个学生及其选修课程的情况,保留学生学号,姓名,课程号,成绩

    SELECTstudent.sno,sname,cno,grade FROMstudent,sc WHEREstudent.sno = sc.sno

  5. SQL 高级查询 50题

    一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ------------------ ...

  6. sql复杂查询语句总结

    本人总结了数据库查询中一些比较复杂的查询,如链表查询,多重子查询,连表查询+子查询等,由于技术有限,并没有太多考虑sql语句的优化,如有不足之处,敬请谅解. 先来看看表结构: [sql] view p ...

  7. SQL高级查询——50句查询(含答案) ---参考别人的,感觉很好就记录下来留着自己看。...

    --一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ---------------- ...

  8. ORACLE sql 高级查询

    Oracle-SQL高级查询 --一个题目涉及到的50个Sql语句  --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ...

  9. SQL 常用查询语句

    经典SQL50句 50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Tea ...

最新文章

  1. 推荐系统产品与算法概述 | 深度
  2. 2020 年,让 OKR 助力你稳住 flag 清单!
  3. XMPP协议学习笔记三(Openfire服务器端搭建开发环境)
  4. MongoError: topology was destroyed解决方法
  5. python list列表排序的两种方法及实例讲解
  6. 频域补零上采样_AURIX 学习笔记(12)频域法互相关实现超声测距
  7. VRRP浮动路由(浮动路由原理,了解HSRP路由选举原理,实验过程与总结)
  8. 修正CS2.0中的日历头显示错误
  9. 福建计算机及应用专业的大学,33所福建大学公布国家级/省级一流本科专业!
  10. 《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者
  11. SQLHelper帮助类
  12. 边缘检测中非极大值抑制简单解释
  13. VSCODE 10个高效开发插件
  14. 神经网络之文本情感分析(四)
  15. 通信原理实践(四)——模拟通信系统性能分析
  16. Asp.net1.0和2.0网站共存只解决方法---使用应用程序池
  17. ES6、7学习笔记(尚硅谷)-3-变量的解构赋值
  18. PowerMILL宏自动化编程视频教程
  19. 何为 Token?什么是基于 token 的认证?
  20. 解决this application failed to start

热门文章

  1. python中selenium模块驱动谷歌详解
  2. php网页有图片加载慢,网页加载加速 之 图片延迟加载
  3. react将表格动态生成视频列表【代码】【案例】
  4. 计算机的分类及未来发展趋势,计算机的特点、分类及发展趋势
  5. 广州积分入户需要满足哪些条件
  6. RAD Studio破解补丁合集(2018.12.25)
  7. 【超好玩的路由环路系列】2——汇总环路
  8. 数字图像处理 实验四:图像的重建与复原
  9. linux:用户修改密码方法
  10. ArcGIS Server出图之Dynamic Layers