SELECT INTO#

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
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]

Описание

SELECT INTO создает новую таблицу и заполняет ее данными, вычисленными с помощью запроса. Данные не возвращаются клиенту, как это происходит с обычным SELECT. Колонки новой таблицы имеют имена и типы данных, связанные с выходными колонками SELECT.

Параметры

TEMPORARY or 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 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 для этой цели в новом коде.

См. также

CREATE TABLE AS