哪个提供更快的查询?哪个更干净?加入或在哪里

时间:2010-10-08 16:33:45

标签: sql database join

我应该在下面的场景中何时使用JOIN ON或WHERE?

DECLARE
  @PhoneNumber int = 5551234

-- JOIN ON
SELECT *
FROM Persons
JOIN Employees ON Persons.DateOfBirth = Employees.DateOfBirth AND
Persons.PhoneNumber = Employees.PhoneNumber
WHERE Persons.PhoneNumber = @PhoneNumber

-- WHERE
SELECT *
FROM Persons
JOIN Employees ON Persons.DateOfBirth = Employees.DateofBirth
WHERE Persons.PhoneNumber = @PhoneNumber AND Employees.PhoneNumber = @PhoneNumber

我知道第一个查询将有一个PhoneNumber列,而第二个查询将有两个。这会显着影响查询的速度吗?

3 个答案:

答案 0 :(得分:7)

除了语法错误之外,您将ANSI-89 JOIN语法(WHERE子句中的JOIN条件)与ANSI-92 JOIN语法(使用JOIN关键字)进行比较。

它们彼此执行相同,但ANSI-89缺少OUTER JOIN支持,因此许多数据库都有自定义方式来指示OUTER连接:

database     ANSI-89 OUTER JOIN syntax
------------------------------------
Oracle       t1.column = t2.column(+)
SQL Server   t1.column =* t2.column

为了便携性和可读性,请使用ANSI-92语法。

答案 1 :(得分:3)

对于内连接,谓词是否放在连接条件或where子句中对结果没有影响。

我把与连接子句中的表相关的东西和与where子句中的过滤相关的东西放在一起。

SELECT *
FROM Persons
JOIN Employee ON Persons.PhoneNumber = Employee.PhoneNumber
WHERE Persons.PhoneNumber = @PhoneNumber

答案 2 :(得分:0)

JOIN是...连接与外键逻辑连接的表的正确选择。原因是您可以设置不同类型的连接(左,右,内,外)。

对行进行更多逻辑过滤。

在你的简单例子中,两者之间并没有真正的区别。

相关问题