51Testing软件测试论坛

标题: 测试笔试的一个SQL题目 [打印本页]

作者: easycan    时间: 2007-10-24 17:57
标题: 测试笔试的一个SQL题目
两个表的链接 where 和 left join有什么区别?
     
     具体是什么区别呢?我只知道left join查出的更全面
作者: 爱之剑    时间: 2007-10-24 18:31
和你一起等待!!!
作者: hupose    时间: 2007-10-24 20:11
假设有2个表,分别是C和TC表,
C表是课程表,分别有:课程号,课程名.
TC表是课程-教师表,分别有:课程号,教师名
现在用英语课来查担任这个课程的教师名
首先用where
SQL语句是:
select 教师名 from TC where 课程号=(select 课程号 from C where 课程名='英语')
然后用left join
SQL语句是:
select 教师名 from TC left join C where 课程名='英语'

可以看到,用where来连接是先选择出符合条件的记录,再拿去和另外一个连接
而left join则是先把两个表连接后再进行选择
可以说两个的不同就是连接和选择的顺序的不同

PS.两个SQL语句并没有上机调试过,很可能有错,但是基本上就是这么个样子的语句(好久没动SQL了,见谅见谅)
作者: rayblue    时间: 2007-10-24 21:32
说这么多关键的东西没说...
作者: rayblue    时间: 2007-10-24 21:44
left join就是以左表为基准,左表的纪录会全部找出来,而右表只会显示符合条件的记录,记录不足的地方用null填充
举个例子就很清楚了
表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408

sql语句如下:
select * from A
left join B
on A.aID = B.bID
(left join的左边的表为左表即A,右边的为右表即B)
结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

[ 本帖最后由 rayblue 于 2007-10-24 21:45 编辑 ]
作者: hupose    时间: 2007-10-25 23:28
原帖由 rayblue 于 2007-10-24 21:32 发表
说这么多关键的东西没说...


请您先看清LZ的问题吧~他问的不是left join是什么东西
问的是两个表连接,用where和left join有什么区别
作者: puchonghui    时间: 2007-10-25 23:37
一般认为两者效率是有区别的
但是究竟什么情况下哪个效率高也是众说纷纭。。。
很多人认为where 效率比left join高
因为left join是先做inner join再补空的

但是实际上db内的机制并不一定是这样
lz可以看下这篇文章
http://www.cnblogs.com/huangzhenwu/archive/2007/03/06/665557.html
有兴趣的话也可以自己做下类似的测试。。。
作者: wzb521    时间: 2007-10-25 23:39
以下为个人意见(不确定正确性):

where为隐性链接
join为为显性链接

所有的隐形链接都可以转化为显性链接,但似乎数据库对join的处理上性能会更好。
不记得了,以前貌似看过,忘记了,不好意思
作者: easycan    时间: 2007-10-26 16:30
标题: 感谢
感谢大家得答案,现在明白了很多。以前只知道查询出得结果有时它们会不一样,究竟为什么不一样就知道了,现在终于知道了,同时也明白两个的连接和选择的顺序的不同
作者: 开着拖拉机上班    时间: 2007-10-26 17:09
一个面试题引发的讨论!
不错不错,受益匪浅!
希望以后的论坛能多一些这样的讨论!
作者: maggie_xiao    时间: 2007-11-12 15:37
这是大学数据库部分的基础知识啊
作者: xsheep    时间: 2007-11-12 17:41
基础知识,我也忘掉了,惭愧惭愧
作者: daniel2007    时间: 2007-11-19 17:33
where == inner join
作者: sundyhui0322    时间: 2008-6-1 20:46
如果你在面试,不可能给你时间让你摆数据给他画出来,他也没兴趣看,简单的说就是,where就是inner join,取两个表的交集即左表fk=右表pk对应的内容;而left join就是取左表的全集及右表中与左表的交集部分,连接后右表无对应属性的置空。
作者: rollin1126    时间: 2008-6-2 00:49
面试出这种题感觉意义也不大,还不如直接问inner join和left join的区别就好了。这个区别大家应该都知道吧?不知道的话说明SQL肯定没亲自用过了。复习一下好了。
作者: dandan1111    时间: 2008-6-2 14:31
学习了
作者: huoluo    时间: 2008-6-2 14:34
学习了……
作者: dujun    时间: 2008-6-2 14:59
长见识了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2