- 在查询语句中的
where
条件子句中,有嵌套了另一个查询语句 - 嵌套查询可以多个子查询组成,求解的方式是由里及外的
- 子查询返回的结果一般都是集合,故而建议使用
in
关键词
示例:
- 查询“数据-1”的所有考试结果(学号,科目编号,成绩),并且成绩降序排列
方式一:使用连接查询
SELECT StudentNo,r.SubjectNo,StudentResult
FROM Result r
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
WHERE SubjectName = '数据-1'
ORDER BY StudentResult DESC
方式二:使用子查询
SELECT StudentNo,SubjectNo,StudentResult
FROM Result
WHERE SubjectNo = (
SELECT SubjectNo FROM `Subject`
WHERE SubjectName = '数据库-1'
)
ORDER BY StudentResult DESC;
- 查询课程为 高等数学-2 且分数不小于 80 分的学生的学号和姓名
方式一:使用连接查询
SELECT s.StudentNo,StudentName
FROM Student s
INNER JOIN Result r
ON s.`StudentNo` = r.`StudentNo`
INNER sub.`SubjectNo` = r.`SubjectNo`
ON sub.`SubjectNo` = r.`SubjectNo`
WHERE subjectName = '高等数学-2' AND StudentResult >= 80
方式二:使用 连接查询 + 子查询
SELECT r.StudentNo,StudentName
FROM Student s
INNER JOIN Result r ON s.`StudentNo` = r.`StudentNo`
WHERE StudentResult >= 80 AND SubjectNo = (
SELECT SubjectNo FROM `Subject`
WHERE SubjectName = '高等数学-2'
)
方式三:使用子查询
先分步写简单的sql语句,然后将其嵌套起来
SELECT StudentNo,StudentName FROM Student WHERE StudentNo IN(
SELECT StudentNo FROM Result WHERE Result StudentResult >= 80 AND SubjectNo=(
SELECT SubjectNo FROM `Subject` WHERE `SubjectName` = '高等数学-2'
)
)