3.3.2. Простые вложенные подзапросы
Простые вложенные подзапросы используются для представления множества значений,
исследование которых должно осуществляться в каком-либо предикате IN, что
иллюстрируется в следующем примере: выдать название и статус поставщиков
продукта с номером 11, т.е. помидоров.
|
Результат: |
SELECT Название, Статус
FROM Поставщики
WHERE ПС IN
( SELECT ПС
FROM Поставки
WHERE ПР = 11 );
|
Название |
Статус |
СЫТНЫЙ |
рынок |
УРОЖАЙ |
коопторг |
ЛЕТО |
агрофирма |
КОРЮШКА |
кооператив |
|
Как уже отмечалось в п.3.3.1,
при обработке полного запроса система выполняет прежде всего вложенный
подзапрос. Этот подзапрос выдает множество номеров поставщиков, которые
поставляют продукт с кодом ПР = 11, а именно множество (1, 5, 6, 8). Поэтому
первоначальный запрос эквивалентен такому простому запросу:
SELECT Название, Статус
FROM Поставщики
WHERE ПС IN (1, 5, 6, 8);
Подзапрос с несколькими уровнями вложенности можно проиллюстрировать на
том же примере. Пусть требуется узнать не поставщиков продукта 11, как
это делалось в предыдущих запросах, а поставщиков помидоров, являющихся
продуктом с номером 11. Для этого можно дать запрос
SELECT Название, Статус
FROM Поставщики
WHERE ПС IN
( SELECT ПС
FROM Поставки
WHERE ПР IN
( SELECT ПР
FROM Продукты
WHERE Продукт = 'Помидоры' ));
В данном случае результатом самого внутреннего подзапроса является только
одно значение (11). Как уже было показано выше, подзапрос следующего уровня
в свою очередь дает в результате множество (1, 5, 6, 8). Последний, самый
внешний SELECT, вычисляет приведенный выше окончательный результат. Вообще
допускается любая глубина вложенности подзапросов.
Тот же результат можно получить с помощью соединения
SELECT Название, Статус
FROM Поставщики, Поставки, Продукты
WHERE Поставщики.ПС = Поставки.ПС
AND Поставки.ПР = Продукты.ПР
AND Продукт = 'Помидоры';
При выполнении этого компактного запроса система должна одновременно обрабатывать
данные из трех таблиц, тогда как в предыдущем примере эти таблицы обрабатываются
поочередно. Естественно, что для их реализации тебуются различные ресурсы
памяти и времени, однако этого невозможно ощутить при работе с ограниченным
объемом данных в иллюстративной базе ПАНСИОН.
3.3.1
| Содержание
| 3.3.3