easycan 2007-10-24 17:57
测试笔试的一个SQL题目
两个表的链接 where 和 left join有什么区别?
具体是什么区别呢?我只知道left join查出的更全面
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: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
[[i] 本帖最后由 rayblue 于 2007-10-24 21:45 编辑 [/i]]
hupose 2007-10-25 23:28
[quote]原帖由 [i]rayblue[/i] 于 2007-10-24 21:32 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=765785&ptid=94530][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
说这么多关键的东西没说... [/quote]
请您先看清LZ的问题吧~他问的不是left join是什么东西
问的是两个表连接,用where和left join有什么区别
puchonghui 2007-10-25 23:37
一般认为两者效率是有区别的
但是究竟什么情况下哪个效率高也是众说纷纭。。。
很多人认为where 效率比left join高
因为left join是先做inner join再补空的
但是实际上db内的机制并不一定是这样
lz可以看下这篇文章
[url]http://www.cnblogs.com/huangzhenwu/archive/2007/03/06/665557.html[/url]
有兴趣的话也可以自己做下类似的测试。。。
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
这是大学数据库部分的基础知识啊
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
学习了