| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 830 人关注过本帖
标题:问一个两表联结配对顺序的问题
只看楼主 加入收藏
neverwinboy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-2-19
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
问一个两表联结配对顺序的问题
图片附件: 游客没有浏览图片的权限,请 登录注册



问一个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

求解释啊!!
搜索更多相关主题的帖子: 王丽 where 配对 
2012-02-19 03:19
neverwinboy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-2-19
收藏
得分:0 
没人能帮个忙吗。。。。。呜呜
2012-02-19 16:21
chenyuncai
Rank: 2
等 级:论坛游民
帖 子:27
专家分:50
注 册:2011-11-9
收藏
得分:10 
懂是懂了,但是也没明白怎样去执行的,我没看你结果的时候我也以为是第二个结果,呵呵但是》。。。.....
2012-02-20 21:31
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:10 
问题貌似简单, 但答案并不直接.因为输出顺序由SQLServer自行确定. 也就是说如果不指定Order By,输出顺序是没办法保证的.

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

select ColA, ColB from YourTable
2012-02-21 23:18
快速回复:问一个两表联结配对顺序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023459 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved