11
Ściąga z SQL
przy czym nawiasy są wymagane tylko w niektórych systemach, zaś standard pozwala je pomijać.
Kolejność rekordów w odpowiedzi na zapytanie wymusza się za pomocą kryterium porządkowania. Osobne kryterium służy do grupowania: grupę tworzą rekordy, dla których wyrażenie grupujące przyjmuje tę samą wartość. Żądanie grupowania powoduje, że każdą grupę opisze pojedynczy rekord.
Są to funkcje operujące na kolumnach danych, obliczające pojedynczą wartość: avg, co-unt, max, min oraz sum.
Jeżeli w zapytaniu zawierającym taką funkcję nie zastosowano grupowania, to wynik ma postać pojedynczego rekordu dla całej tabeli.
Jeśli zastosowano grupowanie, to wynik zawiera rekordy odpowiadające każdej znalezionej wartości wyrażenia grupującego.
Zapytanie zawierające jednocześnie wartości zagregowane i niezagregowane jest nielegalne. Wyjątkiem jest zapytanie z żądaniem grupowania, zawierające kolumny zagregowane i kolumny obliczone na podstawie wyrażeń grupujących.
select * from relacja group by wyrażenie;
Przykład: Zapytanie
select * from kwiaty group by barwa;
nie ma sensu, bowiem żądane pola, oprócz pola barwa, w żaden sposób nie odnoszą się do grupy jako całości. Dobry system bazodanowy powinien odmówić realizacji takiego zapytania.
Przykład: Sensowniej jest zapytać o liczbę rekordów w poszczególnych grupach opisujących kwiaty tej samej barwy. Na zapytanie
select barwa "kolor", count(distinct nazwa) as "liczba" from kwiaty group by barwa;
otrzymamy odpowiedź:
| kolor | liczba | b 1 ~
r 2_
y 1 ~
Przykład: Jeszcze lepiej skierować to samo zapytanie to złączenia relacji: z zapytania select
kolory.nazwa as "kolor",
count(distinct kwiaty.nazwa) as "liczba" from kwiaty join kolory on (barwa=kod) group by barwa, kolory.nazwa;