我应该什么时候使用join on,或者在下面这样的场景中在哪里使用join?

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列,而第二个查询有两个。这会显著影响查询的速度吗?

最佳答案

除了语法错误之外,您还比较了ansi-89连接语法(where子句中的连接条件)和ansi-92连接语法(使用join关键字)。
它们彼此执行相同的操作,但是ANSI-89缺少外部连接支持,因此许多数据库都有表示外部连接的自定义方法:

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

为了便于移植和可读,请使用ANSI-92语法。

关于sql - 哪个查询更快?哪个更清洁?加入或在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3892525/

10-10 16:27