懒人摘抄(内容转自优快云资源中教程)-数据查询07-子查询

本文介绍SQL中的相关子查询概念及应用实例,展示如何通过子查询获取特定条件下的数据,如成绩高于课程平均分的学生信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关子查询

在前面的例子中,每个子查询仅执行一次,返回的值为主查询的WHERE子句所用。在有的查询中,子查询不只执行一次,例如,要显示其成绩比该课程平均成绩高的成绩表,其主查询为:

SELECT sno,cno,degree

FROM score

WHERE degree >(待选学生所修课程的平均分)

该子查询为:

SELECT AVG(degree)

FROM score

WHERE cno=(主查询待选行的课程号cno)

这样,主查询在判断每个待选行时,必须“唤醒”子查询,告诉它该学生选修的课程号,并由子查询计算课程的平均成绩,然后将该学生的degree与平均成绩进行比较,找出相应的符合条件的行,我们把这种子查询称为相关子查询

5.29查询成绩比该课程平均成绩低的学生成绩表。

SELECT sno,cno,degree

FROM score a

WHERE degree<

   (SELECT AVG(degree)

    FROM score b

    WHERE a.cno=b.cno)

本例执行结果如下:

sno   cno        degree              

----- ---------- ----------

101   3-105      64

109   3-105      76

108   3-105      78

109   3-245      68

105   3-245      75

107   6-166      79

108   6-166      81

理解上述相关子查询的关键是别名,它出现在主查询“FROM score a”和子查询“FROM score b”中。这样同一个表相当于两个表,当在子查询中使用a.cno时,它访问待选行的cno,这时是一个常量,从而在b别名中找出该常量课程的平均分。由于这个过程很费时,因此不要对大于使用相关子查询。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值