注册 登录
编程论坛 SQL Server论坛

问一个两表联结配对顺序的问题

neverwinboy 发布于 2012-02-19 03:19, 830 次点击
只有本站会员才能查看附件,请 登录



问一个SQL SERVER 2000两个表进行联结之后输出表的行顺序问题

如图,上半部分是student表,下半部分是score表,当执行语句
select student.sname,,score.degree from student,score where
student.sno=score.sno
输出的结果为
SNAME          CNO     DEGREE
陆君          3-245       86
匡明          3-245       75
王芳          3-245       68
陆君          3-105       92
匡明          3-105       88
王芳          3-105       76
李军          3-105       64
王丽          3-105       91
............
............

从输出结果看,电脑执行这个语句时,是用score表的每一行的sno列去配对student表的每一行的score列,然后输出结果,所以最后输出表的行顺序与score表示一样的
但是就算把等号左右互换,执行下面这条语句
select student.sname,,score.degree from score,student where
score.sno=student.sno
输出的结果与上面还是一样

我想问的是,电脑是怎么理解并执行这条语句的?为什么SQL SERVER总是用第二张表来配对第一张表?为什么输出的结果不会是
SNAME        CNO      DEGREE
匡明        3-245       86
匡明        3-105       88
王丽        3-105       91
李军        3-105       64
王芳        3-245       68
王芳        3-105       76
陆君        3-245       86
陆君        3-105       92
.......................
.......................

即 用student表的每一行的sno列来分别比对score表的sno列,这样输出的行顺序不就不一样了吗?

哪位兄弟能帮我解释一下,SQL SERVER是怎么理解这句话,按照什么规则去执行的?以后看到类似的语句我就能知道最后输出表的行顺序了。

说得可能不是太明白,如果愿意指点一下的可以加QQ 414194747

之前问过别人,有人说是左右匹配的问题,有人说是运算顺序是默认由右向左,但是如果问题真的在于此,那为什么这两条语句输出的结果一样?
select student.sname,,score.degree from student,score where
student.sno=score.sno      和
select student.sname,,score.degree from score,student where
score.sno=student.sno
这两条语句等号左右互换了,如果是左右匹配问题,第二句话应该变成student匹配score,输出一个行顺序不同的表
但是输出结果还是score去匹配student

求解释啊!!
3 回复
#2
neverwinboy2012-02-19 16:21
没人能帮个忙吗。。。。。呜呜
#3
chenyuncai2012-02-20 21:31
懂是懂了,但是也没明白怎样去执行的,我没看你结果的时候我也以为是第二个结果,呵呵但是》。。。.....
#4
png2012-02-21 23:18
问题貌似简单, 但答案并不直接.因为输出顺序由SQLServer自行确定. 也就是说如果不指定Order By,输出顺序是没办法保证的.

你的问题其实与"两表联结"并没有直接关系.  就算只有一张表, 下面语句的输出顺序也无法保证.

select ColA, ColB from YourTable
1