关闭

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

431人阅读 评论(0) 收藏 举报

相关子查询

在前面的例子中,每个子查询仅执行一次,返回的值为主查询的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别名中找出该常量课程的平均分。由于这个过程很费时,因此不要对大于使用相关子查询。 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:438697次
    • 积分:6991
    • 等级:
    • 排名:第3379名
    • 原创:250篇
    • 转载:100篇
    • 译文:0篇
    • 评论:42条
    最新评论