Запрос и изменение данных через представления (Views)
В этом шаге вы узнаете, как запрашивать и изменять данные через представления (views) в PostgreSQL. Хотя представления в основном используются для запроса данных, в некоторых случаях их также можно использовать для изменения базовых данных в базовых таблицах.
Запрос данных через представления
Как было продемонстрировано на предыдущем шаге, запрос данных через представление (view) является простым. Вы можете использовать оператор SELECT
для извлечения данных из представления, как если бы это была обычная таблица.
Например, чтобы получить все данные из представления employee_info
:
SELECT * FROM employee_info;
Вы также можете использовать предложения WHERE
и другие SQL-конструкции для фильтрации и сортировки данных:
SELECT * FROM employee_info WHERE department = 'Sales';
Этот запрос вернет только сотрудников в отделе продаж (Sales).
Изменение данных через представления
Изменение данных через представление возможно при определенных условиях. Представление должно быть достаточно простым (simple), чтобы PostgreSQL мог определить, какую базовую таблицу и столбцы следует обновить. Как правило, представление можно изменить, если оно соответствует следующим критериям:
- Оно выбирает данные только из одной таблицы.
- Оно не содержит агрегатных функций (например,
SUM
, AVG
, COUNT
).
- Оно не содержит предложений
GROUP BY
, HAVING
или DISTINCT
.
Давайте создадим еще одно представление, которое включает employee_id
, чтобы упростить обновления:
CREATE VIEW employee_details AS
SELECT employee_id, first_name, last_name, department, salary
FROM employees;
Теперь давайте попробуем обновить зарплату сотрудника через представление employee_details
:
UPDATE employee_details
SET salary = 65000.00
WHERE employee_id = 1;
Этот оператор обновляет зарплату сотрудника с employee_id
1 до 65000.00.
Вы можете проверить обновление, запросив таблицу employees
напрямую:
SELECT * FROM employees WHERE employee_id = 1;
Вы должны увидеть, что зарплата для employee_id
1 была обновлена.
Вставка данных через представления
Вы также можете вставлять данные через представление, при условии, что представление включает все столбцы базовой таблицы, не допускающие значения NULL
. Поскольку наше представление employee_details
включает все столбцы таблицы employees
, мы можем вставить нового сотрудника:
INSERT INTO employee_details (first_name, last_name, department, salary)
VALUES ('David', 'Lee', 'IT', 90000.00);
Обратите внимание, что мы не указываем employee_id
, потому что это столбец типа SERIAL
и будет сгенерирован автоматически.
Проверьте вставку:
SELECT * FROM employees WHERE first_name = 'David' AND last_name = 'Lee';
Удаление данных через представления
Аналогично, вы можете удалять данные через изменяемое представление:
DELETE FROM employee_details WHERE first_name = 'David' AND last_name = 'Lee';
Проверьте удаление:
SELECT * FROM employees WHERE first_name = 'David' AND last_name = 'Lee';
Важные соображения
- Не все представления можно изменять. Сложные представления с соединениями (joins), агрегациями или другими сложными операциями обычно доступны только для чтения (read-only).
- Изменение данных через представления может иметь последствия для производительности. PostgreSQL необходимо преобразовать операции представления в операции над базовыми таблицами.
- Будьте осторожны при изменении данных через представления, так как изменения напрямую повлияют на базовые таблицы.