SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [, ...] INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start ] [ FOR UPDATE [ OF tablename [, ...] ] ]
SELECT INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的 SELECT 不同。 新表的字段具有和 SELECT 的输出字段相关联(相同)的名字和数据类型。
如果声明了这个关键字,那么该表是作为一个临时表创建的。 请参考 CREATE TABLE 获取细节。
要创建的表的表名(可以有模式修饰)。
所有其它输入的域都在 SELECT 中有详细描述。
CREATE TABLE AS 的作用和 SELECT INTO 相同。 我们建议使用 CREATE TABLE AS 语法, 因为 SELECT INTO 不是标准语法。 实际上,这种类型的 SELECT INTO 是不能在 ECPG 或者 PL/pgSQL 中使用的, 因为它们对 INTO 子句的解释是不同的。
SQL 标准用 SELECT ... INTO 表示选取数值到一个宿主程序的标量变量中, 而不是创建一个新表。SQL92 的用法实际上就是在 ECPG (参阅 Chapter 30)和PL/pgSQL (Chapter 37)里的用途。 PostgreSQL 用 SELECT INTO 代表创建表的意思是历史原因。 在新代码里我们最好使用 CREATE TABLE AS 实现这个目的。 (CREATE TABLE AS 也不是标准,但至少它出现混淆的机会少一些。)