Sql

Postgresql into select: PostgreSQL : Документация: 9.5: SELECT INTO : Компания Postgres Professional

Оператор PostgreSQL SELECT INTO на практических примерах

Резюме : в этом руководстве вы узнаете, как использовать оператор PostgreSQL SELECT INTO для создания новой таблицы из набора результатов запроса.

Если вы ищете способ выбора данных в переменные, ознакомьтесь с оператором PL/pgSQL SELECT INTO .

Знакомство с оператором PostgreSQL SELECT INTO

Оператор PostgreSQL SELECT INTO создает новую таблицу и вставляет в нее данные, возвращенные запросом.

В новой таблице столбцы будут иметь те же имена, что и столбцы результирующего набора запроса. В отличие от обычного оператора SELECT , оператор SELECT INTO не возвращает результат клиенту.

Ниже показан синтаксис оператора PostgreSQL SELECT INTO :

 SELECT
    select_list
В [ВРЕМЕННО | ТЕМП | UNLOGGED ] [ TABLE ] новое_имя_таблицы
ОТ
    имя_таблицы
ГДЕ
    условие_поиска;
  Язык кода: SQL (язык структурированных запросов) (sql)  

Чтобы создать новую таблицу со структурой и данными, полученными из набора результатов, вы указываете имя новой таблицы после ключевого слова INTO .

Ключевое слово TEMP или TEMPORARY является необязательным; вместо этого вы можете создать временную таблицу.

Ключевое слово UNLOGGED , если оно доступно, сделает новую таблицу незарегистрированной.

Предложение WHERE позволяет указать строки из исходных таблиц, которые должны быть вставлены в новую таблицу. Помимо WHERE , вы можете использовать другие предложения в операторе SELECT для оператора SELECT INTO , такие как INNER JOIN , LEFT JOIN , GROUP BY и 90. 005 ИМЕЮЩИЙ .

Обратите внимание, что вы не можете использовать оператор SELECT INTO в PL/pgSQL, поскольку он иначе интерпретирует предложение INTO . В этом случае вы можете использовать оператор CREATE TABLE AS , который предоставляет больше возможностей, чем оператор 9.0005 Оператор SELECT INTO .

PostgreSQL SELECT INTO examples

Для демонстрации мы будем использовать таблицу film из примера базы данных.

Следующий оператор создает новую таблицу с именем film_r , которая содержит фильмы с рейтингом R и сроком проката 5 дней из таблицы film .

 ВЫБОР
    фильм_идентификатор,
    заголовок,
    арендная плата
В СТОЛ film_r
ОТ
    фильм
ГДЕ
    рейтинг = 'R'
И rent_duration = 5
СОРТИРОВАТЬ ПО
    заголовок;
  Язык кода: SQL (язык структурированных запросов) (sql)  

Для проверки создания таблицы можно запросить данные из таблицы film_r :

 SELECT * FROM film_r;  Язык кода: SQL (язык структурированных запросов) (sql)  

Следующий оператор создает временную таблицу с именем short_film , содержащую фильмы продолжительностью менее 60 минут.

 ВЫБОР
    фильм_идентификатор,
    заголовок,
    длина
INTO TEMP TABLE короткометражный фильм
ОТ
    фильм
ГДЕ
    длина < 60
СОРТИРОВАТЬ ПО
    заголовок; 
Язык кода: SQL (язык структурированных запросов) (sql)

Ниже показаны данные из таблицы short_film :

 SELECT * FROM short_film;  Язык кода: SQL (язык структурированных запросов) (sql)  

В этом руководстве вы узнали, как использовать оператор PostgreSQL SELECT INTO для создания новой таблицы из набора результатов запроса.

Было ли это руководство полезным?

postgresql — СОЗДАТЬ ТАБЛИЦУ КАК против ВЫБРАТЬ В

спросил

Изменено 3 года, 9 месяцев назад

Просмотрено 18 тысяч раз

PostgreSQL поддерживает

CREATE TABLE AS и SELECT INTO , когда использовать оба?

CREATE TABLE AS — определить новую таблицу по результатам запроса

CREATE TABLE AS создает таблицу и заполняет ее данными, вычисленными командой SELECT . Столбцы таблицы имеют имена и типы данных, связанные с выходными столбцами SELECT (за исключением того, что вы можете переопределить имена столбцов, указав явный список имен новых столбцов).

CREATE TABLE AS имеет некоторое сходство с созданием представления, но на самом деле это совсем другое: он создает новую таблицу и вычисляет запрос только один раз, чтобы первоначально заполнить новую таблицу. Новая таблица не будет отслеживать последующие изменения в исходных таблицах запроса. Напротив, представление переоценивает свои определяющие

Оператор SELECT при каждом запросе.

А потом.

SELECT INTO — определить новую таблицу по результатам запроса

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

  • postgresql
  • ctas

Без объяснения причин всегда используйте CREATE TABLE AS без исключения. Внизу каждого под ПРИМЕЧАНИЯ это уточняется,

Примечания для ВЫБЕРИТЕ В

,

CREATE TABLE AS функционально аналогичен SELECT INTO . CREATE TABLE AS является рекомендуемым синтаксисом, поскольку эта форма SELECT INTO недоступна в ECPG или PL/pgSQL, поскольку они по-разному интерпретируют предложение INTO. Кроме того, CREATE TABLE AS предлагает расширенный набор функций, предоставляемых SELECT INTO .

Примечания к СОЗДАТЬ ТАБЛИЦУ КАК ,

Эта команда функционально аналогична SELECT INTO , но она предпочтительнее, поскольку ее меньше путают с другими вариантами использования синтаксиса SELECT INTO . Кроме того, CREATE TABLE AS предлагает расширенный набор функций, предлагаемых ВЫБЕРИТЕ .

Также в разделе Compatibility документов SELECT INTO идет еще дальше,

Стандарт SQL использует SELECT INTO для представления выбора значений в скалярных переменных основной программы, а не для создания новой таблицы. Именно такое использование можно найти в ECPG (см. главу 34) и PL/pgSQL (см. главу 41). Использование PostgreSQL SELECT INTO для представления создания таблицы является историческим. Для этой цели в новом коде лучше всего использовать CREATE TABLE AS .

Итак, у нас есть

  1. PostgreSQL считает, что это сбивает с толку, потому что SELECT INTO делает другие вещи в контекстах, доступных только в PL/pgSQL и ECPG.
  2. CREATE TABLE поддерживает больше функций (я предполагаю, что они имеют в виду WITH OIDS и TABLESPACE
    , IF NOT EXISTS ).
  3. SELECT INTO для создания таблицы "устарел".

В качестве примечания, синтаксис для CTAS с CTE может выглядеть немного странно, и SELECT INTO также может быть своего рода удержанием QUEL RETRIEVE INTO . QUEL был предшественником SQL, который использовался предшественником PostgreSQL (INGRES).

0

Я заметил еще одну вещь, которая отсутствует в принятом ответе. С использованием CREATE TABLE AS сохраняет атрибут nullable каждого столбца, который, кажется, игнорируется ВЫБЕРИТЕ .

Только на этом основании я бы рекомендовал CREATE TABLE AS . Обычный вариант использования обоих операторов — загрузка данных из долго выполняющегося запроса в таблицу без блокировки этой таблицы на время выполнения запроса. Вы создаете временную таблицу с помощью одной из приведенных выше команд, помещаете в нее долго выполняющиеся результаты запроса, а затем вставляете эти результаты в исходную таблицу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *