sql - 哪个提供更快的查询?哪个更干净?加入或加入

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

最佳答案

撇开语法错误不谈,您将 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语法。

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

相关文章:

mysql - 如何将同一个表中的两列连接成单列

sql - 在 plsql 循环中在 Oracle 中附加字符串

php - 是什么导致 SQL Server 返回消息 'The statement has been terminated'?

mysql - 如何比较不同字段的日期字段?

sql - UTL_MAIL 消息属性调用 OWA_UTIL.cellsprint 过程 Oracle

php - MySQL 三表连接——用户和好友图片

sql - 使所有商店图像成为 Magento 中的基本图像、小图像和缩略图图像?

Python MYSQLdb 文档缺少详细信息?

mysql - 使用 SQL 从数据库过滤数据

mysql - 需要从表中的两个不同日期按天计数