您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

SELECT INTO

Name

SELECT INTO  --  从一个查询的结果中创建一个新表

Synopsis

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

 ] [, ...] ]
    [ FOR UPDATE [ OF 

tablename

 [, ...] ] ]
    [ LIMIT { 

count

 , ] { 

count

 | ALL } ]
    [ OFFSET 

start

 ]

这里


from_item

 可以是:

[ ONLY ] 

table_name

 [ * ]
    [ [ AS ] 

alias

 [ ( 

column_alias_list

 ) ] ]
|
( 

select

 )
    [ AS ] 

alias

 [ ( 

column_alias_list

 ) ]
|


from_item

 [ NATURAL ] 

join_type

 

from_item


    [ ON 

join_condition

 | USING ( 

join_column_list

 ) ]
  

输入

TEMPORARY
TEMP

如果声明了 TEMPORARY 或者 TEMP, 那么输出表就只在本次会话中创建,并且会话结束后自动删除. 同名的现存永久表在临时表存在期间将不可见(在本次会话中). 任何在临时表上创建的索引都是自动临时的.

new_table

要创建的新表名.这个表必须是尚未存在的. 不过,我们可以在存在一个永久表的情况下创建一个(同名)临时表.

所有其它输入的域都在 SELECT 中有详细描述.

输出

请参考 CREATE TABLE SELECT 获取所有可能输出信息的摘要.

描述

SELECT INTO 从一个查询的计算结果中创建一个新表. 书局并不返回给客户端,这一点和普通的 SELECT 不同.新表的字段具有和 SELECT 的输出字段 相关联(相同)的名字和数据类型.

注意: CREATE TABLE AS 的作用和 SELECT INTO 相同. 我们建议使用 CREATE TABLE AS 语法, 因为 SELECT INTO 不是标准语法. 实际上,这种类型的 SELECT INTO 是不能在 PL/pgSQL 或者 ecpg 中使用的, 因为它们对 INTO 子句的解释是不同的.

兼容性

SQL92 用 SELECT ... INTO 表示选取数值到一个 宿主程序的标量变量中,而不是创建一个新表. SQL92 的用法实际上就是在 PL/pgSQL ecpg 里的用途. PostgreSQL SELECT INTO 代表创建表的意思是历史原因.在新代码里我们 最好使用 CREATE TABLE AS 实现这个目地. ( CREATE TABLE AS 也不是标准,但至少它 出现混淆的机会少一些.)