选择有和没有连接的区别

时间:2012-03-11 15:05:42

标签: sql

以下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上的实际查询计划。它们完全相同。所以没有性能差异。内部联接用于两种情况。

2 个答案:

答案 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关键字无法做到这一点。