TGViewer
SQL: Реляционные базы данных SQL: Реляционные базы данных @relational_databases · 986 subscribers
Post #65 890
🪟 Представления (Views) в SQL — базовая теория

Представление — это виртуальная таблица, которая формируется на основе результата SQL-запроса. Представления не содержат собственных данных, а при обращении к ним СУБД повторно исполняет сохранённый запрос, чтобы сгенерировать актуальные результаты.

Теория: как это работает?
1. Представление определяется через конструкцию CREATE VIEW, внутри которой задаётся любой корректный SELECT-запрос.
2. При использовании представления в других запросах оно обрабатывается СУБД как подзапрос, «разворачиваясь» в изначальный SQL.
3. Представления — это не таблицы, они не хранят данные, а только логику запроса (за исключением материализованных представлений, которые имеют такую возможность)
4. Представления можно использовать в SELECT, JOIN, WHERE, ORDER BY и других операторах как обычную таблицу.
5. Если данные в исходных таблицах меняются — результаты представления тоже изменятся.
6. Некоторые представления нельзя обновлять напрямую, особенно если они содержат JOIN, GROUP BY, DISTINCT, подзапросы и агрегаты.

Пример 1: Обычные (логические) представления
CREATE VIEW active_customers AS
SELECT id, name, email
FROM customers
WHERE status = 'active';

Что происходит:
1. CREATE VIEW active_customers AS — создаёт представление с именем active_customers.
2. Внутри — обычный SELECT-запрос: выбираем id, name, email из таблицы customers, но только те строки, где status = 'active'. Представление не копирует данные из customers, а сохраняет структуру запроса. Когда вы запрашиваете SELECT * FROM active_customers, СУБД как бы вставляет туда оригинальный SELECT.

Использование представления
SELECT * FROM active_customers WHERE email LIKE '%@gmail. com';

Что происходит:
1. Вы запрашиваете все поля из представления active_customers, но фильтруете их по email.
2. На самом деле СУБД превращает этот запрос во что-то вроде:
SELECT id, name, email
FROM customers
WHERE status = 'active' AND email LIKE '%@gmail.com';

Представления можно перезаписывать.
Обновление представления — означает изменение данных, которые оно отображает.
CREATE OR REPLACE VIEW active_customers AS
SELECT id, name, email, created_at
FROM customers
WHERE status = 'active';

Что происходит:
1. Ключевая фраза CREATE OR REPLACE означает: если представление уже существует — оно будет перезаписано новым определением.
2. К предыдущему представлению добавляется колонка created_at.

Пример 2: с объединением таблиц (JOIN)
CREATE VIEW employee_departments AS
SELECT e.id, e.name, d.name AS department
FROM employees AS e
JOIN departments AS d ON e.dept_id = d.id;

Что происходит:
1.Создаётся представление employee_departments, в котором:
e — псевдоним для таблицы employees
d — псевдоним для таблицы departments
2. Мы соединяем сотрудников с отделами по dept_id.
3. Выводим:
e. id, e. name — данные сотрудника
d. name AS department — название отдела (переименовываем колонку name из таблицы departments в department, чтобы не было конфликта имён)

Пример использования:
SELECT * FROM employee_departments WHERE department = 'IT';

Получим выгрузку из объединенных таблиц.

Материализованные представления (команда создания CREATE MATERIALIZED VIEW)
Материализованные представления (materialized views) поддерживаются основными СУБД. Они отличаются от обычных тем, что хранят результат запроса физически, а не вычисляют его каждый раз при обращении.

Подходящие случаи для использования представлений:
1. Создание стандартных витрин для аналитики (упрощение запросов)
2. Подготовка отчётности с агрегацией (Повторное использование логики)
3. Маскирование конфиденциальных столбцов (например, зарплаты)
4. Предоставление пользователю ограниченного доступа к БД
5, Снижение дублирования,
представления позволяют вынести повторяющиеся фрагменты запросов в отдельную конструкцию, улучшая читаемость и поддержку кода.

Вывод:
Представления в SQL — это способ упростить работу с базой данных, сделать запросы чище, безопаснее и переиспользуемыми. Особенно актуальны в больших проектах с командной разработкой и аналитикой.

#Views

📱 Подписаться на канал | Курс автора по SQL DDL
  • 🔥 13
  • 👾 4
  • 🌚 2
More from @relational_databases
  1. Oct 4, 2026❗️ Как найти дубли и оставить последнюю запись Одна из самых частых задач аналитика, это п…
  2. Jun 28, 2026Краткий справочник по типам данных к посту
  3. Jun 28, 2026👩‍💻 Типы данных в PostgreSQL: как они устроены и почему их выбор имеет значение Одна из…
  4. May 3, 2026Всем привет)) Я вернулся, так что с этой недели будут новые посты, будем воскрешать канал.…
  5. Dec 31, 2025🥳Всех с наступающим! Решил подвести, итоги года для канала. Создавая его в феврале, я даж…
  6. Nov 23, 20250️⃣ NULL в SQL - не "ничего", а "неизвестно" Когда вы видите NULL в таблице, интуиция подс…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →