【发布时间】:2010-10-08 16:33:45
【问题描述】:
在像下面这样的场景中,我应该什么时候使用 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 列,而第二个查询将有两个。这会显着影响查询速度吗?
【问题讨论】:
-
这两个查询不能直接比较。对于第二个,您的意思是“WHERE Persons.PhoneNumber = Employee.PhoneNumber”......还是可能是“SELECT * FROM Persons, Employee WHERE Persons.PhoneNumber = Employee.PhoneNumber”?
-
查询不等价 - 没有必要比较它们的性能。
-
另外……现在就改掉这个习惯吧! “Persons”表和“Employee”表不同意单数与复数。今天标准化! :)
-
大声笑鲍勃!我喜欢所有的表名都是复数。
-
命名约定是主观的,与手头的主题无关。重要的是在命名方案中保持一致。