Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Команда SELECT. Запросы и представления

Использование представлений

Представим, что пользователь создал запрос командой SELECT. Результат виден на экране сразу же. Если в следующий момент времени данные в исходных таблицах были изменены, то этот результат уже не актуален, и запрос нужно создавать снова. Тексты запросов, с которыми приходится очень часто обращаться к базе данных выгодно не писать каждый раз заново, а хранить. Именно для этого существуют представления или view. Иногда еще их называют виртуальными таблицами.

Определение 1

Представление - это объект реляционной базы данных, являющийся результатом выполнения запроса на основе команды SELECT, в момент обращения к представлению.

Таким образом, представление хранит текст запроса и выполняет его в тот момент, когда пользователь обращается к представлению. Поэтому результат представления всегда содержит самые новые данные.

Представления могут выбирать данные из таблиц и из других представлений. Но при этом следует помнить, что имена представлений и таблиц не должны совпадать в рамках всей базы данных.

Преимущества использования представлений:

  1. Дополнительная возможность настройки прав доступа к данным. Можно дать пользователю права не на таблицу, а на представление. А в представлении показывать только отдельные поля и записи.
  2. Возможность менять структуру данных на уровне представлений, не затрагивая таблицы и код приложений.
  3. Автоматический доступ к данным без повторного составления запроса.

Команды создания представлений

Представление создается командой CREATE VIEW и использованием команды SELECT внутри ее.

Пример 1

Если нужно создать представление, которое будет показывать всех абитуриентов в возрасте старше 18 лет, то его текст будет таким:

CREATE VIEW older18 AS SELECT * FROM abiturient;

«Команда SELECT. Запросы и представления» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Команда CREATE VIEW содержит следующие необязательные инструкции:

  • OR REPLACE. Если представление с таким же именем уже существует, что оно будет удалено перед созданием нового. Если эту инструкцию пропустить, то в случае существования представления с таким же именем возникнет сообщение об ошибке.
  • ALGORITHM. Позволяет задать алгоритм создания представления.
  • WITH CHECK OPTION. В некоторые представления можно добавлять данные, а в некоторые нельзя. Это зависит от того, как представление построено. Данная инструкция предназначена для представлений, позволяющих изменять и добавлять данные. Она позволяет провести автоматическую проверку добавляемых строк на соответствие.

Алгоритмы в представлениях

Существует два алгоритма, которые выполняются при обращении к представлению:

  • MERGE;
  • TEMPTABLE.

Для того чтобы понимать разницу между ними, нужно помнить, что пользователь обращается к представлению чаще всего для выполнения какой-либо операции с ним. Например, пользователь хочет использовать представление при построении запроса. Если используется алгоритм MERGE, то содержимое представления заносится напрямую в эту операцию, а после этого операция выполняется. Если используется TEMPTABLE, то результат представления сначала размещается во временной таблице, а потом эта временная таблица используется в требуемой операции. Алгоритм MERGE работает эффективнее, поэтому если алгоритм не определен (UNDEFINED), то по умолчанию СУБД всегда пробует использовать MERGE.

Добавление данных через представление

Не все представления могут использоваться при добавлении данных. Чтобы это было возможно должно выполняться два условия:

  1. Представление, построенное на нескольких таблицах, должно содержать такую таблицу, строки которой как один к одному соответствуют строкам представления. Если такой таблицы нет, то через представление невозможно добавлять данные.
  2. Поля представления не должны содержать выражений, а должны быть простым перечислением полей таблиц.
Пример 2

Построим представление, которое будет показывать заявления всех абитуриентов мужского пола:

CREATE VIEW applic_male SELECT * FROM application LEFT JOIN abiturient ON application.idabiturient=abiturient.idabiturient WHERE abiturient.gender=’male’;

Для данного представления основной является таблица application (так как в операторе LEFT JOIN она находится слева). Следовательно, именно ее можно обновлять через представление.

Пример 3

Построим представление, которое показывает количество абитуриентов каждого пола:

CREATE VIEW count_male_female SELECT gender, count(idabiturient) FROM abiturient GROUP BY gender;

А вот это представление не подходит для добавления данных. В нем нет таблицы, строки которой соответствую строкам представления, и есть вычисляемое поле.

Дата написания статьи: 08.08.2016
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot