练习9:逆向思维,多重子查询
9. 查询和“01”号同学学习的课程完全相同的其他同学的信息
关键词: “学生信息、课程、完全相同”
直接查不太好查,所以逆向思维,这里的“完全相同”有2
层含义:
- 没有学习
“01”
号同学学习课程以外的其他课程 - 与
“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:逆向思维,多重子查询相关推荐
- oracle结果集过大,多重子查询/大结果集查询问题
多重子查询/大结果集查询问题: 问题接此帖http://www.itpub.net/273652.html 上次问题通过调整SGA/SQL语句得到优化[最终情况:oracle关闭重起后,程序第一次执行 ...
- Oracle数据库多重子查询嵌套的坑
在Oracle数据库中多重子查询的使用 代码如下: SELECT T.*, ROWNUM RNFROM (SELECT B.*,NVL(A.AMOUNT, 0) AMOUNT,V.FULLNAME,D ...
- 多重子查询提取每次子查询的SQL语句
之前用的oracle大型数据库,写的sql都是依据oracle的.移动端部分用的不能是oracle数据库,只能采用小型数据库,现场采用db2. db2大小只能论k为单位,很多基本的sq ...
- oracle:多重子查询的实战应用
1. 需求大致如下: 有两张表,一张主表(POWERLOG),一张从表(CRANEDEFINITION),在sql中分页(使用子查询) SELECTs.* FROM(SELECTa.CID,b.MAC ...
- 数据库之子查询四(多重,表复制)
一.多重子查询 select teaID,teaName,age,sex,dept,profession from tteacher where dept= (select dept from te ...
- SQL查询语句——子查询
1.带多重子查询的复杂SQL语句 select a.studentNo,studentName,b.courseName,c.score from Student a,Course b,Score c ...
- 通过MySQL5.7子查询的坑联想到的MySQL查询优化规律与注意点
本文基于MySQL 5.7 问题背景 最近,发现业务线程卡死在读取数据库(MySQL 5.7),数据库CPU飙升到了100%,经过定位发现是下面这样一个SQL(由用户触发的查询,可以理解为查看这个群组 ...
- mysql三重连接查询_sql子查询,多重查询,join,左连接,右连接,内连接
范围内重复数量查询 根据上表查询 每个手机号都各有多少个重复的设备id SELECT t.phone_num,COUNT(*) FROM (select phone_num, device_id,co ...
- mysql 子查询多个字段_MySql基础
本文章目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ...
最新文章
- 报名 | 大数据下的自杀风险感知与疏导讲座
- 在WPF中实现平滑滚动
- XenApp增加输出画面的帧率,提高类视频应用体验
- 罗永浩直播带货观后感!首秀破纪录,罗永浩直播带货清单及感受
- 可恶的.NET FRAME,将一切变得更简单,还是更复杂?
- centos08-Linux服务器上发布java项目
- 整理的常用JAVA开源库简介
- 【Apache POI】Java 读取Excel文件
- 多层装饰器、带参数装饰器
- java选项设置_java环境配置
- Linux端口6888被占用怎么解决,zabbix如何监控外部端口的状态?
- php删除数组中的空行,php处理文件的思考(去除空行、每行多余字符)
- python时间格式化代码_Python代码中如何将”日期时间”格式化为自己所需的样式呢?...
- nginx的基础学习+实战
- C++-Qt【1】-退出程序静态调试
- 重装系统后mac语言怎么改成中文?
- Nginx之11吸星大法 - (页面缓存) 1
- URDGN:Ultra-resolve Face Images by Discriminative Generative Networks
- C、C++编程学习资料收藏
- 24AA512/24LC512/24FC512系列器件中文翻译