Как ответить
Представление (view) в SQL — это сохранённый запрос, который ведёт себя как виртуальная таблица. В отличие от обычной таблицы, view не хранит данные физически — он хранит только инструкцию SELECT, а данные подтягиваются из базовых таблиц в момент обращения. Это удобно для безопасности, упрощения сложных запросов и изоляции изменений схемы.
Создаётся view просто:
CREATE VIEW active_users AS
SELECT id, name, email
FROM users
WHERE deleted_at IS NULL;После этого можно писать SELECT * FROM active_users — и получать только активных пользователей, не дублируя условие WHERE deleted_at IS NULL в каждом запросе.
Основные сценарии использования:
- Безопасность: скрыть чувствительные колонки (пароли, зарплаты) от части пользователей. Дать доступ к view, а не к таблице.
- Упрощение: сложный JOIN на 5 таблиц завернуть в view — и аналитик пишет простой SELECT.
- Абстракция схемы: если переименовали колонку в таблице, можно обновить view, и старые запросы продолжат работать.
Важно понимать ограничения. Большинство view — read-only. Если нужно обновлять данные через view, это materialized view (PostgreSQL, Oracle) или view с триггерами INSTEAD OF. Materialized view физически хранит данные и обновляется по расписанию — это уже не виртуальная таблица, а кэш. Обычный view при каждом SELECT выполняет запрос заново, поэтому на больших данных без индексов может тормозить.
Ещё момент: вложенные view (view на основе другого view) работают, но снижают производительность и усложняют отладку. На практике лучше ограничиваться одним уровнем вложенности.
Из личного опыта: view часто используют для отчётов — завернул агрегацию с GROUP BY в view, и бизнес сам дёргает данные через BI-инструмент. Но если отчёт тормозит, materialized view с индексом решает проблему быстрее, чем оптимизация запроса.