在使用公共列连接表时,在SELECT语句中指出哪个表

时间:2015-02-18 13:26:46

标签: sql join sql-server-2012

我想列出从联接中选择的所有列。如果两个表中都有一列,请说我们有2个这样的列:ID(作为连接的键)和Name,我应该写:

SELECT t1 .ID,t1.Name FROM table1 t1 INNER JOIN table2 t2 ON t1.ID=t2.ID

SELECT t2 .ID,t2.Name FROM

SELECT ID ,姓名FROM

或者我选择哪个表都没关系。当然,在SELECT语句中,将严格存在来自t1或t2的其他列 - 否则连接将没有意义。

2 个答案:

答案 0 :(得分:1)

对于inner join,这有点无关紧要。对于left outer join,您通常需要第一个表中的列;对于来自第二个的right outer join。否则,该值可能为NULL

我说它“有点”并不重要,但是:

SELECT t1.ID, t2.Name
SELECT t2.ID, t2.Name
如果优化器确定它需要从数据页中获取t1.id,那么

可能会导致执行计划略有不同 - 如果查询更复杂,它可能会提取select。作为一般规则,我会坚持在using中尽可能少地引用表格,因为这有助于优化引擎选择最佳计划。

请注意,其他一些数据库支持ANSI标准SELECT ID, t1.Name FROM table1 t1 INNER JOIN table2 t2 USING (ID) 子句,允许您编写:

{{1}}

但SQL Server(尚未)支持此功能。

答案 1 :(得分:1)

在SQL SEVER中

以下声明将起作用

SELECT t1.ID, t1.Name FROM table1 t1 INNER JOIN table2 t2 ON t1.ID=t2.ID

以下声明也可以使用

SELECT * FROM table1 t1 INNER JOIN table2 t2 ON t1.ID=t2.ID 

这将导致table1和table2的所有列

以下声明不起作用

SELECT ID,NAME FROM table1 t1 INNER JOIN table2 t2 ON t1.ID=t2.ID

列不明确,sql server不知道要项目的哪些Table列

最佳实践

SELECT t1.ID, t1.Name FROM table1 t1 INNER JOIN table2 t2 ON t1.ID=t2.ID