PostgreSQL Views
Вступление
Представление - это объект данных, который не содержит никаких данных. Содержимое представления является результатом базовой таблицы. Они работают так же, как базовая таблица, но не содержат собственных данных. Разница между представлением и таблицей заключается в том, что представления - это определения, построенные поверх других таблиц (или представлений). Если данные изменяются в базовой таблице, то же самое изменение отражается в представлении. Представление может быть построено поверх одной или нескольких таблиц.
Версия: PostgreSQL 9.3.5
Содержание:
- Как создать PostgreSQL View?
- PostgreSQL СОЗДАТЬ ВИД С ГДЕ
- PostgreSQL CREATE VIEW с помощью AND и OR
- PostgreSQL СОЗДАТЬ ВИД с GROUP BY
- PostgreSQL СОЗДАТЬ ВИД с ORDER BY
- PostgreSQL СОЗДАТЬ ПРОСМОТР МЕЖДУ И В
- PostgreSQL СОЗДАТЬ ВИД с LIKE
- PostgreSQL CREATE VIEW с использованием подзапросов
- PostgreSQL СОЗДАТЬ ВИД с JOIN
- PostgreSQL СОЗДАТЬ ВИД с UNION
- Изменить представление PostgreSQL
- ОТМЕНИТЬ представление PostgreSQL
Как создать PostgreSQL View?
CREATE VIEW определяет представление запроса. Представление не материализовано физически. Вместо этого запрос выполняется каждый раз, когда на представление ссылаются в запросе. По умолчанию представление связано с базой данных по умолчанию (используемой в настоящее время базой данных). Чтобы связать представление с заданной базой данных, укажите имя как имя_базы_данных . view_name при его создании. Вот полный синтаксис:
Синтаксис:
СОЗДАТЬ [ИЛИ ЗАМЕНИТЬ] [ТЕМП | ВРЕМЕННОЕ] [RECURSIVE] VIEW name [(column_name [, ...])] [WITH (view_option_name [= view_option_value] [, ...])] Как запрос
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ VIEW похож, но если представление с таким именем уже существует, оно заменяется. Если дано имя схемы (например, CREATE VIEW hr.myview ...), то представление создается в указанной схеме. В противном случае он создается в текущей схеме. Временные представления существуют в специальной схеме, поэтому имя схемы не может быть задано при создании временного представления. Имя представления должно отличаться от имени любого другого представления, таблицы, последовательности, индекса или внешней таблицы в той же схеме.
Параметры:
оператор | Описание |
---|---|
ВРЕМЕННЫЙ или ТЕМП | Если указано, представление создается как временное представление. Временные представления автоматически удаляются в конце текущего сеанса. |
RECURSIVE | Создает рекурсивное представление. |
название | Имя вида, который будет создан. |
column_name | Необязательный список имен, которые будут использоваться для столбцов представления. Если не указано, имена столбцов выводятся из запроса. |
WITH (view_option_name [= view_option_value] [, ...]) | В этом разделе указываются необязательные параметры для представления; в настоящее время единственным поддерживаемым именем параметра является security_barrier, который должен быть включен, когда представление предназначено для обеспечения безопасности на уровне строк. |
запрос | Команда SELECT или VALUES, которая предоставит столбцы и строки представления. |
Замечания:
Синтаксис рекурсивного представления:
CREATE RECURSIVE VIEW name (столбцы) AS SELECT ...;
эквивалентно
CREATE VIEW name AS с рекурсивным именем (столбцы) AS (SELECT ...) SELECT столбцы из имени;
Примеры
Вот пример использования RECURSIVE:
Код:
CREATE VIEW my_view AS
WITH RECURSIVE my_view(n) AS (
SELECT 1
UNION ALL
SELECT n+1 FROM my_view WHERE n <=5
)
SELECT * FROM my_view;
Пример таблицы: сотрудники
Пример таблицы: расположение
Пример таблицы: отделы
PostgreSQL СОЗДАТЬ ВИД С ГДЕ
Команда CREATE VIEW может использоваться с предложением WHERE.
Пример:
Код:
CREATE VIEW emp_view
AS SELECT employee_id, first_name,last_name, hire_date
FROM employees
WHERE department_id = 200;
Приведенный выше оператор PostgreSQL создаст представление emp_view, содержащее записи (для столбцов employee_id, first_name, last_name и hire_date) таблицы сотрудников, если эти записи содержат значение 200 для столбца Department_id.
PostgreSQL CREATE VIEW с помощью AND и OR
Команда CREATE VIEW может использоваться с операторами AND и OR.
Пример:
Код:
CREATE VIEW my_view
AS SELECT *
FROM locations
WHERE (country_id='US' AND city='Seattle')
OR (country_id=JP' AND city='Tokyo');
Приведенный выше оператор PostgreSQL создаст представление 'my_view', в котором будут записаны записи для всех столбцов таблицы местоположений, если (A) (i) значение столбца country_id равно US, и (ii) значение города - Сиэтл; или (B) (i) значение столбца country_id - JP, а (ii) значение города - Токио.
PostgreSQL СОЗДАТЬ ВИД с GROUP BY
Команда CREATE VIEW может использоваться с предложением GROUP BY.
Пример:
Код:
CREATE VIEW my_view
AS SELECT department_id, count(*)
FROM employees
GROUP BY department_id;
Приведенный выше оператор создаст представление «my_view», в котором будут собраны все записи, сгруппированные по департаменту_id, а также сохранен идентификатор департамента и число сотрудников для каждого отдела (отдел_идентификатора) из таблицы сотрудников.
PostgreSQL СОЗДАТЬ ВИД с ORDER BY
Команда CREATE VIEW может использоваться с предложением ORDER BY.
Пример:
Код:
CREATE VIEW my_view
AS SELECT department_id,count(*)
FROM employees
GROUP BY department_id
ORDER BY department_id;
Приведенный выше оператор PostgreSQL создаст представление «my_view», в котором будут собраны все записи, сгруппированные по Department_id и отсортированные по Department_id и количеству сотрудников для каждого отдела (отдел_ид) из таблицы сотрудников.
PostgreSQL СОЗДАТЬ ПРОСМОТР МЕЖДУ И В
Команда CREATE VIEW может использоваться с оператором BETWEEN и IN.
Пример:
Код:
CREATE VIEW my_view
AS SELECT *
FROM employees
WHERE first_name BETWEEN 'A' AND 'H'
AND salary IN(4000,7000,9000,10000,12000);
Приведенный выше оператор создаст представление «my_view», в котором будут приниматься все таблицы записей о сотрудниках, если (A) first_name сотрудника начинается с любого из символов от «A» до «H», а (B) - это любой из следующих зарплат 4000,7000,9000,10000,12000.
PostgreSQL СОЗДАТЬ ВИД с LIKE
Команда CREATE VIEW может использоваться с оператором LIKE.
Пример:
Код:
CREATE VIEW my_view
AS SELECT *
FROM employees
WHERE first_name
NOT LIKE 'T%' AND last_name NOT LIKE 'T%';
Вышеприведенный оператор PostgreSQL создаст представление «my_view», принимающее все записи таблицы сотрудников, если (A) first_name сотрудника не начинается с «T» и (B) last_name сотрудника не начинается с «T».
PostgreSQL CREATE VIEW с использованием подзапросов
Команда CREATE VIEW может использоваться с подзапросами.
Пример:
Код:
CREATE VIEW my_view
AS SELECT employee_id,first_name,last_name
FROM employees
WHERE department_id IN(
SELECT department_id
FROM departments
WHERE location_id IN (1500,1600,1700)
);
Приведенный выше оператор PostgreSQL создаст представление «my_view», в котором будут храниться все записи таблицы employee_id, first_name, last_name of employee, если Department_id удовлетворяет условию, определенному в подзапросе (за которым следует Department_id IN).
Подзапрос извлекает те идентификаторы департамента_идейства из таблицы отделов, где указатель местоположения_идентификатора - любой из списка 1500, 1600, 1700.
PostgreSQL СОЗДАТЬ ВИД с JOIN
Команда CREATE VIEW может использоваться вместе с оператором JOIN.
Пример:
Код:
CREATE VIEW my_view
AS SELECT a.employee_id,a.first_name,a.last_name, b.department_name,
b.location_id
FROM employees a,departments b
WHERE a.department_id=b.department_id;
Приведенный выше оператор PostgreSQL создаст представление my_view вместе с оператором JOIN.
Здесь оператор JOIN извлекает employee_id, first_name, last_name из таблицы сотрудников, а Department_id и location_id из таблицы расположений, если отдел_ид таблицы сотрудников и местоположение находятся на одном уровне.
PostgreSQL СОЗДАТЬ ВИД с UNION
Команда CREATE VIEW может использоваться с UNION.
Пример:
Код:
CREATE VIEW my_view AS
SELECT *
FROM employees
WHERE manager_id=100
UNION
SELECT *
FROM employees
WHERE first_name BETWEEN 'P' AND 'W'
UNION
SELECT *
FROM employees
WHERE salary IN(7000,9000,10000,12000);
Приведенный выше оператор PostgreSQL создаст представление «my_view», содержащее столбцы, как в «employee».
Записи будут вставлены с объединением трех подзапросов.
Первый запрос вставляет эти строки в представление «my_view» из таблицы «employee», у которого «manager_id» равен «100».
Второй запрос вставляет эти строки в представление «my_view» из таблицы «employee», строки которой имеют столбец «first_name», начинающийся с любой буквы от «P» до «W».
Третий запрос вставляет эти строки в представление «my_view» из таблицы «employee», строки которой имеют любое из следующих значений 7000,9000,10000,12000 в «salary».
Изменить вид
Оператор ALTER VIEW изменяет определение существующего представления. Для этого оператора требуются привилегии CREATE VIEW и DROP для представления, а также некоторые привилегии для каждого столбца, указанного в операторе SELECT. Синтаксис оператора похож на CREATE VIEW. Вот синтаксис:
ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] name ALTER [COLUMN] column_name SET Выражение DEFAULT ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] name ALTER [COLUMN] column_name DROP DEFAULT ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] имя ВЛАДЕЛЕЦ new_owner ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] name RENAME TO new_name ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] name SET SCHEMA new_schema ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] имя SET (view_option_name [= view_option_value] [, ...]) ALTER VIEW [ЕСЛИ СУЩЕСТВУЕТ] name RESET (view_option_name [, ...])
Параметры:
оператор | Описание |
---|---|
название | Имя существующего представления. |
ЕСЛИ СУЩЕСТВУЕТ | Не выдавайте ошибку, если представление не существует. В этом случае выдается уведомление. |
SET / DROP DEFAULT | Эти формы устанавливают или удаляют значение по умолчанию для столбца. |
новый владелец | Имя пользователя нового владельца представления. |
новое имя | Новое имя для представления. |
new_schema | Новая схема для представления. |
view_option_name | Имя параметра просмотра, который нужно установить или сбросить. |
view_option_value | Новое значение для опции просмотра. |
Пример:
Переименовать представление abc в xyz
Код:
ALTER VIEW my_view RENAME TO myview;
Чтобы прикрепить значение столбца по умолчанию к обновляемому представлению:
Код:
CREATE TABLE testtable (id int, tz timestamptz);
CREATE VIEW test_view AS SELECT * FROM testtable
ALTER VIEW test_view ALTER COLUMN tz SET DEFAULT now();
Оставить представление
Оператор DROP VIEW используется для удаления представлений. Чтобы удалить представление, вы должны иметь привилегию DROP для каждого представления. Вот синтаксис:
Синтаксис
DROP VIEW [ЕСЛИ СУЩЕСТВУЕТ] view_name [, view_name] ... [КАСКАД | RESTRICT]
Параметры:
оператор | Описание |
---|---|
ЕСЛИ СУЩЕСТВУЕТ | Не выдавайте ошибку, если представление не существует. В этом случае выдается уведомление. |
название | Имя (возможно, дополненное схемой) представления, которое нужно удалить. |
CASCADE | Автоматически отбрасывать объекты, которые зависят от вида (например, других видов). |
RESTRICT | Откажитесь от просмотра, если от него зависят какие-либо объекты. Это по умолчанию. |
Пример:
Эта команда удалит представление под названием «test_view»:
DROP VIEW test_view;
Ссылка: Руководство PostgreSQL
Новый контент: Composer: менеджер зависимостей для PHP , R программирования