Главная страница
Содержание
 
 

Подчиненный запрос

SQL предполагает возможность встраивания подзапроса в текст запроса с возможностью обращения к его полям по заданному псевдониму. Псевдоним может быть задан ключевым словом AS. Рассмотрим пример использования подчиненных запросов, а также объединений.

Пример 5.

Надо: Для студентов из отношения R1(пример1) определить групп из отношения R2(пример1): вывести номер зачетки и название группы. Если группа не определена вывести «Группа не известна». Добавить в выборку пары номер зачетки и группа, соответствующие тем студентам, которые обучались в двух и более группах.

Решение:SELECT r1.Номер_зк, iif(r2.Группа is null;”Группа не определена”; r2.Группа) FROM r1 LEFT JOIN r2 on (r1.Номер_зк = r2.Номер_зк)UNIONSELECTr2.Номер_зк, r2.Группа FROM r2 WHERE r2.Номер_зк in (SELECT r2.Номер_зк FROM r2 GROUP BY r2.Номер_зк HAVING COUNT(r2.Группа) > 1)

Разберем приведенный пример подробнее. Запрос можно рассматривать как объединение результатов выполнения двух запросов (с помощью union). Первый из них использует левое внешнее объединение, так как в отношении r2 присутствуют не все номера зачетных книжек, которые определены в r1. Во втором используются подзапрос в секции WHERE для определения тех номеров зачеток, по которым есть два и более кортежа в отношении r2. Подчиненный запрос в данном случае возвращает множество номеров зачетных книжек, а оператор in возвращает TRUE только для тех номеров, которые принадлежат набору, который возвращает подзапрос.