Язык SQL позволяет строить вложенные запросы, т.е. такие запросы, которые в условиях используют результаты работы другого запроса. Например, нам известна фамилия продавца (пусть это «Курочкин»), но не известен его номер, а нам необходимо знать все заказы этого продавца. Этот запрос можно выполнить в два этапа:
- сначала найти по таблице Salespeople код продавца (выполнив запрос: SELECT snum FROM Salespeople WHERE sname = "Курочкин");
- затем, по коду продавца (код продавца с фамилией «Курочкин» равен ‘0001’) выбрать из таблицы Orders все его заказы (выполнив запрос: SELECT * FROM Orders WHERE snum=’0001’).
Такой способ получения результата не очень удобный. Добиться аналогичного результата можно другим способом – построением вложенного запроса. Для этого в Конструкторе в строке «Условия запроса» введем запрос на поиск кода продавца. На рис.39. показано как выглядит вложенный запрос в Конструкторе.
Вложенный запрос
Рис.39. Построение вложенного запроса в строке «Условие отбора».
Текст SQL-запроса с вложенным запросом показан ниже:
SELECT *
FROM Orders
WHERE snum=(SELECT snum FROM Salespeople WHERE sname = "Курочкин")
Важным условием корректности исполнения вложенных запросов, является однозначность результата «внутреннего» (вложенного) запроса. В нашем случае мы имеем однозначный результат внутреннего запроса ( код продавца «Курочкина» равен ‘0001’).
Результат выполнения вложенного запроса показан на рис. 40.
Рис.40. Результат SQL-запроса с вложенным запросом
Более сложный вложенный запрос, построенный на основании предыдущего запроса, может выглядеть так:
SELECT orders.onum as НОМЕР, orders.odate as ДАТА, Salespeople.sname as ФАМИЛИЯ,
price.pname as МАРКА, orders.amount as ЦЕНА
FROM Salespeople INNER JOIN (price INNER JOIN orders ON
price.pnum = orders.pnun) ON Salespeople.snum = orders.snum
WHERE Salespeople.snum =(SELECT snum FROM Salespeople WHERE sname = "Курочкин");
Результат этого запроса, который использует несколько таблиц (Orders, Salespeople и Price) и содержит встроенный запрос, который по фамилии "Курочкин" определяет код продавца показан на рис. 41.
Рис.41. Результат сложного запроса с несколькими таблицами и встроенным запросом.