SELECT INTO — создание новой таблицы из результатов запроса
[ WITH [ RECURSIVE ]with_query[, ...] ] SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] [ { * |expression[ [ AS ]output_name] } [, ...] ] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ]new_table[ FROMfrom_item[, ...] ] [ WHEREcondition] [ GROUP BYexpression[, ...] ] [ HAVINGcondition] [ WINDOWwindow_nameAS (window_definition) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select] [ ORDER BYexpression[ ASC | DESC | USINGоператор] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT {count| ALL } ] [ OFFSETstart[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [count] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OFtable_name[, ...] ] [ NOWAIT ] [...] ]
SELECT INTO создаёт новую таблицу и заполняет её
данными, полученными в результате выполнения запроса. Данные не возвращаются клиенту, в отличие от обычного оператора SELECT. . Столбцы новой таблицы получают имена и типы данных, соответствующие выходным столбцам SELECT.
TEMPORARY или TEMPЕсли этот параметр указан, создается временная таблица. См. CREATE TABLE для получения подробной информации.
UNLOGGEDЕсли этот параметр указан, создается нежурналируемая таблица. См. CREATE TABLE для получения подробной информации.
new_tableИмя (необязательно дополненное именем схемы) создаваемой таблицы.
Все остальные параметры подробно описаны в разделе SELECT.
CREATE TABLE AS функционально аналогична команде
SELECT INTO. CREATE TABLE AS
является предпочтительным синтаксисом, поскольку такая форма SELECT
INTO не поддерживается в ECPG
или PL/pgSQL, так как они интерпретируют
INTO предложение иным образом. Кроме того,
CREATE TABLE AS предоставляет расширенный набор функциональных возможностей по сравнению с SELECT INTO.
В отличие от CREATE TABLE AS, SELECT
INTO не позволяет определять такие свойства, как метод доступа к таблице, с помощью USING или табличное пространство
таблицы с помощью методTABLESPACE . Используйте
tablespace_nameCREATE TABLE AS при необходимости. Таким образом, для новой таблицы выбирается метод доступа по умолчанию. См. default_table_access_method для получения дополнительной информации.
Создание новой таблицы films_recent , состоящей только из последних записей таблицы films:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
Стандарт SQL использует SELECT INTO для обозначения выборки значений в скалярные переменные вызывающей программы, а не для создания новой таблицы. Именно такое использование предусмотрено
в ECPG (см. Глава 4.3) и
PL/pgSQL (см. Глава 5.6).
Использование Digital Q.DataBase использование SELECT
INTO для обозначения создания таблицы является исторически сложившимся. Некоторые другие реализации SQL также используют SELECT INTO таким образом (хотя
большинство реализаций SQL поддерживают CREATE TABLE AS
вместо этого). Помимо соображений совместимости, в новом коде для этой цели лучше всего использовать
CREATE TABLE AS for this purpose in new code.