Коррелированные подзапросы SQL
Коррелированные подзапросы
Коррелированные подзапросы 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';
Наглядная презентация:
Использование 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 Шелли Хиггинс
Иллюстрированная презентация:
Использование 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, практика, решение
- SQL Получить данные из таблиц [33 Упражнения]
- Булевы и реляционные операторы SQL [12 упражнений]
- Подстановочные знаки SQL и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ И СОРТИРОВКА в базе данных персонала [38 упражнений]
- SQL СОЕДИНЯЕТ
- SQL ПОДПИСИ
- SQL Union [9 упражнений]
- SQL View [16 упражнений]
- Управление учетными записями пользователей SQL [16 упражнение]
- База данных фильмов
- ОСНОВНЫЕ запросы к базе данных фильмов [10 упражнений]
- ПОДПИСКИ на фильм База данных [16 упражнений]
- ПРИСОЕДИНЯЕТСЯ к базе данных фильма [24 упражнения]
- Футбольная база
- Вступление
- ОСНОВНЫЕ запросы по футболу базы данных [29 упражнений]
- ПОДПИСКИ по футбольной базе данных [33 упражнения]
- База данных больницы
- База данных сотрудников
- ОСНОВНЫЕ запросы к базе данных сотрудников [115 упражнений]
- БРОНИРОВАНИЕ на сотрудника База данных [77 Упражнения]
- Еще не все!
Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.
Предыдущая: несколько подзапросов строк и столбцов
Далее: Вложенные подзапросы
Новый контент: Composer: менеджер зависимостей для PHP , R программирования