SQL的新手,对于一个非常基本的union all语句有一个普遍的问题。我正在查看一段看起来像这样的代码:
select *
into ConsolidatedTable
from
(select * from Table1
union all
select * from Table2
union all
select * from Table3) as tmp;
是否有必要将其作为tmp'?如果是这样,为什么?
谢谢!
答案 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
就足够了。