- 17 октября 2026
- 10 минут
- 6
Статью подготовили специалисты образовательного сервиса Zaochnik.
Команда SELECT
Команда SELECT — это основная команда языка SQL, предназначенная для выборки данных из базы данных. Она формирует результирующий набор строк и столбцов на основе определённых условий выборки из одной или нескольких таблиц. Является основой для создания представлений и построения запросов.
Команда SELECT — это SQL-инструкция для извлечения данных из одной или нескольких таблиц базы данных с возможностью фильтрации, группировки и сортировки.
Использование представлений
Представления (views) — это объекты базы данных, основанные на выполнении запроса с помощью команды SELECT. При обращении к представлению происходит динамическое выполнение запроса, записанного в этом представлении, что гарантирует актуальность данных.
Представление хранит текст запроса, а не данные. При изменении данных в исходных таблицах результат представления меняется автоматически при следующем вызове. Представления могут содержать выборки из нескольких таблиц или других представлений, но имена представлений и таблиц должны быть уникальными в базе данных.
Практически это позволяет разграничивать доступ. Администратор может выдать права на представления, а не на таблицы. В представлении можно ограничить видимые столбцы и строки. Такая настройка облегчает управление безопасностью и модификацией данных.
Преимущества использования представлений:
- Настройка прав доступа к данным на уровне представлений, позволяющая скрыть критичные или избыточные поля.
- Возможность изменять структуру данных (например, объединять или фильтровать) без правки исходных таблиц или клиентских приложений.
- Автоматическое получение актуальных данных при каждом обращении к представлению без необходимости повторного составления запроса.
Создание представления, отображающего всех абитуриентов старше 18 лет, осуществляется командой:
CREATE VIEW older18 AS SELECT * FROM abiturient WHERE age > 18;
Команды создания представлений
Представление создаётся с помощью команды CREATE VIEW, в которой указывается текст запроса на языке SQL, как правило, с использованием SELECT.
Команда CREATE VIEW поддерживает необязательные параметры. Один из них — OR REPLACE. Эта инструкция автоматически удаляет предыдущую версию представления с таким названием перед созданием новой. При отсутствии OR REPLACE будет ошибка в случае существования представления с таким именем.
Другой параметр — ALGORITHM. Он задаёт алгоритм формирования данных представления, влияющий на производительность и ограничения изменения данных через представление.
Инструкция WITH CHECK OPTION применяется для представлений, допускающих вставку и обновление данных. Она накладывает автоматическую проверку добавляемых или изменяемых строк на соответствие условию запроса представления, предотвращая нарушение целостности.
Алгоритмы выполнения представлений
Основные алгоритмы выполнения представлений — MERGE и TEMPTABLE.
Алгоритм MERGE работает путём "слияния" определения представления непосредственно в запрос пользователя. То есть исходный SQL-запрос пользователя расширяется запросом представления. Это даёт повышенную производительность, так как оптимизатор видит всю структуру запроса целиком и может применить индексы и другие оптимизации.
Алгоритм TEMPTABLE сначала выполняет запрос из представления и помещает результат во временную таблицу. Затем выполняется основной запрос пользователя над этой временной таблицей. Этот метод допускает более сложные запросы с агрегациями и промежуточными вычислениями, но задействует дополнительное дисковое пространство и время на создание временной таблицы.
Если в CREATE VIEW не указан явно ALGORITHM, СУБД по умолчанию пытается использовать MERGE из-за более высокой производительности.
При использовании алгоритма TEMPTABLE некоторые операции с представлением (например, обновление через представление) невозможны, так как в основе лежит временная таблица, которая не связана напрямую с исходными таблицами.
Добавление данных через представления
Добавление (INSERT) и изменение (UPDATE) данных через представления разрешается не всегда. Для возможности изменения данных через представление необходимо выполнение ряда технических условий.
Первое условие — присутствие одной таблицы в запросе, строки которой один к одному соответствуют строкам представления. Если запрос построен на объединении таблиц (JOIN) и не обеспечивает уникального отображения на одну таблицу в представлении, добавлять или изменять данные нельзя.
Второе условие — поля представления должны быть простыми ссылками на поля таблиц. Использование выражений, функций, агрегатов или вычисляемых полей исключает возможность обновления данных через это представление.
Таким образом, сложные представления с объединениями, агрегатами, группировками не поддерживают вставку или изменение данных без дополнительных механизмов.
Представление applic_male, показывающее все заявления абитуриентов мужского пола:
CREATE VIEW applic_male AS SELECT * FROM application LEFT JOIN abiturient ON application.idabiturient=abiturient.idabiturient WHERE abiturient.gender='male';
Главная таблица для обновления — application, так как она расположена слева в LEFT JOIN. Через такое представление разрешено добавлять и изменять данные именно в таблице application.
Представление count_male_female, считающее количество абитуриентов по полу:
CREATE VIEW count_male_female AS SELECT gender, COUNT(idabiturient) FROM abiturient GROUP BY gender;
Это представление содержит агрегатную функцию COUNT и группировку. Строкам представления не соответствует одна таблица, а только вычисляемые значения. Поэтому вставка и обновление данных через это представление невозможны.
Сравнение алгоритмов MERGE и TEMPTABLE
Алгоритм MERGE обеспечивает наибольшую производительность для запросов к представлениям, так как приводит запрос пользователя и запрос представления к единому выражению, что позволяет оптимизатору использовать индексы и выполнять операции напрямую в таблицах. При построении сложных запросов тип MERGE сокращает время выполнения на 20-50% по сравнению с TEMPTABLE.
Однако MERGE не может применяться, если в запросе есть агрегаты, DISTINCT, GROUP BY, LIMIT или подзапросы в SELECT. В таких ситуациях СУБД автоматически переключается на TEMPTABLE.
Алгоритм TEMPTABLE использует дополнительное дисковое пространство — размер временной таблицы равен количеству извлечённых строк из представления. При больших объёмах данных размер временной таблицы может достигать сотен мегабайт и более, что влияет на производительность.
Выбор правильного алгоритма оптимизирует нагрузку на сервер. Избыточное применение TEMPTABLE ухудшает отзывчивость системы при высоком числе параллельных запросов.
Типичные ошибки и ограничения при работе с представлениями
Частая ошибка — попытка обновить представление, не соответствующее условиям единственной базовой таблицы. Результат — ошибка выполнения или молчаливое игнорирование операции.
Неоднозначное именование представлений и таблиц в одной базе вызывает конфликты. Рекомендуется использовать уникальные имена, чтобы избежать ситуаций, при которых СУБД не может однозначно распарсить запрос.
При использовании WITH CHECK OPTION без учета семантики представления возможна блокировка легитимных изменений в таблицах. Нужно внимательно проектировать условия WHERE и ограничения.
Также при создании представлений с JOIN-операторами часто забывают, что LEFT JOIN меняет права обновления, так как основная изменяемая таблица должна быть слева. Это может неожиданно ограничить функционал представления.
LAST.
Резюме и матрица выбора
Ниже представлена таблица с критериями выбора типа представления и алгоритма выполнения в зависимости от требуемой задачи.
| Требование | Тип представления | Алгоритм | Ограничения и минусы |
|---|---|---|---|
| Необходимо динамическое получение актуальных данных, простой запрос без агрегатов | Простое представление на одну таблицу | MERGE | Высокая производительность, поддержка обновлений |
| Сложные запросы с агрегатами, группировками, LIMIT | Представление с агрегацией и вычисленными полями | TEMPTABLE | Нет поддержки вставки/редактирования, дополнительное дисковое использование |
| Обеспечение безопасности и ограничение доступа к полям или строкам | Фильтрованное или суженное представление | MERGE (если запрос простой) или TEMPTABLE | Возможны ограничения по обновлению, ошибки при нарушении условий WITH CHECK OPTION |
| Обновление данных напрямую через представление | Представление на основе одной таблицы без вычисляемых полей | MERGE | Строгие требования к структуре запроса, отсутствуют агрегаты и JOIN с несколькими таблицами слева |