wtorek,
SQL: Podzapytania
Podzapytania (subqueries) w SQL są narzędziem pozwalającym na wykonywanie złożonych operacji na danych. Podzapytanie to zapytanie zagnieżdżone wewnątrz innego zapytania, które może dostarczać dane do zewnętrznego zapytania. Są one szczególnie przydatne w sytuacjach, gdy operacja wymaga wielu kroków przetwarzania danych.
Podstawowe użycie podzapytań
Podzapytanie w klauzuli WHERE
Używane do filtrowania wyników zewnętrznego zapytania.
SELECT * FROM pracownicy
WHERE pensja > (SELECT AVG(pensja) FROM pracownicy);
Zapytanie zwraca pracowników, którzy zarabiają więcej niż średnia pensja.
Podzapytanie w klauzuli FROM
Podzapytanie może być użyte jako źródło danych w klauzuli FROM.
SELECT AVG(pensja)
FROM (SELECT * FROM pracownicy WHERE dzial = 'IT') AS PracownicyIT;
Zapytanie oblicza średnią pensję pracowników działu IT.
Podzapytanie w klauzuli SELECT
Podzapytania mogą być również użyte w klauzuli SELECT.
SELECT imie, (SELECT COUNT(*) FROM zamowienia WHERE zamowienia.IDPracownika = pracownicy.IDPracownika) AS LiczbaZamowien
FROM pracownicy;
Zapytanie zwraca listę pracowników wraz z liczbą zamówień, które obsłużyli.
Zaawansowane użycie podzapytań
Podzapytanie z IN
Podzapytanie z operatorem IN umożliwia filtrowanie na podstawie listy wartości zwróconych przez podzapytanie.
SELECT * FROM produkty
WHERE IDProduktu IN (SELECT IDProduktu FROM zamowienia WHERE dataZamowienia > '2021-01-01');
Zapytanie zwraca produkty, które zostały zamówione po 1 stycznia 2021 roku.
Podzapytania korelacyjne
W podzapytaniach korelacyjnych podzapytanie odnosi się do zmiennych z zewnętrznego zapytania.
SELECT * FROM pracownicy p
WHERE EXISTS (SELECT * FROM zamowienia z WHERE z.IDPracownika = p.IDPracownika);
Zapytanie zwraca pracowników, którzy mają przypisane zamówienia.
Podzapytanie z EXISTS
Używane do sprawdzenia, czy podzapytanie zwraca jakiekolwiek wiersze.
SELECT * FROM klienci
WHERE EXISTS (SELECT * FROM zamowienia WHERE zamowienia.IDKlienta = klienci.IDKlienta);
Zapytanie zwraca klientów, którzy złożyli przynajmniej jedno zamówienie.
Uwagi
- Podzapytania mogą znacząco wpłynąć na wydajność, zwłaszcza w dużych bazach danych.
- Zawsze zaleca się testowanie i optymalizację zapytań z podzapytaniami, aby uniknąć nadmiernego obciążenia systemu.