Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

SUBQUERY

Termin Definicja
SUBQUERY

SUBQUERY to zapytanie zagnieżdżone wewnątrz innego polecenia SQL, zwracające wartość lub zbiór wykorzystywany dalej.

Subquery jako zapytanie zagnieżdżone

SUBQUERY, nazywane po polsku podzapytaniem albo zapytaniem podrzędnym, jest instrukcją umieszczoną wewnątrz innego zapytania SQL. Jego wynik staje się częścią większego polecenia: może być pojedynczą wartością, listą wartości albo tabelą wynikową. Dzięki temu warunek lub dane potrzebne do wykonania zapytania mogą zostać obliczone bezpośrednio w tej samej instrukcji, zamiast być pobierane osobno i przekazywane przez aplikację.

Podzapytanie może znajdować się między innymi w klauzuli WHERE, HAVING, FROM albo w wyrażeniu użytym na liście wybieranych kolumn. Przykładowo zapytanie może wyszukać produkty, których cena jest większa od średniej obliczonej przez wewnętrzne SELECT AVG(cena). Zewnętrzne zapytanie wykorzystuje wtedy jedną wartość liczbową zwróconą przez subquery.

Wynik pojedynczy, lista wartości i tabela pochodna

Rodzaj wyniku podzapytania musi odpowiadać operatorowi użytemu w zapytaniu nadrzędnym. Subquery zwracające dokładnie jedną wartość może być użyte z operatorami porównania, takimi jak =, < lub >. Jeżeli zapytanie wewnętrzne może zwrócić wiele wierszy, właściwsze są operatory IN, EXISTS, ANY albo ALL. Użycie zwykłego znaku równości wobec wyniku wielowierszowego może zakończyć się błędem wykonania.

Przykład z operatorem IN może wyszukiwać klientów należących do miast wskazanych przez podzapytanie: WHERE klient_id IN (SELECT klient_id FROM zamowienia WHERE status = 'opłacone'). Operator EXISTS sprawdza natomiast, czy podzapytanie zwróciło choć jeden wiersz. W takim przypadku baza nie musi przekazywać wszystkich znalezionych wartości do zapytania zewnętrznego, ponieważ istotna jest sama informacja o istnieniu dopasowania.

Subquery umieszczone w klauzuli FROM tworzy tabelę pochodną. Taka konstrukcja pozwala najpierw pogrupować lub przekształcić dane, a następnie wykonać kolejne filtrowanie na wyniku pośrednim. W wielu silnikach SQL wynik tabelarycznego podzapytania umieszczonego w FROM powinien otrzymać alias, na przykład FROM (SELECT ... ) AS zestawienie.

Podzapytania skorelowane i kolejność obliczeń

Podzapytanie nieskorelowane działa niezależnie od bieżącego wiersza analizowanego przez zapytanie zewnętrzne. Może zostać logicznie obliczone jako osobny wynik, a następnie wykorzystane w warunku nadrzędnym. Inaczej działa podzapytanie skorelowane, które odwołuje się do kolumn zapytania zewnętrznego. Wtedy wynik subquery zależy od aktualnie sprawdzanego wiersza, na przykład od identyfikatora konkretnego klienta.

W podzapytaniu skorelowanym aliasy tabel mają znaczenie dla jednoznaczności odwołań. Zewnętrzna tabela może otrzymać alias k, a wewnętrzna z; warunek WHERE z.klient_id = k.id wskazuje, że podzapytanie ma sprawdzić zamówienia przypisane do aktualnego klienta. Taka konstrukcja bywa czytelna przy testowaniu istnienia powiązanych rekordów, lecz może wymagać starannej analizy planu wykonania, zwłaszcza gdy zapytanie przetwarza dużą liczbę wierszy.

Subquery nie zawsze jest wykonywane dosłownie jako osobna instrukcja dla każdego wiersza. Optymalizator zapytań może przekształcić je w równoważny plan, na przykład w połączenie tabel, filtr półzłączenia albo inne operacje wewnętrzne. Ostateczna wydajność zależy od konkretnego silnika SQL, struktury tabel, liczby rekordów, warunków oraz dostępnych indeksów. Sama obecność podzapytania nie oznacza więc automatycznie problemu wydajnościowego.

Rola subquery w analizie i naprawie zapytań

Podczas diagnozowania zapytania SQL należy sprawdzić, ile kolumn i wierszy zwraca podzapytanie, czy może zwrócić wartość pustą oraz czy jego warunki odpowiadają logice zapytania nadrzędnego. Szczególnej uwagi wymaga wartość NULL, ponieważ porównania z NULL nie dają wyniku logicznego TRUE tak jak zwykłe porównania. Do sprawdzania braku wartości używa się konstrukcji IS NULL lub IS NOT NULL, a nie operatora = NULL.

Warto również porównać podzapytanie z alternatywnym połączeniem tabel, jeżeli oba zapisy mają realizować tę samą logikę. Należy wtedy upewnić się, że zmiana nie powoduje powielania wierszy, pominięcia rekordów bez dopasowania albo innego traktowania wartości pustych. Przydatne jest uruchomienie samego SELECT wewnętrznego, sprawdzenie jego wyniku oraz analiza planu wykonania udostępnianego przez używany silnik bazy danych.

Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, w tym diagnostyką problemów z oprogramowaniem oraz działaniem podzespołów, gdy nieprawidłowe zapytania SQL są objawem szerszych problemów z konfiguracją komputera lub aplikacji.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę