SUBQUERY w SQL – zapytania zagnieżdżone

kajodata.com 1 rok temu

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, iż nie można bezpośrednio odwoływać się do kolumn z zapytania zewnętrznego, chyba iż 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 dzięki 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 wszystkich 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.

Idź do oryginalnego materiału