Иллюстрированный самоучитель по PostgreSQL

Представления. Другие возможности SQL.

При работе с SQL нередко возникают ситуации, когда один и тот же запрос приходится использовать повторно. Ничто не раздражает так, как необходимость многократного ввода больших и сложных запросов в psql. Кроме того, было бы крайне неэффективно пересылать большие наборы данных по сети на сервер PostgreSQL при выполнении стандартных процедур.

В подобных ситуациях обычно используются представления (views). Представление можно рассматривать как хранимый запрос, на основе которого создается объект базы данных. Этот объект очень похож на таблицу, но в его содержимом динамически отражается состояние только тех записей, которые были заданы при создании. Представления весьма гибки и универсальны; они могут строиться на основе как простых и стандартных запросов к одной таблице, так и чрезвычайно сложных запросов, в которых задействовано несколько таблиц.

Создание представления

Представления создаются командой CREATE VIEW, синтаксис которой выглядит следующим образом:

CREATE VIEW представление
AS запрос

Где:

  • представление. Имя (идентификатор) создаваемого представления.
  • запрос. Полная команда SQL SELECT, определяющая содержимое представления.

Предположим, таблица shipments связывает уникальный код поставки с кодом клиента, кодом ISBN книги и датой отправки заказа. Структуру таблицы shipments иллюстрирует табл. 4.1.

Таблица 4.1. Таблица shipments.

Поле Тип Модификатор
id integer NOT NULL DEFAULT nextval ('shipments_ship_id_seq')
customer_id integer  
isbn text  
ship_date timestamp  

Допустим, вы хотите узнать количество поставок, сведения о которых хранятся в таблице. Это можно сделать несколькими способами, но для простоты начнем со следующего решения:

booktown=# SELECT COUNT(*) FROM shipments;
count
32
(1 row)

Звездочка (*) в этом запросе просто указывает PostgreSQL на необходимость подсчета всех записей вместе со значениями NULL, которые могли бы присутствовать в поле с явно заданным именем. Запрос подсчитывает общее количество записей, то есть количество зарегистрированных поставок.

Предположим, данные из таблиц editions и books были объединены секцией JOIN, чтобы в выходные данные входили названия всех книг. Более того, в запрос была включена секция GROUP BY, обеспечивающая группировку поставок по названиям книг.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.