51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6199|回复: 17
打印 上一主题 下一主题

[讨论] 测试笔试的一个SQL题目

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-10-24 17:57:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两个表的链接 where 和 left join有什么区别?
     
     具体是什么区别呢?我只知道left join查出的更全面
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-10-24 18:31:32 | 只看该作者
和你一起等待!!!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-10-24 20:11:52 | 只看该作者
假设有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了,见谅见谅)
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-10-24 21:32:48 | 只看该作者
说这么多关键的东西没说...
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-10-24 21:44:02 | 只看该作者
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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-10-25 23:28:03 | 只看该作者
原帖由 rayblue 于 2007-10-24 21:32 发表
说这么多关键的东西没说...


请您先看清LZ的问题吧~他问的不是left join是什么东西
问的是两个表连接,用where和left join有什么区别
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2020-8-11 08:18
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]测试旅长

    7#
    发表于 2007-10-25 23:37:56 | 只看该作者
    一般认为两者效率是有区别的
    但是究竟什么情况下哪个效率高也是众说纷纭。。。
    很多人认为where 效率比left join高
    因为left join是先做inner join再补空的

    但是实际上db内的机制并不一定是这样
    lz可以看下这篇文章
    http://www.cnblogs.com/huangzhenwu/archive/2007/03/06/665557.html
    有兴趣的话也可以自己做下类似的测试。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2007-10-25 23:39:51 | 只看该作者
    以下为个人意见(不确定正确性):

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

    所有的隐形链接都可以转化为显性链接,但似乎数据库对join的处理上性能会更好。
    不记得了,以前貌似看过,忘记了,不好意思
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2007-10-26 16:30:19 | 只看该作者

    感谢

    感谢大家得答案,现在明白了很多。以前只知道查询出得结果有时它们会不一样,究竟为什么不一样就知道了,现在终于知道了,同时也明白两个的连接和选择的顺序的不同
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2007-10-26 17:09:03 | 只看该作者
    一个面试题引发的讨论!
    不错不错,受益匪浅!
    希望以后的论坛能多一些这样的讨论!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2007-11-12 15:37:27 | 只看该作者
    这是大学数据库部分的基础知识啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2007-11-12 17:41:48 | 只看该作者
    基础知识,我也忘掉了,惭愧惭愧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2007-11-19 17:33:19 | 只看该作者
    where == inner join
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2008-6-1 20:46:41 | 只看该作者
    如果你在面试,不可能给你时间让你摆数据给他画出来,他也没兴趣看,简单的说就是,where就是inner join,取两个表的交集即左表fk=右表pk对应的内容;而left join就是取左表的全集及右表中与左表的交集部分,连接后右表无对应属性的置空。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2008-6-2 00:49:34 | 只看该作者
    面试出这种题感觉意义也不大,还不如直接问inner join和left join的区别就好了。这个区别大家应该都知道吧?不知道的话说明SQL肯定没亲自用过了。复习一下好了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2008-6-2 14:31:24 | 只看该作者
    学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2008-6-2 14:34:14 | 只看该作者
    学习了……
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2008-6-2 14:59:21 | 只看该作者
    长见识了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 19:43 , Processed in 0.077943 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表