下面的两个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内部连接与笛卡尔产品"中更改了标题.感谢到目前为止的所有回复.
两个查询都是内部联接和等效.第一种是较旧的处理方法,而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
为了回答你的部分问题,我认为Oracle中JOIN ... ON语法的早期错误阻止了Oracle用户远离这种语法.我认为现在没有任何特别的问题.
它们是等价的,应该被解析为相同的内部表示以进行优化.