BD-1st-2.4-lab5.tresc-1.1-Slajd20
Podzapytanie skorelowane (3)
Omówimy teraz wykonanie zapytania z podzapytaniem skorelowanym na przykładzie. Chcemy odczytać nazwiska pracowników, których płace podstawowe są większe niż średnie płace pracowników w zespołach, do których należą. Ponieważ zarówno w zapytaniu zewnętrznym, jak i w podzapytaniu operujemy na tej samej relacji PRACOWNICY, konieczne jest zdefiniowanie aliasu „p” dla relacji PRACOWNICY, przeglądanej w zapytaniu zewnętrznym. Korelacja jest realizowana przez użycie atrybutu ETAT z relacji PRACOWNICY zapytania zewnętrznego w warunku w podzapytaniu (ETAT = P.ETAT). Załóżmy, że w relacji PRACOWNICY mamy tylko cztery rekordy. Zapytanie zewnętrzne pobiera pierwszy rekord z relacji PRACOWNICY, rekord opisujący pracownika o nazwisku Janicki, zatrudnionego na etacie PROFESOR i zarabiającego 2500. Dla tego rekordu wykonywane jest podzapytanie, wyliczające średnią płacę wśród wszystkich profesorów, a więc średnią płacę pracowników o nazwiskach Janicki i Nowicki. Wynik podzapytania, 2750, jest porównywany z pensją Janickiego. Warunek nie jest spełniony, Janicki zostaje odrzucony. Zapytanie zewnętrzne pobiera kolejny rekord z relacji PRACOWNICY, opisujący profesora o nazwisku Nowicki, zarabiającego 3000. Ponownie wykonywane jest podzapytanie, które znowu liczy średnią pensję wśród profesorów. Wynik oczywiście jest ten sam, co poprzednio (2750), ale tym razem warunek dla pracownika Nowickiego jest spełniony i rekord opisujący Nowickiego trafia do zbioru wynikowego. Analogicznie przebiega wykonanie zapytania dla dwóch następnych rekordów.
Reasumując: zapytanie zewnętrzne przejrzało cztery rekordy, podzapytanie zostało wykonane czterokrotnie, do zbioru wynikowego trafiły dwa rekordy.