以下2个SQL脚本的结果集看起来相同。但应该有一些区别。那是什么?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
效果有什么不同?
我刚刚比较了SQL Server 2008 R2上的实际查询计划。它们完全相同。所以没有性能差异。内部联接用于两种情况。
答案 0 :(得分:7)
您的第一个查询:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
确实是JOIN
。逗号(,
)是JOIN
的简写符号。
答案 1 :(得分:2)
这些陈述完全等同。
如果您只运行此部分:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
你会得到任何可能的人和命令的组合(笛卡尔加入)。使用添加的WHERE
子句,您可以将其限制为匹配的组合。这正是INNER JOIN
的作用。此表单比使用JOIN
关键字更强大,因为您可以准确选择要匹配的行集。
例如,我最近使用笛卡尔联接来创建两个日期之间发生的所有日期的列表。使用JOIN
关键字无法做到这一点。