您的位置:首页 > 其它

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

2007-09-19 09:50 274 查看

相关子查询

在前面的例子中,每个子查询仅执行一次,返回的值为主查询的WHERE子句所用。在有的查询中,子查询不只执行一次,例如,要显示其成绩比该课程平均成绩高的成绩表,其主查询为:
SELECT sno,cno,degree
FROM score
WHERE degree >(待选学生所修课程的平均分)
该子查询为:
SELECT AVG(degree)
FROM score
WHERE cno=(主查询待选行的课程号cno)
这样,主查询在判断每个待选行时,必须“唤醒”子查询,告诉它该学生选修的课程号,并由子查询计算课程的平均成绩,然后将该学生的degree与平均成绩进行比较,找出相应的符合条件的行,我们把这种子查询称为相关子查询[/u]。
【例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别名中找出该常量课程的平均分。由于这个过程很费时,因此不要对大于使用相关子查询。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐