【数据库】嵌套查询

1、查询’CS’系的学生的成绩信息,包括学号,课程号,成绩。

SELECT sno,cno,grade
FROM sc_qfm 
WHERE sno in(SELECT sno FROM student_qfm WHERE Sdept='cs')

2、查询李勇所选修的课程的课程名。

SELECT Cname
FROM course_qfm 
WHERE Cno in
(SELECT cno FROM sc_qfm WHERE sno in
(SELECT Sno FROM student_qfm WHERE Sname='李勇'))

3、查询既选了1号课程又选了2号课程的学生学号。

SELECT sno
FROM sc_qfm
WHERE cno='1' and sno in
(SELECT sno
FROM sc_qfm
WHERE cno='2')

4、查询没有选修课程的学生的名单。 (提示:使用谓词NOT IN引导)

SELECT Sname
FROM student_qfm 
WHERE Sno not in
(SELECT sno
FROM sc_qfm)

在批量向数据库导入数据时,并未设置无选修课程的学生导致本次嵌套查询结果为空

5、查询选修“Course {7}”课的全部学生的总成绩。

SELECT sum(grade) AS 课程总成绩
FROM sc_qfm
WHERE cno IN(SELECT Cno FROM course_qfm WHERE Cname='Course {7}')

6、统计学生选修表,显示学号为"2008001815"的学生在其各科成绩中,最高分成绩所对应的课程号和成绩。

SELECT cno,grade 
FROM sc_qfm 
WHERE sno='2008001818'
AND grade=
(SELECT max(grade) FROM sc_qfm WHERE sno ='2008001818')

思考:如果该学号学生有两个课程分数都为相同的最高分,查询会有什么结果?

查询结果中会出现两条结果均相同且为最高分,如图所示

SELECT cno,grade 
FROM sc_qfm 
WHERE sno='2008001815'
AND grade=
(SELECT max(grade) FROM sc_qfm WHERE sno ='2008001815')

7、查询数学系选修"Course {7}"课的所有学生的成绩之和。

SELECT sum(grade) AS 课程总成绩
FROM sc_qfm
WHERE cno IN(SELECT Cno FROM course_qfm WHERE Cname='Course {7}')
AND sno IN(SELECT Sno FROM student_qfm WHERE Sdept='MA')

8、查询数学系"伍洋"同学的"Course {7}"成绩。

SELECT grade AS 成绩
FROM sc_qfm
WHERE cno IN(SELECT Cno FROM course_qfm WHERE Cname='Course {7}')
AND sno IN(SELECT Sno FROM student_qfm WHERE Sdept='MA' AND Sname='伍洋')

9、查询学号为'2008001815’的学生没选的课程的课程号和课程名。

SELECT Cno,Cname
FROM course_qfm
WHERE Cno not in 
(SELECT cno FROM sc_qfm WHERE sno='2008001815')

10、检索至少选修了两门课程的学生的信息,包括学号,姓名和所在系。 (提示:having)

SELECT Sno,Sname,Sdept
FROM student_qfm
WHERE Sno in 
(SELECT sno FROM sc_qfm GROUP by sno HAVING count(cno)>=2)

使用EXISTS实现以下查询:

  1. 查询选修了课程的学生的名单。

可理解为:查找所有student表中存在于course表中的学生名单

SELECT Sname
FROM student_qfm 
WHERE EXISTS
(SELECT sno
FROM sc_qfm)

  1. 查询学号为'2008001815'的学生没选的课程的课程号和课程名。

可理解为:查找所有student表中不存在于course表中的学号'2008001815'

SELECT Cno,Cname
FROM course_qfm
WHERE NOT EXISTS
(SELECT cno FROM sc_qfm WHERE sno='2008001815')

SELECT Cno,Cname
FROM course_qfm
WHERE EXISTS
(SELECT cno FROM sc_qfm WHERE sno='2008001815')

因未考虑有不被选择的课程导致使用NOT EXISTS查询时结果为空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值