SELECT INTO#
SELECT INTO
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_name
AS (window_definition
) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select
] [ ORDER BYexpression
[ ASC | DESC | USINGoperator
] [ 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
orTEMP
Если указано, таблица создается как временная таблица. См. 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
или табличного пространства имен с помощью method
TABLESPACE
. Используйте tablespace_name
CREATE 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 (см. Глава 33) и PL/pgSQL (см. Глава 40). Использование SELECT INTO
в Tantor BE для создания таблицы является историческим. Некоторые другие реализации SQL также используют SELECT INTO
таким образом (но большинство реализаций SQL поддерживают CREATE TABLE AS
вместо этого). Кроме соображений совместимости, лучше использовать CREATE TABLE AS
для этой цели в новом коде.