W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
CREATE TABLE AS — 從一個查詢的結(jié)果創(chuàng)建一個新表
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
[ (column_name
[, ...] ) ]
[ USING method
]
[ WITH ( storage_parameter
[= value
] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name
]
AS query
[ WITH [ NO ] DATA ]
CREATE TABLE AS
創(chuàng)建一個表,并且用 由一個SELECT
命令計算出來的數(shù)據(jù)填充 該表。該表的列具有和SELECT
的輸出列 相關(guān)的名稱和數(shù)據(jù)類型(不過可以通過給出一個顯式的新列名列表來覆 蓋這些列名)。
CREATE TABLE AS
和創(chuàng)建一個視圖有些 相似,但是實際上非常不同:它會創(chuàng)建一個新表并且只計算該查詢一次 用來初始填充新表。這個新表將不會跟蹤該查詢源表的后續(xù)變化。相反, 一個視圖只要被查詢,它的定義SELECT
語句就會被重新計算。
GLOBAL
或者LOCAL
為兼容性而忽略。不推薦使用這些關(guān)鍵詞,詳見 CREATE TABLE。
TEMPORARY
或者TEMP
如果被指定,該表會被創(chuàng)建為一個臨時表。詳見 CREATE TABLE。
UNLOGGED
如果被指定,該表會被創(chuàng)建為一個不做日志的表。詳見 CREATE TABLE。
IF NOT EXISTS
如果已經(jīng)存在一個同名的關(guān)系時不要拋出錯誤。這種情況下會發(fā)出一個 提示。詳見CREATE TABLE。
table_name
要創(chuàng)建的表的名稱(可以被模式限定)。
column_name
新表中一列的名稱。如果沒有提供列名,會從查詢的輸出列名中得到。
USING method
這個可選的子句指定了用于存儲新表內(nèi)容的表訪問方法;該方法需要是一個類型 TABLE
的訪問方法。詳見第 60 章。 如果沒有指定這個選項,則選擇新表的默認(rèn)表訪問方法。詳見default_table_access_method。
WITH ( storage_parameter
[= value
] [, ... ] )
這個子句為新表指定可選的存儲參數(shù),詳見CREATE TABLE中的 Storage Parameters。
為了向后兼容,表的WITH
子句也能包含OIDS=FALSE
來指定新表的行將不包含OID(對象標(biāo)識符)。OIDS=TRUE
不再支持。
WITHOUT OIDS
這是向后兼容的語法,用于聲明表WITHOUT OIDS
,創(chuàng)建表WITH OIDS
不再被支持。
ON COMMIT
臨時表在事務(wù)塊結(jié)束時的行為可以用ON COMMIT
控制。三個選項是:
PRESERVE ROWS
在事務(wù)結(jié)束時不采取特殊的動作。這是默認(rèn)行為。
DELETE ROWS
在每一個事務(wù)塊結(jié)束時臨時表中的所有行都將被刪除。本質(zhì)上, 在每次提交時會完成一次自動的TRUNCATE。
DROP
在當(dāng)前事務(wù)塊結(jié)束時將刪掉臨時表。
TABLESPACE tablespace_name
tablespace_name
是要在其中創(chuàng)建新表的表空間名稱。如果沒有指定,將會查詢 default_tablespace,臨時表會查詢 temp_tablespaces。
query
一個SELECT、TABLE或者VALUES
命令,或者是一個運行準(zhǔn)備好的
SELECT
、 TABLE
或者 VALUES
查詢的EXECUTE命令。
WITH [ NO ] DATA
這個子句指定查詢產(chǎn)生的數(shù)據(jù)是否應(yīng)該被復(fù)制到新表中。如果不是,只有 表結(jié)構(gòu)會被復(fù)制。默認(rèn)是復(fù)制數(shù)據(jù)。
這個命令在功能上類似于SELECT INTO,但是它更好, 因為不太可能被SELECT INTO
語法的其他使用混淆。更 進(jìn)一步,CREATE TABLE AS
提供了 SELECT INTO
的功能的一個超集。
創(chuàng)建一個新表films_recent
,它只由表 films
中最近的項組成:
CREATE TABLE films_recent AS
SELECT * FROM films WHERE date_prod >= '2002-01-01';
要完全地復(fù)制一個表,也可以使用TABLE
命令的 簡短形式:
CREATE TABLE films2 AS
TABLE films;
用一個預(yù)備語句創(chuàng)建一個新的臨時表films_recent
, 它僅由表films
中最近的項組成,使用準(zhǔn)備好的聲明。新表將在提交時被丟棄:
PREPARE recentfilms(date) AS
SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_recent ON COMMIT DROP AS
EXECUTE recentfilms('2002-01-01');
CREATE TABLE AS
符合 SQL標(biāo)準(zhǔn)。下面的是非標(biāo)準(zhǔn)擴(kuò)展:
標(biāo)準(zhǔn)要求在子查詢子句周圍有圓括號,在 PostgreSQL中這些圓括號是可選的。
在標(biāo)準(zhǔn)中,WITH [ NO ] DATA
子句是必要的,而 PostgreSQL 中是可選的。
PostgreSQL處理臨時表的方式和標(biāo)準(zhǔn)不同。 詳見CREATE TABLE。
WITH
子句是一種 PostgreSQL擴(kuò)展, 標(biāo)準(zhǔn)中沒有存儲參數(shù)。
PostgreSQL的表空間概念是標(biāo)準(zhǔn)的 一部分。因此,子句TABLESPACE
是一種擴(kuò)展。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: