| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
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 子句的解釋是不同的。 而且,CREATE TABLE AS 提供了一個 SELECT INTO 所提供功能的超集。
在 PostgreSQL 8.0 以前,SELECT INTO 建立的資料表總是包含 OID。 到了 PostgreSQL 8.0, SELECT INTO 建立的資料表是否包含 OID 由 default_with_oids 配置參數控制。這個參數目前預設為真,但是在將來的 PostgreSQL 版本裡,很有可能改成預設為假。
建立一個新資料表 films_recent, 它值包含來自 films 的最近的條目:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
SQL 標準用 SELECT INTO 資料表示選取數值到一個宿主程序的標量變量中, 而不是建立一個新資料表。SQL92 的用法實際上就是在 ECPG (參閱 Chapter 29)和PL/pgSQL (Chapter 35)裡的用途。 PostgreSQL 用 SELECT INTO 代資料表建立資料表的意思是歷史原因。 在新代碼裡我們最好使用 CREATE TABLE AS 實現這個目的。