比如:
from T1 inner join T2 inner join T3
T1 left join T2
T1 inner join T3
T1有m1列,n1行
T2有m2列,n2行
T3有m3列,n3行
不考虑on condition
①会生成几张临时表?
②生成的临时表有多少列,多少行?
请大家解答,这个问题我看的书上都没有给出回答,所以难以理解。
下面给出一个具体的例题:
查询"01"课程比"02"课程成绩高的学生的信息及课程分数:
select a.*,b.score as '01课程分数',c.score as '02课程分数'
from student as a
left join SC as b on a.S#=b.S# and b.C#='01'
left join SC as c on c.S#=a.S# and c.C#='02'
where b.score>c.score;
这个查询的具体执行过程我一直无法理解,
就是纠结在多个联接这里
最简单的方法就是找到几个表的相同点,也就是几个表能建立连接的关系,你这问题就迎刃而解了
到底有多少临时表,表示同样不清楚,同关注。但如果你只想学习查询的执行过程,你可以在SQL SERVER 管理工具上,执行SQL时选择 包含执行计划,那里会显示详细的步骤
建议LZ看一下《Microsoft SQL SERVER 2008技术内幕 T-SQL查询》第一章,有详细介绍哈。
应该只产生一张临时表吧,这个还真没关注过,返回结果列是m1+m2+m3,from T1 inner join T2 inner join T3返回行是t1,t2,t3有符合三者关联条件的所有行,T1 left join T2返回行是t1的行,T1 inner join T3返回行是符合t1,t2关联条件的所有行,示例中三张表先关联然后再筛选出符合b.score>c.score的数据行