我想列出从联接中选择的所有列。如果两个表中都有一列,请说我们有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的其他列 - 否则连接将没有意义。
答案 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