基本SQL联合全部为tmp

时间:2017-02-28 04:45:30

标签: sql-server select sql-server-2012

SQL的新手,对于一个非常基本的union all语句有一个普遍的问题。我正在查看一段看起来像这样的代码:

select * 
into ConsolidatedTable 
from 
    (select * from Table1
     union all
     select * from Table2
     union all
     select * from Table3) as tmp;

是否有必要将其作为tmp'?如果是这样,为什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

对于SQL Server,是的,内联视图的别名是 required 。如果省略别名,SQL Server将抛出错误。

别名之前的AS关键字是可选的,不是必需的。

(我个人倾向于省略表/视图别名的AS关键字,并始终包含列别名的AS关键字。)

表/视图别名的AS关键字在SQL Server中是可选的。 (它不是ANSI SQL标准的一部分。)某些数据库(例如Oracle)在表或视图别名之前不接受AS关键字,并且如果包含它将抛出错误。

某些数据库(例如MySQL和SQL Server 需要)将别名分配给内联视图。 的数据库需要内联视图中的别名(例如Oracle)允许别名,并且分配了别名允许我们限定外部查询中的列引用。由于符合条件的列引用是我们的常规模式,因​​此为内联视图分配别名也是我们的常规模式,即使对于不需要它的数据库也是如此。

请注意,在内联视图查询中,别名的分配无关UNION ALL的使用情况。

答案 1 :(得分:1)

tmp被称为别名。这是强制性的,因为否则内联视图中的列(包含在parantheses中的所有代码)将变为"无法访问"在查询的其余部分,就像你将无法引用它们一样。

它可以有您想要的任何名称,它仅用于进一步参考。

而且,为了回答你的上一个问题,是否有必要将其作为tmp'? - 因为这是sql server,你可以直接写出别名而不用' as' - 所以) tmp就足够了。