下面的两位 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 用户倾向于使用第二种风格,但这可能只是巧合。
感谢您的任何见解,我想知道这个问题有一段时间了。
编辑:我更改了“SQL 内连接与笛卡尔积”的标题,因为我使用了不正确的术语。感谢迄今为止所有的回复。
这两个查询都是内部联接和等效查询。第一种是较旧的处理方法,而 JOIN 语法的使用在 SQL-92 标准引入后才变得普遍(我相信它是在较旧的定义中,只是在那之前并没有特别广泛使用)。
强烈建议使用 JOIN 语法,因为它将连接逻辑与 WHERE 子句中的过滤逻辑分开。虽然 JOIN 语法实际上是内连接的语法糖,但它的优势在于外连接,其中旧的 * 语法可能会产生无法明确描述连接并且解释依赖于实现的情况。 [左|右] JOIN 语法避免了这些陷阱,因此为了保持一致性,在所有情况下都最好使用 JOIN 子句。
请注意,这两个示例都不是笛卡尔积。为此你可以使用
SELECT c.name, o.product
FROM customer c, order o
WHERE o.value = 150
or
SELECT c.name, o.product
FROM customer c CROSS JOIN order o
WHERE o.value = 150
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)