В ряде приложений возникает необходимость одновременной обработки данных какой-либо таблицы и одной или нескольких ее копий, создаваемых на время выполнения запроса. Временную копию таблицы можно сформировать, указав имя псевдонима за именем таблицы во фразе FROM. Так, с помощью фразы
FROM Блюда X, Блюда Y, Блюда Z
будут сформированы три копии таблицы Блюда с именами X, Y и Z. В качестве примера соединения таблицы с ней самой сформируем запрос на вывод таких пар блюд таблицы Блюда, в которых совпадает основа, а название первого блюда пары меньше (по алфавиту), чем номер второго блюда пары. Для этого можно создать запрос с одной копией таблицы Блюда (Копия):
SELECT Блюдо, Копия.Блюдо, Основа FROM Блюда, Блюда Копия WHERE Основа =Копия.Основа AND Блюдо < Копия.Блюдо;
или двумя ее копиями (Первая и Вторая):
SELECT Первая.Блюдо, Вторая.Блюдо, Основа FROM Блюда Первая, Блюда Вторая WHERE Первая.Основа = Вторая.Основа AND Первая.Блюдо < Вторая.Блюдо;
Получим результат вида
Первая.Блюдо
Вторая.Блюдо
Основа
Морковь с рисом
Помидоры с луком
Овощи
Морковь с рисом
Салат летний
Овощи
Морковь с рисом
Салат витаминный
Овощи
Помидоры с луком
Салат витаминный
Овощи
Выборка из одной реляц табл с испол для отбора данных простого подзапроса по другой таблице (другим таблицам).
Вложенный подзапрос - это подзапрос, заключенный в круглые скобки и вложенный в WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE фразу. Вложенный подзапрос может содержать в своей WHERE (HAVING) фразе другой вложенный подзапрос и т.д. Вложенный подзапрос создан для того, чтобы при отборе строк таблицы, сформированной основным запросом, можно было использовать данные из других таблиц. Вложенные подзапросы включаются в WHERE (HAVING) фразу с помощью условий IN, EXISTS или одного из условий сравнения ( = | <> | < | <= | > | >= ). Пример: выдать название и статус поставщиков продукта с номером 11, т.е. помидоров.
SELECT Название,Статус FROM Поставщики WHERE ПС IN ( SELECT ПС FROM Поставки WHERE ПР=11);
Название
Статус
СЫТНЫЙ
рынок
УРОЖАЙ
коопторг
ЛЕТО
агрофирма
КОРЮШКА
кооператив
Подзапрос с несколькими уровнями вложенности на том же примере: пусть требуется узнать не поставщиков продукта 11, как это делалось в предыдущих запросах, а поставщиков помидоров, являющихся продуктом с номером 11. Для этого можно дать запрос
SELECT Название, Статус FROM Поставщики WHERE ПС IN (SELECT ПС FROM Поставки WHERE ПР IN (SELECT ПР FROM Продукты WHERE Продукт = 'Помидоры' ));