当前位置:  开发笔记 > 数据库 > 正文

SQL内部连接语法

如何解决《SQL内部连接语法》经验,为你挑选了2个好方法。

下面的两个SQL得到相同的结果

SELECT c.name, o.product  
FROM customer c, order o  
WHERE c.id = o.cust_id  
AND o.value = 150  

SELECT c.name, o.product  
FROM customer c  
INNER JOIN order o on c.id = o.cust_id  
WHERE o.value = 150

我已经看到这两种风格在不同的公司都被用作标准.从我所看到的,第二个是大多数人在网上推荐的.除了风格之外,还有其他真正的理由吗?使用内部联接有时会有更好的表现吗?

我注意到Ingres和Oracle开发人员倾向于使用第一种风格,而Microsoft SQL Server用户倾向于使用第二种风格,但这可能只是巧合.

感谢您的任何见解,我一直想知道这一点.

编辑:当我使用不正确的terminlogy时,我已经从"SQL内部连接与笛卡尔产品"中更改了标题.感谢到目前为止的所有回复.



1> Cruachan..:

两个查询都是内部联接和等效.第一种是较旧的处理方法,而JOIN语法的使用仅在引入SQL-92标准后才变得普遍(我相信它是在较旧的定义中,之前没有特别广泛使用).

强烈使用JOIN语法,因为它将连接逻辑与WHERE子句中的过滤逻辑分开.虽然JOIN语法实际上是内连接的语法糖,但它的优势在于外连接,其中旧的*语法可以产生无法明确描述连接并且解释依赖于实现的情况.[LEFT | 正确] JOIN语法避免了这些陷阱,因此为了保持一致性,在所有情况下都优选使用JOIN子句.

请注意,这两个示例都不是笛卡尔积.为此,你要使用其中之一

SELECT c.name, o.product  
FROM customer c, order o  
WHERE o.value = 150  

要么

SELECT c.name, o.product  
FROM customer c  CROSS JOIN order o 
WHERE o.value = 150



2> WW...:

为了回答你的部分问题,我认为Oracle中JOIN ... ON语法的早期错误阻止了Oracle用户远离这种语法.我认为现在没有任何特别的问题.

它们是等价的,应该被解析为相同的内部表示以进行优化.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有