кодесурса
«SQL

Коррелированные подзапросы SQL

script1adsense2code
script1adsense3code

Коррелированные подзапросы

Коррелированные подзапросы SQL используются для выбора данных из таблицы, на которую ссылается внешний запрос. Подзапрос известен как коррелированный, потому что подзапрос связан с внешним запросом. В запросах этого типа необходимо использовать псевдоним таблицы (также называемый именем корреляции), чтобы указать, какую ссылку на таблицу следует использовать.

Псевдоним - это имя питомца таблицы, которое вызывается путем помещения сразу после имени таблицы в предложении FROM. Это подходит, когда кто-то хочет получить информацию из двух отдельных таблиц.

Пример: SQL-коррелированные подзапросы

Следующие коррелированные подзапросы извлекают ord_num, ord_amount, cust_code и agent_code из таблицы order ( 'a' и 'b' - псевдонимы таблицы заказов и агентов) со следующими условиями:

код агента в таблице заказов должен совпадать с кодом агента в таблице агентов, а имя агента в таблице агентов должно быть Alex ,

можно использовать следующий оператор SQL:

Пример таблицы: заказы


Пример таблицы: агенты


Код SQL:

SELECT a.ord_num,a.ord_amount,a.cust_code,a.agent_code
FROM orders a
WHERE a.agent_code=(
SELECT b.agent_code
FROM agents b WHERE b.agent_name='Alex');

Выход:

 ORD_NUM ORD_AMOUNT CUST_CODE AGENT_CODE
---------- ---------- ---------- ----------
    200127 2500 C00015 A003
    200100 1000 C00015 A003

Внутренняя часть вышеприведенного запроса возвращает код агента A003.

Упрощенная форма приведенного выше кода:

Код SQL:

SELECT a.ord_num,a.ord_amount,a.cust_code,a.agent_code
FROM orders a
WHERE a.agent_code='A003';

Наглядная презентация:

«SQL

Использование EXISTS с коррелированным подзапросом

Мы уже использовали оператор EXISTS для проверки существования результата подзапроса. Оператор EXISTS также может использоваться в коррелированных подзапросах. Используя EXISTS, в следующем запросе отображаются employee_id, manager_id, first_name и last_name тех сотрудников, которые управляют другими сотрудниками.

Код SQL:

SELECT employee_id, manager_id, first_name, last_name
FROM employees a
WHERE EXISTS
(SELECT employee_id
FROM employees b
WHERE 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 Payam Kaufling
        123 100 Шанта Фольман
        124 100 Кевин Моргос
        145 100 Джон Рассел
        146 100 Карен Партнерс
        147 100 Альберто Эрразуриз
        148 100 Джеральд Кэмбро
        149 100 Елени Злоткей
        201 100 Михаэль Хартштейн
        205 101 Шелли Хиггинс

Иллюстрированная презентация:

«SQL:

Использование NOT EXISTS с коррелированным подзапросом

NOT EXISTS логически противоположен оператору EXISTS. NOT EXISTS используется, когда нам нужно проверить, не существуют ли строки в результатах, возвращаемых подзапросом. Используя NOT EXISTS, в следующем запросе отображаются employee_id, manager_id, first_name и last_name тех сотрудников, которые не имеют статуса менеджера. Этот запрос противоположен предыдущему.

Код SQL:

SELECT employee_id, manager_id, first_name, last_name
FROM employees a
WHERE NOT EXISTS
(SELECT employee_id
FROM employees b
WHERE 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

Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.

Предыдущая: несколько подзапросов строк и столбцов
Далее: Вложенные подзапросы

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code