Użycie podzapytań do zaawansowanych analiz danych

Darmowy Kurs SQL Online

Darmowy Kurs SQL Online

Temat: Użycie podzapytań do zaawansowanych analiz danych

Podzapytania w SQL to bardzo przydatne narzędzie, które pozwala przeprowadzać bardziej zaawansowane analizy danych. Dzięki nim możemy łączyć, filtrować i obliczać wyniki w dynamiczny sposób. W tej sekcji omówimy, jak używać podzapytań do rozwiązywania bardziej złożonych problemów związanych z analizą danych.

Znajdowanie wartości ekstremalnych za pomocą podzapytań

Jednym z typowych sposobów użycia podzapytań jest znajdowanie wartości ekstremalnych, takich jak maksymalna lub minimalna wartość w zbiorze danych, a następnie używanie tych wartości w głównym zapytaniu.

Przykład: Znajdź produkty o cenie równej najwyższej cenie w tabeli produktów.

SELECT nazwa, cena 
FROM Produkty 
WHERE cena = (SELECT MAX(cena) FROM Produkty);

W tym przykładzie podzapytanie (SELECT MAX(cena) FROM Produkty) zwraca maksymalną cenę ze wszystkich produktów, a główne zapytanie zwraca nazwy i ceny produktów, które mają tę najwyższą wartość.

Analiza porównawcza za pomocą podzapytań

Podzapytania mogą być także używane do porównywania wyników między różnymi grupami danych. Na przykład możemy obliczać średnią wartość i porównywać inne rekordy do tej wartości.

Przykład: Znajdź pracowników, którzy zarabiają więcej niż średnie wynagrodzenie w dziale IT.

SELECT imie, nazwisko, wynagrodzenie 
FROM Pracownicy 
WHERE wynagrodzenie > (SELECT AVG(wynagrodzenie) 
                       FROM Pracownicy 
                       WHERE dzial = 'IT');

Podzapytanie oblicza średnie wynagrodzenie pracowników w dziale IT, a główne zapytanie zwraca tych pracowników, którzy zarabiają więcej niż wynosi ta średnia.

Filtrowanie danych na podstawie wyników z innych tabel

Podzapytania mogą być używane do filtrowania danych na podstawie wyników z innych tabel. Jest to przydatne, gdy chcemy znaleźć informacje spełniające kryteria zależne od danych w wielu tabelach.

Przykład: Wyświetl zamówienia klientów o statusie VIP.

SELECT numer_zamowienia, data_zamowienia 
FROM Zamowienia 
WHERE id_klienta IN (SELECT id_klienta 
                     FROM Klienci 
                     WHERE status = 'VIP');

Podzapytanie (SELECT id_klienta FROM Klienci WHERE status = 'VIP') zwraca identyfikatory klientów VIP, a główne zapytanie wyświetla numery zamówień i daty tych zamówień.

Agregacja danych z podzapytań

Podzapytania mogą być również używane do przeprowadzania złożonych operacji agregacyjnych, które następnie są wykorzystywane w głównym zapytaniu. Pozwala to na uzyskanie bardziej szczegółowych informacji o danych.

Przykład: Znajdź klasy, w których liczba uczniów jest większa niż średnia liczba uczniów we wszystkich klasach.

SELECT klasa_id, COUNT(*) AS liczba_uczniow 
FROM Uczniowie 
GROUP BY klasa_id 
HAVING COUNT(*) > (SELECT AVG(liczba_uczniow) 
                   FROM (SELECT COUNT(*) AS liczba_uczniow 
                         FROM Uczniowie 
                         GROUP BY klasa_id) AS Temp);

W tym przykładzie wewnętrzne podzapytanie tworzy tabelę tymczasową z liczbą uczniów w każdej klasie, a następnie średnia liczba uczniów jest obliczana. Główne zapytanie zwraca te klasy, w których liczba uczniów jest większa niż średnia.

Podzapytania skorelowane

Podzapytania skorelowane są bardziej złożone, ponieważ są wykonywane dla każdego wiersza osobno. Są przydatne, gdy chcemy przeprowadzić szczegółową analizę każdego rekordu.

Przykład: Znajdź pracowników, którzy zarabiają więcej niż średnia w ich dziale.

SELECT imie, nazwisko, wynagrodzenie 
FROM Pracownicy p1 
WHERE wynagrodzenie > (SELECT AVG(wynagrodzenie) 
                       FROM Pracownicy p2 
                       WHERE p1.dzial = p2.dzial);

Podzapytanie jest skorelowane, ponieważ odnosi się do wartości z głównego zapytania (p1.dzial = p2.dzial). Dzięki temu dla każdego pracownika jest obliczana średnia płaca w jego dziale, a następnie porównywana z jego wynagrodzeniem.

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się