Лекция 4. Type I, Type II. Пользовательские представления
**1-ый учебный вопрос: Вложенные запросы типа 1 (Type I) и типа 2 (Type II).**
Вложенными запросами называются комбинированные операторы выбора, вставки/удаления/добавления данных, которые содержат в себе несколько подзапросов (внешние и внутренние – outer и inner).
Являются довольно изящным и простым решением при оптимизации работы БД. Чаще всего используются при вставке (INSERT), удалении (DELETE) или же изменении (UPDATE) большого количества значений в одной таблице на основании данных другой таблицы. Также, активно применяются при конструировании сложных операторов выборки из двух таблиц в тех случаях, когда оператор JOIN не подходит для решения задачи.
Особенности вложенного запроса Type I:
- в случае комбинации двух запросов оператора SELECT используется конструкция SQL IN;
- запускается на исполнение только один раз (не допускает циклической обработки);
- при исполнении первым всегда выполняется внутренний запрос (inner);
Для демонстрации сути вложенного запроса первого типа приведем пару таблиц реляционной модели данных, рис. 1.
![Рисунок 1. Демонстрационные таблицы для вложенного запроса.](/uploads/msu_image/image/10176/1.jpg)
На основании структуры приведенных в рис. 1 таблиц, составим вложенный запрос и покажем результат вложенного запроса, который покажет, какие продукты поставляет в магазин поставщик, название которого начинается с Color (рис. 2).
![Рисунок 2. Вложенный запрос Type I](/uploads/msu_image/image/10177/2.jpg)
2. Особенности вложенного запроса Type II:
- конструкция IN не используется; как правило, чаще всего используется конструкция EXISTS (включает) или NOT EXISTS (не включает);
- при исполнении первым всегда выполняется последний запрос в “дереве”;
При вложенных запросах такого типа чаще всего применяются комбинации SELECT – INSERT INTO или SELECT – UPDATE или SELECT – DELETE. Их применение наиболее целесообразно, например при копировании или переносе таблиц. Структура запроса показана в примере на рис. 3.
![Рисунок 3. Вложенный запрос Type II](/uploads/msu_image/image/10178/3.jpg)
**2-ой учебный вопрос: Пользовательские представления (view).**
Представление – это виртуальная (логическая) таблица, представляющая собой поименованный запрос, который будет подставлен как подзапрос при использовании представления. В отличие от обычных таблиц реляционных баз данных, представление не является самостоятельной частью набора данных, хранящегося в базе. Содержимое представления динамически вычисляется на основании данных, находящихся в реальных таблицах. Изменение данных в реальной таблице базы данных немедленно отражается в содержимом всех представлений, построенных на основании этой таблицы.
Области применения представлений:
1. Представления скрывают от прикладной программы сложность запросов и саму структуру таблиц БД.
2. Использование представлений позволяет отделить прикладную схему представления данных от схемы хранения. Проще говоря, изменение программы не затрагивает физические таблицы, а изменение физической структуры таблиц не требует корректировки программы.
3. С помощью представлений обеспечивается ещё один уровень защиты данных. Пользователю могут предоставляться права только на представление, благодаря чему он не будет иметь доступа к данным, находящимся в тех же таблицах, но не предназначенных для него.
4. Поскольку SQL-запрос, выбирающий данные представления, зафиксирован на момент его создания, СУБД получает возможность применить к этому запросу оптимизацию или предварительную компиляцию.
С помощью представлений можно хранить:
1. Подмножество записей из таблицы БД, отвечающее определённым условиям.
2. Подмножество столбцов таблицы БД, требуемое программой.
3. Результат обработки данных таблицы определёнными операциями.
4. Результат объединения (join) нескольких таблиц.
5. Результат слияния нескольких таблиц с одинаковыми именами и типами полей.
6. Результат группировки записей в таблице.
7. Практически любую комбинацию вышеперечисленных возможностей.