SQL #3: Group by, having, funkcje agregujące oraz join

GROUP BY i HAVING

Aby zrozumieć do czego służą funkcje agregujące, wpierw musisz pojąć założenia grupowania w języku SQL. GROUP BY i HAVING służą do grupowanie danych a potem ustawienie warunku na jego wyniku. Przypomina to bardzo filtrowanie poprzez WHERE. Podstawową różnicą między nimi jest to, że WHERE filtruje wiersze przed grupowaniem i obliczeniami (decyduje, które wiersze wejdą do obliczeń funkcji agregujących), podczas gdy HAVING selekcjonuje wiersze już pogrupowane, po wykonaniu obliczeń. Dlatego klauzula WHERE nie musi zawierać funkcji agregujących, ponieważ nie miałoby to sensu, skoro dokonuje ona wstępnej selekcji danych, które dopiero wejdą do funkcji. Z drugiej strony, klauzula HAVING zawsze zawiera funkcje agregujące. Mówiąc wprost, możesz zastosować klauzulę HAVING bez funkcji, ale jest wtedy mniej efektywna niż WHERE z tym samym warunkiem.

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
SELECT imię,nazwisko,sum(wartosc_zamowienia)
FROM zamowienia
GROUP BY imię,nazwisko
HAVING SUM(zamowienia)>200

Popularne funkcje agregujące

SUM – zwraca sumę wszystkich wartości z podanej kolumny.

AVG – wylicza średnią wartość z kolumny podanej jako argument funkcji.

MIN – zwraca najmniejszą wartość kolumny, w przypadku kolumny składającej się z łańcuchów tekstowych porównywane litery na kolejnych pozycjach wg kodu ASCII.

MAX – zwraca największą wartość kolumny.

COUNT – zlicza liczbę wierszy wg zadanych kryteriów jako argumenty do funkcji.

Funkcje agregujące rzadko spotykane: VARIANCE (obliczanie wariancji), STDDEV (obliczanie odchylenia standardowego), CHECKSUM_AGG (sprawdzanie sumy kontrolnej).

Łączenie tabel poprzez JOIN

Najprostszym sposobem łączenia tabel w jeden z zbiór wynikowy jest skorzystanie z klauzuli WHERE. Dużo jednak bardziej eleganckim i jednocześnie dającym większe możliwości jest użycie słowa kluczowego JOIN. Składnia polecenia SELECT z klauzulą JOIN jest następująca:

SELECT * FROM table1 JOIN table2 ON condition...

Występuje kilka wersji klauzuli JOIN.

inner join

INNER JOIN – dana krotka zostanie uwzględniona wyłącznie w wypadku, gdy w drugiej tabeli występuje krotka (lub krotki), których wartość dla kolumn określonych w warunku jest taka sama. Klauzula INNER jest opcjonalna (tzn. klauzula JOIN bez modyfikatorów działa jak INNER JOIN).

SELECT * FROM osoby
INNER JOIN zamowienia
ON zamowienia.id_osoby=osoby.id
left join

LEFT JOIN – dana krotka zostanie uwzględniona w wyniku, nawet jeżeli w drugiej tabeli nie będzie krotek, które mogłyby być z nią połączone (dla których były spełniony warunek ON…).

SELECT * FROM osoby
LEFT JOIN zamowienia
ON zamowienia.id_osoby=osoby.id
right join

RIGHT JOIN – uwzględniane są krotki z drugiej tabeli, które nie posiadają odpowiedników wśród krotek tabeli pierwszej.

SELECT * FROM osoby
RIGHT JOIN zamowienia
ON zamowienia.id_osoby=osoby.id
full join

FULL OUTER JOIN – pokaże wszystkie wyniki połączeń pomiędzy tabelami nawet jeśli jedna z stron będzie wskazywała na NULL.

SELECT * FROM osoby
FULL OUTER JOIN zamowienia
ON zamowienia.id_osoby=osoby.id

Wykonywanie połączeń poprzez JOIN wiąże się z rozumieniem idei relacji w bazach danych. Jeśli nie wiesz jak je tworzyć i po co one są, zachęcam do przeczytania tej notki: SQL #1: podstawy baz danych, relacje oraz klucze

Stay in the Loop

Get the daily email from CryptoNews that makes reading the news actually enjoyable. Join our mailing list to stay in the loop to stay informed, for free.

Ostatnio dodane

- Advertisement - spot_img

Powiązane wpisy