SQL学习(5)查询选修全部课程的学生
来源:互联网 发布:男士服装搭配 知乎 编辑:程序博客网 时间:2024/04/29 19:57
在网上发现的一个经典问题,有标准的答案,分享下自己当时的思路。
问题:查询选修全部课程的学生姓名。
学生信息表S:students(sno,sname,sex,age,sdept)
课程信息表C:courses(cno,cname,cdept,tname)
选课成绩表G:grades(sno,cno,score)
我的思路:(如果有错误的地方,希望有人能提出来)
1.通过grades表得出学号和对应选修课的数量。
select sno,count(cno)as cnum from grades group by sno
2. 通过courses表得出选修课的数量。
with cte as (select count(*) as c from courses group by cno) select count(*) as cnum from cte
3.查找选修全部课程的学号。
select sno from 结果1 where 结果1的cnum=结果2的cnum
4.查找选修全部课程的学生姓名。
连接结果3和students表即可得到。
我的答案:
with cte1 as (select sno,count(cno)as cnum from grades group by sno),
with cte2 as (select count(*) as c from courses group by cno)
select sname from students
join cte1 on studenfts.sno=cte1.sno where cte1.sno in(
select sno from cte1 where cnum=(select count(*) as cnum from cte2)
)
标准答案:
select sname
from students
where not exists (
select *
from courses
where not exists(
select *
from grades
where sno=students.sno and cno=courses.cno
)
)
标准答案分析:1.查找学生所选的所有课程及成绩
select *from grades where sno=students.sno and cno=courses.cno
2.查找学生没有选修的课程
select * from courses where not exists(select...)
3.查找选修全部课程的学生姓名
select sname from students where not exists (select * from courses where not exists(select...))
- SQL学习(5)查询选修全部课程的学生
- SQL查询选修了全部课程的学生姓名解析
- SQL-EXIST-查询选修了全部课程的学生姓名
- 如何理解 多个 exists sql(查询选修了全部课程的学生姓名)
- 查询选修了全部课程的学生姓名
- 查询选修了全部课程的学生姓名
- 查询选修了全部课程的学生姓名
- 查询选修全部课程的学生姓名和所属单位
- 一道SQL:至少选修了学生002选修的全部课程的学生编号
- SQL查询选修了所有课程的学生姓名
- 4.查询全部学生都选修的课程的课程号与课程名称。
- "选修了全部课程的学生"的查询语句的疑问
- 查询每个学生都选修了且分数全部大于70分的课程
- 数据库操作: 查询选修了所有课程的学生
- 3.查询至少选修两门课程的学生学号。
- 查询只选修了一门课程的学生
- 关于查找 “选修了全部课程的学生姓名”题目的理解--嘟嘟胖
- 关于查找 “选修了全部课程的学生姓名”题目的理解
- rundll32 应用
- 解决gentoo系统无声音,Alsamixer默认静音导致的
- ECC算法分析--openssl的实现以及其调用流程 .
- 苹果树——1976 至 2011 苹果产品回顾
- 出个题目考考你,有能力的可以来挑战一下
- SQL学习(5)查询选修全部课程的学生
- QString转char*
- tcpcopy---研究的就是如何欺骗服务器,让其相信复制的请求就是访问它的
- linux c++ 编译undefined reference to
- Apple Inc.
- 巧用牙膏
- iphone开发之轻松搞定原生socket 编程,阻塞与非阻塞
- 关于网格化tessellation的理解和问题
- Java Swing文本框输入中文弹出输入窗口的解决