Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб. раб_4.doc
Скачиваний:
5
Добавлен:
19.11.2018
Размер:
83.46 Кб
Скачать

Подчиненные запросы — резюме

Подчиненные запросы имеют следующие особенности:

  • подчиненный запрос является «запросом в запросе». Такие запросы содержатся в одном из условий отбора в предложении WHERE либо HAVING;

  • когда подчиненный запрос содержится в предложении WHERE, его результаты используются для отбора отдельных строк, данные из которых заносятся в таблицу результатов запроса;

  • когда подчиненный запрос содержится в предложении HAVING, его результаты используются для отбора групп строк, данные из которых заносятся в таблицу результатов запроса;

  • подчиненные запросы могут иметь несколько уровней вложенности;

  • при сравнении с результатом подчиненного запроса проверяемое значение сравнивается посредством одного из операторов сравнения с единственным значением, которое возвращается подчиненным запросом;

  • при проверке на принадлежность результатам подчиненного запроса (предикат IN) значение выражения проверяется на равенство одному из множеств значений, которые возвращаются подчиненным запросом;

  • проверка на существование (предикат EXISTS) позволяет выяснить, возвращает ли подчиненный запрос какие-нибудь значения.

  • в подчиненном запросе можно использовать внешние ссылки на таблицы любого запроса, внутри которого он находится; такая ссылка связывает подчиненный запрос с текущей строкой данного запроса.

Далее приведен окончательный вариант правил выполнения SQL-запроса на выборку с учетом подчиненных запросов. Эти правила полностью определяют результаты запроса на выборку, генерируемые инструкцией SELECT.

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

1. Если запрос представляет собой запрос на объединение (UNION) инструкцией SELECT, для каждой из этих инструкций выполнить действия 2—7 и получить отдельную таблицу результатов.

2. Сформировать произведение таблиц, перечисленных в предложении FROM. Если в предложении FROM указана только одна таблица, то произведением будет она сама.

3. Если имеется предложение WHERE, применить заданное в нем условие отбора к каждой строке таблицы произведения и оставить в ней только те строки, для которых это условие выполняется, то есть имеет значение TRUE; строки, для которых условие отбора имеет значение FALSE или NULL, — отбросить. Если в предложении WHERE содержится подчиненный запрос, то он выполняется для каждой проверяемой строки.

4. Если имеется предложение GROUP BY, разделить строки, оставшиеся в таблице произведения, на группы таким образом, чтобы в каждой группе строки имели одинаковые значения во всех столбцах группировки.

5. Если имеется предложение HAVING, применить заданное в нем условие отбора к каждой группе строк и оставить в таблице произведения только те группы, для которых это условие выполняется, то есть имеет значение TRUE; группы, для которых условие отбора имеет значение FALSE или NULL, — отбросить. Если в предложении HAVING содержится подчиненный запрос, то он выполняется для каждой проверяемой группы строк.

6. Для каждой из оставшихся строк (или для каждой группы строк) вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса. При любой ссылке на столбец берется значение столбца для текущей строки (или группы строк). В качестве аргумента статистической функции используются значения столбца из всех строк, входящих в группу, если указано предложение GROUP BY; в противном случае используются значения столбца из всех строк таблицы результатов.

7. Если указан предикат DISTINCT, удалить из таблицы результатов запроса все повторяющиеся строки.

8. Если запрос является запросом на объединение (UNION) инструкций SELECT, объединить результаты выполнения отдельных инструкций в одну таблицу результатов запроса. Удалить из нее повторяющиеся строки, если не указан предикат ALL.

9. Если имеется предложение ORDER BY, отсортировать результаты запроса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]