VIEW в PostgreSQL

Статья основана на 24 видео из 30 тем курса SQL c 0 от Аристова Евгения. Ссылки на видео на платформах RUTUBE и VK видео.

Ранее мы уже разбирали разные объекты в PostgreSQL – Database, Scheme, Table. Сегодня рассмотрим один из видов Relation – VIEW.

VIEW

VIEW (по-русски – представление) – это именованный запрос, который выполняется каждый раз при обращении к нему. Используется во избежание дублирования кода.

Для СУБД нет разницы, что именно указано в графе FROM – TABLE или VIEW. Соответственно, имена таблиц и представлений не могут совпадать. Также из одного VIEW можно вызывать другой.

Синтаксис VIEW:

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ]
    [WITH ( view_option_name [= view_option_value] [, ... ] )]
    AS query
    [WITH [ CASCADED | LOCAL ] CHECK OPTION]

Практика

Создадим таблицу Склад и добавим туда значения:

CREATE TABLE warehouse (
    id serial UNIQUE,
    name text NOT NULL DEFAULT '',
    kolvo int NOT NULL DEFAULT 0,
    price numeric NOT NULL DEFAULT 0.0,
    salesTime timestamp with time zone NOT NULL DEFAULT     current_timestamp, -- UTC
    salesTime2 timestamp NOT NULL DEFAULT current_timestamp
);
INSERT INTO warehouse (name,kolvo,price) VALUES          
    ('apple',10,10.2),
    ('grape',20,'20.2'),
    ('grape',100,'20.2');

Создадим представление asta из двух полей, выведем его:

CREATE VIEW asta AS SELECT 1 as id, 'Hello' as hello;

SELECT * 
FROM asta;

Теперь создадим представление vista из тех же двух полей, но укажем конкретный тип поля, выведем его:

CREATE VIEW vista AS SELECT 1 as id, text 'World' AS world;
SELECT * 
FROM vista;

Так как результат вызова VIEW – по сути таблица, с ней можно выполнять стандартные действия, например, JOIN:

SELECT a.hello || ', ' || v.world
FROM asta a
JOIN vista v
    ON a.id=v.id;

Колонка не получила названия, так как мы не указали AS.

Создадим представление, вызывающее другое представление. Вызовем его:

CREATE VIEW vista2 AS select world || '!' from vista;

SELECT * 
FROM vista2;

Преимущество VIEW – внутри него полям можно дать короткие имена, а затем использовать их при обращении к этому VIEW:

CREATE VIEW v AS 
    SELECT name AS n, sum(kolvo) 
    FROM warehouse 
    GROUP BY name;

Вызовем представление v:

SELECT * 
FROM v;

Обратимся к полям представления v:

CREATE VIEW v2 AS 
    SELECT n 
    FROM v;

Вызовем представление v2:

SELECT * 
FROM v2;

Добавим новую строчку в таблицу:

INSERT INTO warehouse(name,kolvo,price) VALUES
    ('banana',10,10.2);

Проверим, что VIEW действительно выполняется заново каждый раз (то есть данные в нем обновились):

SELECT * 
FROM v2;

Презентация к статье здесь.

25 из 30 тем будет скоро доступна. Если вы хотите быстрее получить доступ – присоединяйтесь к онлайн группе, ссылка доступна в описании курса.

Комментарии

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

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

пять × 2 =