子查询

  • 在查询语句中的 where 条件子句中,有嵌套了另一个查询语句
  • 嵌套查询可以多个子查询组成,求解的方式是由里及外的
  • 子查询返回的结果一般都是集合,故而建议使用in 关键词

示例:

  1. 查询“数据-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;
  1. 查询课程为 高等数学-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'
		)
)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值