W języku SQL skorelowane podzapytanie to podzapytanie odnoszące się do kolumny z zapytania zewnętrznego. Podzapytanie jest wykonywane wielokrotnie dla każdego wiersza zapytania zewnętrznego, przy użyciu wartości z bieżącego wiersza do wykonania podzapytania. Wynik podzapytania jest następnie używany do oceny zapytania zewnętrznego.
Skorelowane podzapytania są używane do przetwarzania wiersz po wierszu. Każde podzapytanie jest wykonywane raz dla każdego wiersza zapytania zewnętrznego.
Skorelowane podzapytanie jest oceniane raz dla każdego wiersza przetwarzanego przez instrukcję nadrzędną. Instrukcja nadrzędna może być a WYBIERAĆ , AKTUALIZACJA , Lub USUWAĆ oświadczenie.
Składnia:
WYBIERZ kolumnę 1, kolumnę 2,….
Z tabeli 1 zewnętrznej
WHERE operator kolumny 1
(WYBIERZ kolumnę 1, kolumnę 2
Z tabeli 2
GDZIE wyrażenie1 =
zewnętrzne.wyrażenie2);
Skorelowane podzapytanie to jeden ze sposobów odczytania każdego wiersza w tabeli i porównania wartości w każdym wierszu z powiązanymi danymi. Jest używane, gdy podzapytanie musi zwrócić inny wynik lub zestaw wyników dla każdego wiersza kandydującego uwzględnionego w zapytaniu głównym. Innymi słowy, możesz użyć skorelowanego podzapytania, aby odpowiedzieć na pytanie wieloczęściowe, którego odpowiedź zależy od wartości w każdym wierszu przetwarzanym przez instrukcję nadrzędną.
Podzapytania zagnieżdżone a podzapytania skorelowane
W przypadku normalnego zagnieżdżonego podzapytania, internal WYBIERAĆ zapytanie uruchamia się jako pierwsze i wykonuje raz, zwracając wartości, które mają zostać użyte przez główne zapytanie. Jednakże skorelowane podzapytanie jest wykonywane raz dla każdego wiersza kandydującego uwzględnionego w zapytaniu zewnętrznym. Innymi słowy, zapytanie wewnętrzne jest sterowane przez zapytanie zewnętrzne.
NOTATKA: Możesz także skorzystać z KAŻDY I WSZYSTKO operator w skorelowanym podzapytaniu. PRZYKŁAD skorelowanych podzapytań: Znajdź wszystkich pracowników, którzy zarabiają więcej niż średnia pensja w swoim dziale.
Zapytanie:
SELECT last_name, salary, department_id FROM employees outer WHERE salary>(WYBIERZ AVG(wynagrodzenie) FROM pracowników GDZIE id_działu = grupa zewnętrzna.id_działu według identyfikatora_działu);>
Inne zastosowanie korelacji jest w AKTUALIZACJA I USUWAĆ
POWIĄZANA AKTUALIZACJA
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Użyj skorelowanego podzapytania, aby zaktualizować wiersze w jednej tabeli na podstawie wierszy z innej tabeli.
USUŃ POWIĄZANE
DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Użyj skorelowanego podzapytania, aby usunąć wiersze z jednej tabeli na podstawie wierszy z innej tabeli.
spróbuj złapać blok Java
Korzystanie z operatora EXISTS
Operator EXISTS sprawdza obecność wierszy w zestawie wyników podzapytania. Jeśli zostanie znaleziona wartość wiersza podzapytania, warunek zostanie oflagowany PRAWDA a wyszukiwanie w zapytaniu wewnętrznym nie jest kontynuowane, a jeśli nie zostanie znalezione, warunek jest oflagowany FAŁSZ a wyszukiwanie jest kontynuowane w zapytaniu wewnętrznym.
PRZYKŁAD użycia operatora EXIST:
Znajdź pracowników, którym podlega co najmniej jedna osoba.
Zapytanie:
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>
WYJŚCIE :

PRZYKŁAD użycia operatora NIE ISTNIEJE
Znajdź wszystkie działy, które nie mają żadnych pracowników.
Zapytanie:
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>
WYJŚCIE :

Często zadawane pytania dotyczące podzapytań skorelowanych z SQL – często zadawane pytania
Jaka jest różnica między skorelowanymi podzapytaniami a zwykłymi podzapytaniami?
Regularne podzapytania (nieskorelowane) są niezależne od zapytania zewnętrznego i są oceniane tylko raz przed uruchomieniem zapytania głównego. Natomiast skorelowane podzapytania są zależne od zapytania zewnętrznego i są wykonywane dla każdego wiersza zapytania głównego.
Kiedy należy używać skorelowanych podzapytań?
Skorelowane podzapytania są przydatne, gdy trzeba filtrować wyniki zapytania zewnętrznego na podstawie warunku wymagającego odwoływania się do wartości z samego zapytania zewnętrznego. Są one powszechnie używane w scenariuszach, w których warunek opiera się na danych z powiązanych tabel.