Podzapytania jednowierszowe zwracają do zewnętrznej
instrukcji SQL zero lub jeden wiersz. Podzapytanie możemy umieścić w klauzuli WHERE, klauzuli HAVING lub klauzuli FROM
instrukcji SELECT.
Podzapytanie w
klauzuli WHERE
Podzapytanie można umieścić w klauzuli WHERE innego zapytania. Klauzula WHERE poniższego zapytania zawiera
podzapytanie. Należy zauważyć, że zostało ono umieszczone w nawiasach okrągłych. Ten przykład pobiera wartości pól first_name i last_name z
wiersza tabeli employee, w którym last_name ma wartość Forest
Podzapytanie w klauzuli WHERE ma postać :
To zapytanie jest uruchamiane jako pierwsze (i tylko
jeden raz) i zwraca emp_no dla
wiersza, w którym last_name na
wartość Forest. Wartość emp_no w tym wierszu wynosi 9 i jest ona przysłana do klauzuli WHERE zewnętrznego zapytania, dlatego
też zwraca ono ten sam wynik co poniższe:
Użycie innych
operatorów jednowierszowych
W klauzuli WHERE
podzapytania przestawionego na początku był wykorzystywany operator
równości (=). W podzapytaniach
jednowierszowych można również używać innych operatorów porównania, takich jak <>, <, >, <= i >= .
W poniższym przykładzie w klauzuli WHERE zewnętrznego zapytania użyto
operatora > . W podzapytaniu
zastosowano funkcję AVG() do
obliczania średniego wynagrodzenia pracowników, która jest przesłana do
klauzuli WHERE zewnętrznego
zapytania. Całe zapytanie zwraca emp_no, first_name, last_name i salary pracowników,
których wynagrodzenie jest większe od średniego wynagrodzenia wszystkich
pracowników:
Poniższy przykład przestawia uruchomienie samego
podzapytania:
Wartość 385796,85
zwrócona przez podzapytanie jest wykorzystywana w klauzuli WHERE zewnętrznego zapytania, w związku z czym jest ono tożsame z
poniższym:
Podzapytanie w
klauzuli HAVING
W klauzuli HAVING
zewnętrznego zapytania możemy umieścić podzapytanie. To pozwala na
filtrować wyniki grupy wierszy na podstawie wyników zwracanych przez
podzapytanie.
W poniższym przykładzie użyto podzapytania w klauzuli HAVING zewnętrznego zapytania. Przykład
pobiera kod (job_code) oraz średnie
wynagrodzenie pracowników o danym kodzie, jeżeli jest ono większe niż średnie wynagrodzenie
wszystkich pracowników:
Zauważmy, że podzapytanie oblicza najpierw średnie
wynagrodzenie wszystkich pracowników za pomocą funkcji AVG(). Przeanalizujmy przykład, aby zrozumieć działanie tego
zapytania. Oto wynik uruchomienia podzapytania:
Wartość 385796,85
jest wykorzystywana w klauzuli HAVING
zewnętrznego zapytania do odfiltrowania tylko wierszy grup, w których
średnia wynagrodzeń jest większa od 385796,85.
Poniższe zapytanie przestawia wersję zewnętrznego zapytania, która pobiera kod
oraz średnie wynagrodzenie pracowników pogrupowanych według job_code:
Średnie wynagrodzenie większe niż niż 385796,85 występują w grupach z job_code równym Eng i SRep . Zgodnie z oczekiwaniami te same grupy
zostały zwrócone przez zapytanie przestawione na początku.
Podzapytanie w
klauzuli FROM
Podzapytanie można umieścić w klauzuli FROM zewnętrznego zapytania. Tego typu
podzapytania nazywamy widokami wbudowanymi. Poniższy, prosty przykład pobiera
pracowników, dla których emp_no jest
mniejsze od 10:
Podzapytanie zwraca do zapytania zewnętrznego wiersze
z tabeli employee, w których emp_no ma wartość mniejszą od 10.
Zapytanie zewnętrzne pobiera i wyświetla te wartości emp_no. Z perspektywy klauzuli FROM
zewnętrznego zapytania wyniki podzapytania są po prostu kolejnym źródłem
danych.
Brak komentarzy:
Prześlij komentarz