我们可以使用以下方法查询两个表吗?
SELECT customer.name
FROM customer
INNER JOIN order
ON customer.cus_id=order.cus_id
ORDER BY customer.name
SELECT c.name
FROM customer c, order o
WHERE
c.cus_id=o.cus_id
ORDER BY c.name
在后一种情况下使用连接有什么好处?
答案 0 :(得分:4)
执行没有区别。这两个是相同的查询,只是写得不同。
答案 1 :(得分:2)
对于这两个确切的查询,没有区别。查询计划程序将为它们创建完全相同的查询计划。
一般来说,使用join
会更灵活,除了inner join
您还有left outer join
,right outer join
和cross join
。
“旧样式”联接的这些变体有语法,但这是非标准的,例如在SQL Server 2005中已弃用。
答案 2 :(得分:1)
对于它的价值,INNER JOIN
与“正常”查询的区别是不准确的。
逗号样式连接语法在ANSI SQL-89标准中定义。然后他们意识到他们无法使用该语法进行某些类型的连接。正如@Guffa所提到的,Oracle和Sybase发明了他们自己的专有增强功能,以加入语法来处理外连接。
在ANSI SQL-92中,该标准引入了INNER
/ OUTER JOIN
语法选项。但是为了向后兼容性仍然支持旧语法,并且它至今仍在规范中。所以他们都是标准。
自显式连接语法成为官方SQL标准的一部分以来,已经有20年了。是时候接受 作为“普通”语法了。
哪个表现更好?它们的表现完全相同。所有合理的SQL实现都以相同的方式处理连接,并且两种语法形式都调用相同的代码。
我发现SQL-92 JOIN语法更清晰。如果您有许多表的连接,则可以将连接表达式放在连接表的旁边。如果使用旧语法,WHERE子句会被许多术语弄得乱七八糟,并且很难理清每个术语所使用的连接表。
有些人坚持认为旧的SQL-89风格更清晰,但却错了。 : - )