一个关于SQL的技术问题
deminy 在 周二, 2009-12-08 22:48 提交
目前我还没有发现很好的在线剪贴板工具。通常如果碰到需要零时记录一些事情的时候,我往往会打开Google的notebook网站(该服务已经不对新用户开放了),在里面随手把需要记录的资料贴上去。然后每隔一些日子,清理掉一些过时的临时记录。
今晚清理Google notebook记录的时候,看到下面两段SQL查询语句,是我前几个月在工作时顺手整理的一个问题临时存在了那里,于是贴出来,算是一个技术方面的小问题在网上分享一下:这两个查询语句的区别是什么?
上面两个SQL语句是用MySQL写的。如果需要该问题的数据表结构(和模拟数据),可以在WikiPedia英文网站的“Join (SQL)”一文中找到。
答案我就不更新在网志里了,相信迟早访客回复里面会有正解的。
今晚清理Google notebook记录的时候,看到下面两段SQL查询语句,是我前几个月在工作时顺手整理的一个问题临时存在了那里,于是贴出来,算是一个技术方面的小问题在网上分享一下:这两个查询语句的区别是什么?
SELECT
*
FROM
Employee e
LEFT JOIN Department d
ON e.DepartmentID = d.DepartmentID
WHERE
d.DepartmentName IS NOT NULL
*
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
*
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 呵呵
三年半后再看这个问题,我也没看出来某些区别
三年半后再看这个问题,我也没看出来某些区别,直到导入测试数据后才看出。哎……看来以后要把这道题目作为测试题目给面试者了……
添加新评论
友情提醒:您的言论自由在本站会得到充分保证;不过,由于广告留言等猖獗,因此本站的内容过滤系统有可能会暂时屏蔽您新发的留言或评论。不便之处,希望理解。