Лекция 10. Запросы. Подзапросы
10.1. 3апросы, использующие соединения
Пример 6.13. Простое эквисоединение.
Выдать все комбинации информации о таких поставщиках и деталях, которые
размещены в одном и том же городе:
Пример 6.14. Соединение с дополнительным условием.
Выдать все комбинации информации о поставщиках и деталях, такие, что
рассматриваемые поставщики и детали “соразмещены”. Опустить при этом
поставщиков с состоянием 20.
10.2.Подзапросы
Подзапросы представляют собой вложенные предложения SELECT .
Именно такая возможность позволила назвать язык SQL структурированным.
Пример6.15 . Выдать фамилии поставщиков, поставляющих детали Р2
10.3. Подзапросы с несколькими уровнями вложения
Пример 6.16 . Выдать имена поставщиков, поставляющих красные детали.
10.4. Коррелированный подзапрос
Пример 6.17. Выдать имена поставщиков, которые поставляют деталь P2
Пример 6.14. Соединение с дополнительным условием. Выдать все комбинации информации о поставщиках и деталях, такие, что рассматриваемые поставщи ки и детали “соразмещены”. Опустить при этом поставщиков с состоянием 20:
SELECT *
FROM S, Р
WHERE S .ГОРОД = Р.ГОРОД
AND S .СОСТОЯНИЕ
Результат: НОМЕР_ПОСТАВЩИКА ИМЯ СОСТОЯНИЕ S .ГОРО Д
S2 Дима 10 Пермь
S2 Дима 10 Пермь
S3 Боря 30 Пермь
S3 Боря 30 Пермь
НОМЕР_ДЕТАЛИ НАЗВАНИЕ ЦВЕТ ВЕС Р.ГОРОД
Р2 Болт Зеленый 17 Пермь
Р5 Кулачок Голубой 12 Пермь
Р2 Болт Зеленый 17 Пермь
Р5 Кулачок Голубой 12 Пермь
10.2.Подзапросы
Подзапросы представляют собой вложенные предложения SELECT .
Пример 6.15. Выдать фамилии поставщиков, поставляющих детали Р2:
SELECT ИМЯ
FROM S
WHERE НОМЕР_ПОСТАВЩИКА IN
( SELECT НОМЕР_ПОСТАВЩИКА
FROM SP
WHERE НОМЕР_ДЕТАЛИ = ‘ P 2’);
Результат: ИМЯ
Саша
Дима
Боря
Коля
Этот подзапрос возвращает множество поставщиков, поставляющих деталь Р2
S1, S2, S3, S4. Поэтому первоначальный запрос эквивалентен простому запросу :
SELECT ФАМИЛИЯ
FROM S
WHERE НОМЕР _ ПОСТАВЩИКА IN (‘S1’,’S2’,’S3’,’S4’)
Номер поставщика здесь задан неявно. Для явного задания необходимо указать
имя таблицы.
SELECT S .ИМЯ
FROM S
WHERE S. НОМЕР _ ПОСТАВЩИКА IN
( SELECT SP .НОМЕР_ПОСТАВЩИКА
FROM SP
WHERE SP.HOMEP_ ДЕТАЛИ ='P2')
Этот же подзапрос может быть выражен и соединением:
SELECT S.ИМЯ
FROM S, SP
WHERE S.HOМЕР_ПОСТАВЩИКА = SP.HOMEP_ПОСТАВЩИКА
AND SP.HOMEP_ДЕТАЛИ = 'P2'