SQL INNER JOIN ON and USING

14

假设我有两个表,我使用内连接进行联接。使用“ON”与使用“USING”相比有什么优势?或者从所有意义上讲,它们是一样的吗?

3个回答

15

USING 要求两个表中列的名称必须相同:

SELECT *
FROM   employee 
   INNER JOIN department 
      USING (DepartmentID);

ON允许您指定任何要连接的列:

SELECT *
FROM   employee 
   JOIN department 
      ON employee.DepartmentID = department.ID;

简言之,USING更加简洁,但是ON更加灵活。

http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join


2
一般来说,我认为如果你写了 USING,大多数人在阅读你的代码时都需要查找这个关键字的定义。 - satnhak
2
此外,在本文中,使用 USING 连接的列只会在结果集中出现一次,而不是两次(每个表格各一次)。 - Davy8

14

USING是等值连接,会从结果集中删除重复的列(可以说这使它更符合“关系型”数据库的特征)。

ON是θ连接(即连接条件不需要相等,并且可以涉及具有不同名称的列),允许结果集中出现重复的列。


6

并非所有的 SQL 方言都支持 USING,因此它不太具备可移植性,同时也是一种较为罕见的查询方式。


我曾经想知道为什么我从未听说过它,显然“USING子句不受SQL Server和Sybase支持。”——维基百科。虽然它看起来很方便。 - Davy8
在iSeries的DB2中,此上下文中的USING似乎不可用。 - Clockwork-Muse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接