Представления (VIEW)
Сохраняем сложный запрос под именем и используем его как таблицу.
Представление (VIEW) — это сохранённый
SELECTс именем; обращение к нему выполняет запрос и возвращает результат, как будто это таблица.
Зачем нужны представления
Если один и тот же сложный запрос используется во многих местах, его удобно сохранить под именем. Представление не хранит данные — это «виртуальная таблица», за которой стоит запрос. Каждый раз при обращении к ней запрос выполняется заново на актуальных данных.
Создание и использование
Создадим представление, которое считает сумму заказов по каждому клиенту, и обратимся к нему как к обычной таблице:
CREATE TABLE orders (id INTEGER PRIMARY KEY, customer TEXT, amount INTEGER);
INSERT INTO orders (customer, amount) VALUES
('Аня', 500), ('Аня', 1200), ('Борис', 800);
CREATE VIEW customer_totals AS
SELECT customer, SUM(amount) AS total
FROM orders
GROUP BY customer;
SELECT * FROM customer_totals ORDER BY total DESC;
Вывод:
Аня|1700 Борис|800
Теперь вместо длинного запроса с GROUP BY можно писать просто SELECT * FROM customer_totals. К представлению применимы WHERE, ORDER BY, его можно соединять с другими таблицами через JOIN — как настоящую таблицу.
Чем полезны представления
- Упрощение. Сложная логика прячется за коротким именем; запросы становятся читаемее.
- Повторное использование. Один раз описали — используем везде, не копируя SQL.
- Слой абстракции. Если структура таблиц изменится, можно поправить только представление, а внешние запросы останутся прежними.
Важные ограничения
Представление в SQLite по умолчанию доступно только для чтения: напрямую делать INSERT/UPDATE/DELETE в него нельзя (для этого существуют специальные триггеры INSTEAD OF). И помните: представление не ускоряет запрос — оно лишь сохраняет его текст, а сам SELECT выполняется каждый раз заново. Удаляют представление командой DROP VIEW customer_totals;.
Итог
- VIEW — это сохранённый запрос; обращение к нему выполняет
SELECTна актуальных данных. - К представлению можно применять
WHERE,ORDER BY,JOIN, как к таблице. - Представления упрощают и переиспользуют логику, но не хранят данные и не ускоряют запрос.