SQL JOIN:USING,ON或WHERE之间有区别吗?
|
我想知道SQL对这些连接语句执行的方式是否有所不同:
SELECT * FROM a,b WHERE a.ID = b.ID
SELECT * FROM a JOIN b ON a.ID = b.ID
SELECT * FROM a JOIN b USING(ID)
有性能差异吗?还是算法上的差异?
还是仅仅是语法糖?
没有找到相关结果
已邀请:
5 个回复
遣莫捅炭
如果您有外部联接(
,
),则第二种样式将按照广告中的说明工作。第一个很可能不会,并且在SQL Server 2005+中也已弃用 ANSI-92样式也很难实现。使用较旧的样式,如果您错过条件,则可以轻松获得笛卡尔积(交叉连接)。您会收到ANSI-92的语法错误。 编辑:更多澄清 不使用\“ join where where \”(隐式)的原因是带有外部联接的模糊结果。 如果您使用显式的OUTER JOINs +隐式的INNER JOINs,您仍然会得到不可靠的结果+您在用法上存在不一致 这不只是语法,而是关于语义正确的查询 编辑,2011年12月 SQL Server逻辑查询的处理顺序为FROM,ON,JOIN,WHERE ... 因此,如果您将\“隐式WHERE内部联接\”和\“显式来自外部联接\”混合使用,则由于查询不明确,很可能不会获得预期的结果。
马口
在同一地方传达您的确切意图。 我不会明确地说,因为我还没有得到最后一个查询优化器的支持,但是我非常有信心您正在寻找性能上的微小差异(如果有的话)。
弦砂牧扁
加入时,最好使用
,并使用
过滤结果。请记住,WHERE是您要使用的最后一件事,除了根据要过滤结果的位置进行分组和排序。因此,您不应该使用ѭ5联接表,因为它很难阅读。
最后,您(开发人员)将来可能不在身边,因此可读性和可维护性将帮助那些不得不接管您的代码的灵魂:)。 当我看到开发人员使用“ 5”联接表时,通常表明他们对T-SQL的了解不足。那是我个人的看法。
卧沫
屡倒雷图