9. 查询和“01”号同学学习的课程完全相同的其他同学的信息

关键词: “学生信息、课程、完全相同”
直接查不太好查,所以逆向思维,这里的“完全相同”有2层含义:

  1. 没有学习“01”号同学学习课程以外的其他课程
  2. “01”同学学习课程数量完全相等

第一步: 锁定表,学生表、成绩表

第二步: 找出学了“01”号同学学习课程以外其他课程的同学

SELECT Sid FROM sc WHERE Cid NOT IN (SELECT DISTINCT Cid FROM sc WHERE Sid = 01);


结果为空,因为01号同学学了所有课程,所以学了其以外课程的同学是空

第三步: 从所有学生中排除第二步找到的同学以及“01”号同学自身

SELECT  Sid FROM Sc
WHERE Sid NOT IN(SELECT Sid FROM sc WHERE Cid NOT IN (SELECT DISTINCT Cid FROM sc WHERE Sid = 01))AND Sid <> 01;


第四步: 筛选出与“01”号同学所学课程数量相等的同学

SELECT  Sid FROM Sc
WHERE Sid NOT IN(SELECT Sid FROM sc WHERE Cid NOT IN (SELECT DISTINCT Cid FROM sc WHERE Sid = 01)) AND Sid <> 01
GROUP BY Sid
HAVING COUNT(Cid) = (SELECT COUNT(DISTINCT Cid) FROM sc WHERE Sid = 01);


第五步: 关联学生表,获取学生信息

SELECT * FROM student WHERE Sid IN(SELECT  Sid FROM Sc WHERE Sid NOT IN(SELECT Sid FROM sc WHERE Cid NOT IN (SELECT DISTINCT Cid FROM sc WHERE Sid = 01)) AND Sid <> 01 GROUP BY Sid HAVING COUNT(Cid) = (SELECT COUNT(DISTINCT Cid) FROM sc WHERE Sid = 01));

练习9:逆向思维,多重子查询相关推荐

  1. oracle结果集过大,多重子查询/大结果集查询问题

    多重子查询/大结果集查询问题: 问题接此帖http://www.itpub.net/273652.html 上次问题通过调整SGA/SQL语句得到优化[最终情况:oracle关闭重起后,程序第一次执行 ...

  2. Oracle数据库多重子查询嵌套的坑

    在Oracle数据库中多重子查询的使用 代码如下: SELECT T.*, ROWNUM RNFROM (SELECT B.*,NVL(A.AMOUNT, 0) AMOUNT,V.FULLNAME,D ...

  3. 多重子查询提取每次子查询的SQL语句

    之前用的oracle大型数据库,写的sql都是依据oracle的.移动端部分用的不能是oracle数据库,只能采用小型数据库,现场采用db2.         db2大小只能论k为单位,很多基本的sq ...

  4. oracle:多重子查询的实战应用

    1. 需求大致如下: 有两张表,一张主表(POWERLOG),一张从表(CRANEDEFINITION),在sql中分页(使用子查询) SELECTs.* FROM(SELECTa.CID,b.MAC ...

  5. 数据库之子查询四(多重,表复制)

    一.多重子查询 select teaID,teaName,age,sex,dept,profession from tteacher where dept= (select dept  from te ...

  6. SQL查询语句——子查询

    1.带多重子查询的复杂SQL语句 select a.studentNo,studentName,b.courseName,c.score from Student a,Course b,Score c ...

  7. 通过MySQL5.7子查询的坑联想到的MySQL查询优化规律与注意点

    本文基于MySQL 5.7 问题背景 最近,发现业务线程卡死在读取数据库(MySQL 5.7),数据库CPU飙升到了100%,经过定位发现是下面这样一个SQL(由用户触发的查询,可以理解为查看这个群组 ...

  8. mysql三重连接查询_sql子查询,多重查询,join,左连接,右连接,内连接

    范围内重复数量查询 根据上表查询 每个手机号都各有多少个重复的设备id SELECT t.phone_num,COUNT(*) FROM (select phone_num, device_id,co ...

  9. mysql 子查询多个字段_MySql基础

    本文章目标 ​ 一.为什么要学习数据库 ​ 二.数据库的相关概念 ​ DBMS.DB.SQL ​ 三.数据库存储数据的特点 ​ 四.初始MySQL ​ MySQL产品的介绍 ​ MySQL产品的安装 ...

最新文章

  1. 报名 | 大数据下的自杀风险感知与疏导讲座
  2. 在WPF中实现平滑滚动
  3. XenApp增加输出画面的帧率,提高类视频应用体验
  4. 罗永浩直播带货观后感!首秀破纪录,罗永浩直播带货清单及感受
  5. 可恶的.NET FRAME,将一切变得更简单,还是更复杂?
  6. centos08-Linux服务器上发布java项目
  7. 整理的常用JAVA开源库简介
  8. 【Apache POI】Java 读取Excel文件
  9. 多层装饰器、带参数装饰器
  10. java选项设置_java环境配置
  11. Linux端口6888被占用怎么解决,zabbix如何监控外部端口的状态?
  12. php删除数组中的空行,php处理文件的思考(去除空行、每行多余字符)
  13. python时间格式化代码_Python代码中如何将”日期时间”格式化为自己所需的样式呢?...
  14. nginx的基础学习+实战
  15. C++-Qt【1】-退出程序静态调试
  16. 重装系统后mac语言怎么改成中文?
  17. Nginx之11吸星大法 - (页面缓存) 1
  18. URDGN:Ultra-resolve Face Images by Discriminative Generative Networks
  19. C、C++编程学习资料收藏
  20. 24AA512/24LC512/24FC512系列器件中文翻译

热门文章

  1. 常用的整流桥极其参数
  2. redis如何存、取对象
  3. opencv/openmv识别三角形思路(识别多边形)
  4. 如何画工艺流程图?这样绘制简洁又好看
  5. eCargo国际货代软件引领电子商务平台新潮流
  6. 如何将区块链技术应用到物联网
  7. C语言之十进制转化为十六进制
  8. Android键盘的显示与隐藏
  9. TI/德州仪器 TS5A3157DBVR 模拟开关
  10. 华为手机备忘录怎么锁起来