SUBQUERY w SQL – zapytania zagnieżdżone

26 kwietnia 2023

SUBQUERY w SQL - zapytania zagnieżdżone

W dzisiejszym artykule na blogu przyjrzymy się bliżej funkcjonalności znanym jako SUBQUERY w SQL (po polsku: zapytania zagnieżdżone). Podzapytania są jednym z kluczowych elementów SQL, które pozwalają na tworzenie bardziej złożonych i dynamicznych zapytań do baz danych. Pozwala to na ekstrakcję informacji, które nie są bezpośrednio dostępne w pojedynczym zapytaniu.

Czym jest SUBQUERY (zapytania zagnieżdżone)

SUBQUERY, czyli podzapytanie, to zapytanie SQL umieszczone wewnątrz innego zapytania SQL. Podzapytania są zagnieżdżone wewnątrz zapytań zewnętrznych i wykonywane są przed zapytaniem zewnętrznym. Wynik podzapytania może być użyty jako wartość, kolumna lub tabela w zapytaniu zewnętrznym.

Podzapytania można wykorzystać w różnych częściach zapytań SQL, takich jak:

  • W klauzuli SELECT,
  • W klauzuli FROM,
  • W klauzuli WHERE,
  • W klauzuli HAVING,
  • W klauzuli JOIN.

Rodzaje SUBQUERY w SQL

Istnieją trzy główne rodzaje podzapytań zagnieżdżonych:

Skalarne podzapytania (Scalar SUBQUERY)

Zwracają jedną wartość (jedną kolumnę i jeden wiersz). Stosowane są przede wszystkim w klauzuli SELECT oraz w warunkach porównania.

SELECT product_name, price,
  (SELECT AVG(price) FROM products) as average_price
FROM products;

Podzapytania zwracające listę (List SUBQUERY)

Zwracają jedną kolumnę z wieloma wierszami. Najczęściej stosowane są w klauzuli WHERE oraz HAVING.

SELECT * FROM orders
WHERE order_id IN
  (SELECT order_id FROM order_items WHERE product_id = 101);

Podzapytania zwracające tabelę (Table SUBQUERY)

Zwracają tablicę wartości, czyli wiele wierszy i kolumn. Stosowane są przede wszystkim w klauzuli FROM.

SELECT p.name, o.total_amount
FROM products p
JOIN
  (SELECT product_id, SUM(quantity*price) as total_amount
   FROM order_items
   GROUP BY product_id) o
ON p.product_id = o.product_id;

Zasady korzystania z zapytań zagnieżdżonych w SQL

  1. Kolejność wykonywania – Zawsze najpierw wykonywane są podzapytania, a następnie zapytanie zewnętrzne.
  2. Zagnieżdżanie – Podzapytania mogą być zagnieżdżone na wielu poziomach.
  3. Zakres – Kolumny używane w podzapytaniu muszą być dostępne w jego zakresie. Oznacza to, że nie można bezpośrednio odwoływać się do kolumn z zapytania zewnętrznego, chyba że są one częścią klauzuli korzystającej z podzapytania (np. w warunkach łączenia w klauzuli JOIN).
  4. Używanie aliasów – W przypadku podzapytań zagnieżdżonych w klauzuli FROM, zalecane jest stosowanie aliasów dla zwracanych tabel, aby uprościć zapytanie zewnętrzne i uniknąć niejednoznaczności.
  5. Optymalizacja – Choć podzapytania są potężnym narzędziem, warto pamiętać o optymalizacji zapytań. W niektórych przypadkach zamiast podzapytań lepiej użyć technik takich jak JOIN, gdyż mogą one przyspieszyć wykonanie zapytania.

Przykłady użycia SUBQUERY w SQL

Wyszukiwanie rekordów spełniających warunek oparty na wyniku podzapytania:

SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

W powyższym przykładzie zapytanie zewnętrzne zwraca pracowników, których pensja przekracza średnią pensję wszystkich pracowników (wynik podzapytania).

Filtrowanie rekordów za pomocą podzapytania zwracającego listę:

SELECT * FROM customers
WHERE country NOT IN (SELECT DISTINCT country FROM suppliers);

W powyższym przykładzie zapytanie zewnętrzne zwraca klientów, którzy nie znajdują się w krajach, w których są dostawcy.

Użycie podzapytania w klauzuli FROM:

SELECT customer_id, AVG(total_price)
FROM
  (SELECT customer_id, SUM(price*quantity) as total_price
   FROM orders
   JOIN order_items ON orders.order_id = order_items.order_id
   GROUP BY orders.customer_id, orders.order_id) as subquery
GROUP BY customer_id;

W powyższym przykładzie zapytanie zewnętrzne oblicza średnią wartość zamówienia dla każdego klienta, na podstawie wyników podzapytania zagnieżdżonego w klauzuli FROM.

Podsumowanie

SUBQUERY w SQL (zapytania zagnieżdżone) to potężne narzędzie, które pozwala na tworzenie bardziej złożonych kwerend. Pozwala na zagnieżdżanie zapytań, filtrowanie danych na podstawie wyników innych zapytań, a także tworzenie bardziej dynamicznych zestawień. Pamiętając o zasadach korzystania z podzapytań i dbając o optymalizację zapytań, możemy wykorzystać ich pełen potencjał w pracy z bazami danych.

To tyle w tym temacie. Analizujcie w pokoju!  

Podobał Ci się ten artykuł 🙂?
Podziel się nim w Social Mediach 📱
>>> udostępnij go na LinkedIn i pokaż, że codziennie uczysz się czegoś nowego 
>>> wrzuć go na Facebooka, to się może przydać któremuś z Twoich znajomych 
>>> Przypnij sobie tą stronkę to zakładek, może się przydać w przyszłości

Wolisz oglądać 📺 niż czytać – nie ma problemu
>>> Obserwuj i oglądaj KajoData na YouTube

Inne ciekawe artykuły:

Ja Ci ją z przyjemnością wyślę. Za darmo. Bez spamu.

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu.

Zgadzam się na przetwarzanie moich danych osobowych przez KajoData Kajo Rudziński w celu realizacji usługi newsletter, a tym samym wysyłania mi informacji o produktach blogowych, usługach, lub nowościach, zgodnie z polityką prywatności. Wiem, że zgodę tę mogę w każdej chwili cofnąć.

Please wait...

Dziękujemy za zapis!