- Коррелированные подзапросы Коррелированные подзапросы SQL используются для выбора данных из таблицы, на которую имеется ссылка во внешнем запросе. Подзапрос известен как коррелированный, потому что подзапрос связан с внешним запросом. В этом типе запросов должен использоваться псевдоним таблицы (также называемый корреляционным именем), чтобы указать, какая ссылка на таблицу должна использоваться. Псевдоним — это домашнее имя таблицы, которая создается about, поставив сразу после имени таблицы в предложении FROM. Это удобно, когда кто-то хочет получить информацию из двух отдельных таблиц. Пример: коррелированные подзапросы SQL Следующие коррелированные подзапросы извлекают ord_num, ord_amount, cust_code и agent_code из таблицы заказов (‘a’ и ‘b’ — псевдонимы заказов и таблицы агентов) со следующими условиями — agent_code of orders таблица должна иметь тот же код_агента таблицы агентов и имя_агента таблицы агентов должно быть Alex , можно использовать следующий оператор SQL: Пример таблицы: заказы Пример таблицы: агенты Код SQL: ВЫБРАТЬ a.ord_num, a.ord_amount, a.cust_code, a.agent_codeFROM заказы aWHERE a.agent_code = (SELECT b.agent_codeFROM agent b WHERE b.agent_name = 'Alex'); Вывод: ORD_NUM ORD_AMOUNT CUST_CODE AGENT_CODE ---------- ---------- ---------- ---------- 200127 2500 C00015 A003 200100 1000 C00015 A003 Внутренняя часть Приведенный выше запрос возвращает «код_агента» A003. Упрощенная форма приведенного выше кода: Код SQL: ВЫБРАТЬ a.ord_num, a.ord_amount, a.cust_code, a.agent_codeFROM заказы a ГДЕ a.agent_code = 'A003'; Графическая презентация: Использование EXISTS с коррелированным подзапросом Мы уже использовали оператор EXISTS для проверки существования результата подзапроса. Оператор EXISTS также может использоваться в коррелированных подзапросах. Используя EXISTS, следующий запрос отображает employee_id, manager_id, first_name и last_name тех сотрудников, которые управляют другими сотрудниками. Код SQL: ВЫБЕРИТЕ employee_id, manager_id, first_name, last_nameFROM сотрудников ГДЕ ИМЕЕТСЯ (SELECT employee_idFROM employee b ГДЕ b.manager_id = a. employee_id) Пример таблицы: сотрудники Вывод: EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME ----------- ---------- -------------------- - ------------- 100 Стивен Кинг 101 100 Нина Кочхар 102 100 Лекс Де Хаан 103 102 Александр Хунольд 108 101 Нэнси Гринберг 114 100 Ден Рафаэли 120 100 Мэтью Вайс 121 100 Адам Фрипп 122 100 Пайам Кауфлинг 123 100 Шанта Воллман 124 100 Кевин Мургос 145 100 Джон Рассел 146 100 Карен Партнерс 147 100 Альберто Эрразурис 148 100 Джеральд Камбро 149 100 Элени Злотки 201 100 Майкл Хартштейн 205 101 Шелли Хиггинс Иллюстрированный Презентация: Использование NOT EXISTS с коррелированным подзапросом NOT EXISTS логически противоположен оператору EXISTS. NOT EXISTS используется, когда нам нужно проверить, не существуют ли строки в результатах, возвращаемых подзапросом. Используя NOT EXISTS, следующий запрос отображает employee_id, manager_id, first_name и last_name тех сотрудников, у которых нет статуса менеджера. Этот запрос противоположен предыдущему. Код SQL: ВЫБЕРИТЕ employee_id, manager_id, first_name, last_nameFROM сотрудников, ГДЕ НЕ СУЩЕСТВУЕТ (SELECT employee_idFROM сотрудники bWHERE b.manager_id = a.employee_id); Пример таблицы: сотрудники Вывод: EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME ----------- ---------- ------------- ------- -------------- 104 103 Брюс Эрнст 105 103 Дэвид Остин 106 103 Валли Патабалла 107 103 Диана Лоренц 109 108 Дэниел Фэвиет 110 108 Джон Чен 111 108 Исмаэль Скиарра 112 108 Хосе Мануэль Урман 113 108 Луис Попп 115 114 Александр Ху 116 114 Шелли Байда 117 114 Сигал Тобиас 118 114 Гай Химуро 119 114 Карен Кольменарес 125 120 Джулия Найер 126 120 Ирэн Миккилинени 127 120 Джеймс Лэндри 128 120 Стивен Маркл 129 121 Лаура Биссо 130 121 Може Аткинсон 131 121 Джеймс Марлоу ............... Наглядное представление: См. нашу базу данных моделей Практические упражнения SQL Упражнения SQL, практика, решение SQL Получение данных из таблиц [33 упражнения] Логические операторы SQL и реляционные операторы [ 12 упражнений] Подстановочные знаки SQL и специальные операторы [22 упражнения] Агрегатные функции SQL [25 упражнений] Вывод запроса форматирования SQL [10 упражнений] SQL-запросы к нескольким таблицам [7 упражнений] ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений] SQL JOINS SQL JOINS [29 упражнений] SQL JOINS в базе данных HR [27 упражнений] ПОДзапросы SQL ПОДзапросы SQL [39 упражнений] ПОДзапросы SQL в базе данных HR [55 упражнений] SQL Union [9 упражнений] Просмотр SQL [16 упражнений] Управление учетными записями пользователей SQL [16 упражнений] База данных фильмов БАЗОВЫЕ запросы к базе данных фильмов [10 E xercises] ПОДПРОСЫ в базе данных фильмов [16 упражнений] ПРИСОЕДИНЯЕТСЯ к базе данных фильмов [24 упражнения] Футбол База данных Введение БАЗОВЫЕ запросы к базе данных футбола [29 упражнений] ПОДзапросы к базе данных футбола [33 упражнения ] ПОДКЛЮЧАЕТ запросы к базе данных футбола [61 упражнения] База данных больниц Введение BASIC, SUBQUERIES и JOINS [39 упражнений] База данных сотрудников БАЗОВЫЕ запросы к базе данных сотрудников [115 упражнений] ПОДзапросы к базе данных сотрудников [77 упражнений] Еще не все! Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.
- Использование EXISTS с коррелированным подзапросом
- Использование NOT EXISTS с коррелированным подзапросом
Коррелированные подзапросы
Коррелированные подзапросы SQL используются для выбора данных из таблицы, на которую имеется ссылка во внешнем запросе. Подзапрос известен как коррелированный, потому что подзапрос связан с внешним запросом. В этом типе запросов должен использоваться псевдоним таблицы (также называемый корреляционным именем), чтобы указать, какая ссылка на таблицу должна использоваться.
Псевдоним — это домашнее имя таблицы, которая создается about, поставив сразу после имени таблицы в предложении FROM. Это удобно, когда кто-то хочет получить информацию из двух отдельных таблиц.
Пример: коррелированные подзапросы SQL
Следующие коррелированные подзапросы извлекают ord_num, ord_amount, cust_code и agent_code из таблицы заказов ( ‘a’ и ‘b’ — псевдонимы заказов и таблицы агентов) со следующими условиями —
agent_code of orders таблица должна иметь тот же код_агента таблицы агентов и имя_агента таблицы агентов должно быть Alex ,
можно использовать следующий оператор SQL:
Пример таблицы: заказы
Пример таблицы: агенты
Код SQL:
ВЫБРАТЬ a.ord_num, a.ord_amount, a.cust_code, a.agent_codeFROM заказы aWHERE a.agent_code = (SELECT b.agent_codeFROM agent b WHERE b.agent_name = 'Alex');
Вывод:
ORD_NUM ORD_AMOUNT CUST_CODE AGENT_CODE ---------- ---------- ---------- ---------- 200127 2500 C00015 A003 200100 1000 C00015 A003
Внутренняя часть Приведенный выше запрос возвращает «код_агента» A003.
Упрощенная форма приведенного выше кода:
Код SQL:
ВЫБРАТЬ a.ord_num, a.ord_amount, a.cust_code, a.agent_codeFROM заказы a ГДЕ a.agent_code = 'A003';
Графическая презентация:
Использование EXISTS с коррелированным подзапросом
Мы уже использовали оператор EXISTS для проверки существования результата подзапроса. Оператор EXISTS также может использоваться в коррелированных подзапросах. Используя EXISTS, следующий запрос отображает employee_id, manager_id, first_name и last_name тех сотрудников, которые управляют другими сотрудниками.
Код SQL:
ВЫБЕРИТЕ employee_id, manager_id, first_name, last_nameFROM сотрудников ГДЕ ИМЕЕТСЯ (SELECT employee_idFROM employee b ГДЕ b.manager_id = a. employee_id)
Пример таблицы: сотрудники
Вывод:
EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME ----------- ---------- -------------------- - ------------- 100 Стивен Кинг 101 100 Нина Кочхар 102 100 Лекс Де Хаан 103 102 Александр Хунольд 108 101 Нэнси Гринберг 114 100 Ден Рафаэли 120 100 Мэтью Вайс 121 100 Адам Фрипп 122 100 Пайам Кауфлинг 123 100 Шанта Воллман 124 100 Кевин Мургос 145 100 Джон Рассел 146 100 Карен Партнерс 147 100 Альберто Эрразурис 148 100 Джеральд Камбро 149 100 Элени Злотки 201 100 Майкл Хартштейн 205 101 Шелли Хиггинс
Иллюстрированный Презентация:
Использование NOT EXISTS с коррелированным подзапросом
NOT EXISTS логически противоположен оператору EXISTS. NOT EXISTS используется, когда нам нужно проверить, не существуют ли строки в результатах, возвращаемых подзапросом. Используя NOT EXISTS, следующий запрос отображает employee_id, manager_id, first_name и last_name тех сотрудников, у которых нет статуса менеджера. Этот запрос противоположен предыдущему.
Код SQL:
ВЫБЕРИТЕ employee_id, manager_id, first_name, last_nameFROM сотрудников, ГДЕ НЕ СУЩЕСТВУЕТ (SELECT employee_idFROM сотрудники bWHERE b.manager_id = a.employee_id);
Пример таблицы: сотрудники
Вывод:
EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME ----------- ---------- ------------- ------- -------------- 104 103 Брюс Эрнст 105 103 Дэвид Остин 106 103 Валли Патабалла 107 103 Диана Лоренц 109 108 Дэниел Фэвиет 110 108 Джон Чен 111 108 Исмаэль Скиарра 112 108 Хосе Мануэль Урман 113 108 Луис Попп 115 114 Александр Ху 116 114 Шелли Байда 117 114 Сигал Тобиас 118 114 Гай Химуро 119 114 Карен Кольменарес 125 120 Джулия Найер 126 120 Ирэн Миккилинени 127 120 Джеймс Лэндри 128 120 Стивен Маркл 129 121 Лаура Биссо 130 121 Може Аткинсон 131 121 Джеймс Марлоу ...............
Наглядное представление:
См. нашу базу данных моделей
Практические упражнения SQL
- Упражнения SQL, практика, решение
- SQL Получение данных из таблиц [33 упражнения]
- Логические операторы SQL и реляционные операторы [ 12 упражнений]
- Подстановочные знаки SQL и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений]
- SQL JOINS
- SQL JOINS [29 упражнений]
- SQL JOINS в базе данных HR [27 упражнений]
- ПОДзапросы SQL
- ПОДзапросы SQL [39 упражнений]
- ПОДзапросы SQL в базе данных HR [55 упражнений]
- SQL Union [9 упражнений]
- Просмотр SQL [16 упражнений]
- Управление учетными записями пользователей SQL [16 упражнений]
- База данных фильмов
- БАЗОВЫЕ запросы к базе данных фильмов [10 E xercises]
- ПОДПРОСЫ в базе данных фильмов [16 упражнений]
- ПРИСОЕДИНЯЕТСЯ к базе данных фильмов [24 упражнения]
- Футбол База данных
- Введение
- БАЗОВЫЕ запросы к базе данных футбола [29 упражнений]
- ПОДзапросы к базе данных футбола [33 упражнения ]
- ПОДКЛЮЧАЕТ запросы к базе данных футбола [61 упражнения]
- База данных больниц
- Введение
- BASIC, SUBQUERIES и JOINS [39 упражнений]
- База данных сотрудников
- БАЗОВЫЕ запросы к базе данных сотрудников [115 упражнений]
- ПОДзапросы к базе данных сотрудников [77 упражнений]
- Еще не все!
Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.