大家好,又见面了,我是你们的朋友全栈君。
选课表:学号、课程号
学生表:学号、姓名
课程表:课程号、课程名
SELECT 姓名
FROM 学生表
WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号 = 'C1');
SELECT 姓名
FROM 学生表
WHERE EXISTS
(
SELECT *
FROM 选课表
WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1'
);
相关子查询执行过程:先在外层查询中取“学生表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中。然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止。
EXISTS语句不关心子查询的具体内容,因此用“SELECT *”,“Exists + 子查询”用来判断该子查询是否返回记录。
SELECT 姓名
FROM 学生表
WHERE NOT EXISTS
(
SELECT *
FROM 选课表
WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1'
);
SELECT 姓名
FROM 学生表
WHERE NOT EXISTS
(
SELECT *
FROM 课程表
WHERE NOT EXISTS
(
SELECT *
FROM 选课表
WHERE 学生表.学号 = 选课表.学号 AND 课程表.课程号 = 选课表.课程号
)
);
SELECT 姓名
FROM 学生表
WHERE NOT EXISTS
(
SELECT *
FROM 选课表 AS 选课表X
WHERE 选课表X.学号='s1' AND NOT EXISTS
(
SELECT *
FROM 选课表 AS 选课表Y
WHERE 学生表.学号 = 选课表Y.学号 AND 选课表X.课程号 = 选课表Y.课程号
)
);
SELECT 学号, AVG_G
FROM
(
SELECT 学号, AVG(Grade)
FROM 选课表
GROUP BY 学号
) AS RA(学号, AVG_G)
WHERE AVG_G > 80
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154297.html原文链接:https://javaforall.cn