一个关于SQL的技术问题

目前我还没有发现很好的在线剪贴板工具。通常如果碰到需要零时记录一些事情的时候,我往往会打开Google的notebook网站(该服务已经不对新用户开放了),在里面随手把需要记录的资料贴上去。然后每隔一些日子,清理掉一些过时的临时记录。

今晚清理Google notebook记录的时候,看到下面两段SQL查询语句,是我前几个月在工作时顺手整理的一个问题临时存在了那里,于是贴出来,算是一个技术方面的小问题在网上分享一下:这两个查询语句的区别是什么?

SELECT
    *
FROM
    Employee e
LEFT JOIN Department d
    ON e.DepartmentID = d.DepartmentID
WHERE
    d.DepartmentName IS NOT NULL


SELECT
    *
FROM
    Employee e
LEFT JOIN Department d
    ON e.DepartmentID = d.DepartmentID AND d.DepartmentName IS NOT NULL


上面两个SQL语句是用MySQL写的。如果需要该问题的数据表结构(和模拟数据),可以在WikiPedia英文网站的“Join (SQL)”一文中找到。

答案我就不更新在网志里了,相信迟早访客回复里面会有正解的。
标签: 
类别: 

评论

我没弄错的话,后者性能比前者好。join放在where里比放在from里更恰当。只针对这一对语句而言。

手机看真吃亏,把第二条语句看错了……不是性能的问题,两者根本能获取到的数据都是不一样的……一个是先筛选再join,一个是先join再筛选

嗯。是的

哪一个是先join哪一个是后join

第二条语句结果没达到要求。

前者先join,后者后join。

至于“第二条语句结果没达到要求。”,则是不准确的。查询语句有没有达到要求,取决于最初的要求是什么。

我的理解要求是 d.DepartmentName IS NOT NULL 呵呵

三年半后再看这个问题,我也没看出来某些区别,直到导入测试数据后才看出。哎……看来以后要把这道题目作为测试题目给面试者了……

添加新评论

友情提醒:您的言论自由在本站会得到充分保证;不过,由于广告留言等猖獗,因此本站的内容过滤系统有可能会暂时屏蔽您新发的留言或评论。不便之处,希望理解。