logo

Корельовані підзапити SQL

У SQL корельований підзапит — це підзапит, який посилається на стовпець із зовнішнього запиту. Підзапит виконується повторно для кожного рядка зовнішнього запиту, використовуючи значення з поточного рядка для виконання підзапиту. Результат підзапиту потім використовується для оцінки зовнішнього запиту.

Корельовані підзапити використовуються для обробки рядків за рядками. Кожен підзапит виконується один раз для кожного рядка зовнішнього запиту.



Корельований підзапит оцінюється один раз для кожного рядка, обробленого батьківським оператором. Батьківське твердження може бути a ВИБРАТИ , ОНОВЛЕННЯ , або ВИДАЛИТИ заява.

Синтаксис:

ВИБРАТИ стовпець1, стовпець2, ….

З табл.1 зовнішня



Оператор WHERE стовпець1

(ВИБРАТИ стовпець1, стовпець2

З таблиці2



WHERE вираз1 =

зовнішній.expr2);

Корельований підзапит — це один із способів читання кожного рядка в таблиці та порівняння значень у кожному рядку з пов’язаними даними. Він використовується щоразу, коли підзапит повинен повернути інший результат або набір результатів для кожного рядка-кандидата, який розглядається основним запитом. Іншими словами, ви можете використовувати корельований підзапит, щоб відповісти на складне запитання, відповідь на який залежить від значення в кожному рядку, обробленому батьківським оператором.

Вкладені підзапити проти корельованих підзапитів

Зі звичайним вкладеним підзапитом внутрішній ВИБРАТИ запит виконується спочатку і виконується один раз, повертаючи значення, які будуть використані в основному запиті. Корельований підзапит, однак, виконується один раз для кожного рядка-кандидата, який розглядається зовнішнім запитом. Іншими словами, внутрішній запит керується зовнішнім запитом.

ПРИМІТКА: Ви також можете використовувати БУДЬ-ЯКИЙ і ВСЕ оператор у корельованому підзапиті. ПРИКЛАД корельованих підзапитів: Знайдіть усіх працівників, які отримують більше середньої зарплати у своєму відділі.

Запит:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(ВИБЕРІТЬ СРЕДНЮ (зарплату) FROM співробітників WHERE department_id = outer.department_id групувати за department_id);>

Інше використання кореляції в ОНОВЛЕННЯ і ВИДАЛИТИ

КОРЕЛЯЦІЙНЕ ОНОВЛЕННЯ

UPDATE table1 alias1  SET column = (SELECT expression   FROM table2 alias2  WHERE alias1.column =  alias2.column);>

Використовуйте корельований підзапит, щоб оновлювати рядки в одній таблиці на основі рядків з іншої таблиці.

КОРЕЛЯЦІЙНЕ ВИДАЛЕННЯ

DELETE FROM table1 alias1  WHERE column1 operator  (SELECT expression  FROM table2 alias2  WHERE alias1.column = alias2.column);>

Використовуйте корельований підзапит, щоб видалити рядки в одній таблиці на основі рядків з іншої таблиці.

java аналізує рядок до int

Використання оператора EXISTS

Оператор EXISTS перевіряє наявність рядків у наборі результатів підзапиту. Якщо знайдено значення рядка підзапиту, умова позначається ПРАВДА і пошук не продовжується у внутрішньому запиті, і якщо він не знайдений, умова позначається ПОМИЛКОВИЙ і пошук продовжується у внутрішньому запиті.
ПРИКЛАД використання оператора EXIST:
Знайдіть співробітників, яким підпорядкована хоча б одна особа.

Запит:

SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>

ВИХІД:

ПРИКЛАД використання оператора NOT EXIST
Знайти всі відділи, в яких немає співробітників.

Запит:

SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>

ВИХІД:

Часті запитання щодо корельованих підзапитів SQL – поширені запитання

Яка різниця між корельованими підзапитами та звичайними підзапитами?

Звичайні підзапити (некорельовані) не залежать від зовнішнього запиту та оцінюються лише один раз перед виконанням основного запиту. Навпаки, корельовані підзапити залежать від зовнішнього запиту та виконуються для кожного рядка основного запиту.

Коли слід використовувати корельовані підзапити?

Корельовані підзапити корисні, коли вам потрібно відфільтрувати результат зовнішнього запиту на основі певної умови, яка вимагає посилання на значення із самого зовнішнього запиту. Вони зазвичай використовуються в сценаріях, коли умова покладається на дані з пов’язаних таблиць.