问题摘自精通SQL结构化查询语言详解中的一个实例(10.1.2),请大家帮忙分析一下,非常感谢。原题如下:从TEACHER表中查询教师的教工号、姓名、所在系、课程号,年龄,并要求教师所在系的平均年龄大于所有教师的平均年龄。
TEACHER表中的属性如下:TNO(教工号),TNAME(教师姓名),CNO(课程号),SAL(工资),DNAME(所在系),TSEX(性别),AGE(年龄)实例代码如下:SELECT TNO,TNAME,DNAME,CNO,AGE FROM TEACHER AS T WHERE (SELECT AVG(AGE) FROM TEACHER WHERE DNAME = T.DNAME)>(SELECT AVG(AGE) FROM TEACHER)(SELECT AVG(AGE) FROM TEACHER WHERE DNAME = T.DNAME)比较糊涂,这个代码是如何分析得到的,DNAME=T.DNAME是怎么回事?
TEACHER表中的属性如下:TNO(教工号),TNAME(教师姓名),CNO(课程号),SAL(工资),DNAME(所在系),TSEX(性别),AGE(年龄)实例代码如下:SELECT TNO,TNAME,DNAME,CNO,AGE FROM TEACHER AS T WHERE (SELECT AVG(AGE) FROM TEACHER WHERE DNAME = T.DNAME)>(SELECT AVG(AGE) FROM TEACHER)(SELECT AVG(AGE) FROM TEACHER WHERE DNAME = T.DNAME)比较糊涂,这个代码是如何分析得到的,DNAME=T.DNAME是怎么回事?
T.DNAME:主查询中TEACHER表中的。意思就是对于TEACHER表中的每一个DNAME按名字计算AGE平均値,效率低了,用连接查询,
按DNAME分组,计算AGE平均値,再连接。
T.DNAME:是主查询中TEACHER表中的。意思就是对于TEACHER表中的每一个DNAME按名字计算AGE平均値,效率低了,用连接查询,
按DNAME分组,计算AGE平均値,再连接。
SELECT TNO,TNAME,DNAME,CNO,AGE FROM TEACHER AS T WHERE AGE >(SELECT AVG(AGE) FROM TEACHER)
是不是也能达到相同效果呢?