查看完整版本: 测试笔试的一个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

[[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

这是大学数据库部分的基础知识啊

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

长见识了
页: [1]
查看完整版本: 测试笔试的一个SQL题目