Name
CREATE TABLE AS -- 从一条查询的结果中创建一个新表
Synopsis
CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ] TABLE
table_name
[ (
column_name
[, ...] ) ]
AS
query
描述
CREATE TABLE AS
创建一个表并且用来自
SELECT
命令计算出来的数据填充该表.
该表的字段和
SELECT
输出字段
的名字及类型相关.(只不过你可以通过明确地给出一个字段名字
列表来覆盖
SELECT
的字段名).
CREATE TABLE AS
和创建视图有点象,
不过两者之间实在是有比较大差异∶它创建一个新表并且只对
SELECT
计算一次来填充这个新表.
新表不能跟踪
SELECT
的源表随后做的变化.
相比之下,每次做查询的时候,视图都重新计算
SELECT
.
这条命令和
SELECT INTO
,
有相同的功能,
但是我们建议你多用这条命令,因为它不象
SELECT ... INTO
语法那样融合和一些其它用法
混淆.
参数
-
[LOCAL] TEMPORARY
或
[LOCAL] TEMP
-
如果声明了这个选项,则该表作为临时表创建.
临时表在会话退出的时候自动删除.
在该临时表存在的期间(本次会话),
同名的永久表是不可见的.
任何在临时表上创建的索引也自动是临时的.
LOCAL
关键字是可选的.
-
table_name
-
要创建的表名.这个表不能是已经存在的.
不过,临时表可以创建为和现有永久表同名.
(译注∶这里指的是同名临时表或永久表不能已经存在)
-
column_name
-
字段的名称.多字段的名称可以用逗号分隔的字段名列表声明.
如果没有提供字段名子,那么就从查询的输出字段名中获取.
-
query
-
有效的查询语句(也就是一条
SELECT
命令),请参考
SELECT
获取可以使用的语法的描述.
注意
这条命令从功能上等效于
SELECT INTO
,
但是我们更建议你用这个命令,因为它不太可能和
SELECT ... INTO
语法的其它方面的使用混淆.
兼容性
这条命令是根据
Oracle
的一个特性
制作的.在 SQL92 或 SQL99 中没有功能相等的命令.不过,
把
CREATE TABLE
和
INSERT ... SELECT
组合起来可以通过略微多一些的工作完成同样的事情.
历史
自
PostgreSQL
6.3 开始就已经有
CREATE TABLE AS
命令了.
|