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
- Kolejność wykonywania – Zawsze najpierw wykonywane są podzapytania, a następnie zapytanie zewnętrzne.
- Zagnieżdżanie – Podzapytania mogą być zagnieżdżone na wielu poziomach.
- 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).
- 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.
- 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: