相关子查询的问题 请教

来源:百度知道 编辑:UC知道 时间:2024/06/16 19:51:20
两个表:
T(TNO,TN ,AGE,) 教师表
TC (TNO,CNO) 教师授课表
要求:查询不讲授课程号为C5的教师姓名
书上写的语句是:
select distinct TN
from T
where ("c5"<>ALL(select CNO
FROM TC
WHERE TNO=T.NO))

我才学的数据库 对于上面的语句有些不明白 请大家帮忙
首先子查询里 选出的列都是CNO 而T表里面 没的CNO列啊
那CNO怎么可以做为删选的条件呢 ???
还有 子查询中 为什么要做T和 TC的自然连接呢??TC里面本来就有TNO和CNO两列啊??
最后: 到底上面的语句 它的执行顺序是怎样的啊???
真的请大家 详细解释下了 我是初学者 谢谢~

--首先子查询里 选出的列都是CNO 而T表里面 没的CNO列啊
那CNO怎么可以做为删选的条件呢 ???
相信TC表的CNO字段是授课程号的意思吧.子查询查出来的就是CNO,查出的CNO是与"c5"比较的,而与T无关.

--还有 子查询中 为什么要做T和 TC的自然连接呢??TC里面本来就有TNO和CNO两列啊??
子查询的目的是查询出教师对应的授课程号,而这个教师是对应到T的教师.即每循环一次T的教师后,就会去TC表查看这个教师的授课程号.这个也就是这个语句的执行顺序.