Lekcja 8: Sortowanie wyników - ORDER BY

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Lekcja 8: Sortowanie wyników - ORDER BY
Required In Progress

Porządkowanie zwróconych danych

Kiedy wykonujemy zapytanie SELECT, relacyjna baza danych nie gwarantuje żadnej konkretnej kolejności zwracanych wierszy. Nawet jeśli dane wydają się posortowane (np. po ID), jest to tylko przypadek, który może się zmienić przy następnym uruchomieniu zapytania (np. po zmianie planu wykonania przez optymalizator). Jeśli zależy nam na konkretnej kolejności wyników (np. alfabetycznie, od najwyższej ceny do najniższej), musimy jawnie o to poprosić za pomocą klauzuli ORDER BY.

Słowo kluczowe ORDER BY

Klauzula ORDER BY służy do sortowania finalnego zestawu wyników. Jest ona (logicznie) przetwarzana prawie na samym końcu – po WHERE i ewentualnym grupowaniu (które poznamy później).

Składnia ogólna:

SELECT ... FROM ... WHERE ... ORDER BY <kolumna_sortująca>;

Sortowanie rosnące (ASC - domyślne)

ASC (skrót od Ascending, czyli rosnąco) sortuje dane od najmniejszej do największej:

  • Liczby: 1, 2, 3...
  • Tekst: A, B, C...
  • Daty: od najwcześniejszej do najpóźniejszej.

Tryb ASC jest domyślny, więc słowo kluczowe jest opcjonalne.

SELECT Imie, Nazwisko FROM Uczniowie ORDER BY Nazwisko;

To jest równoważne:

SELECT Imie, Nazwisko FROM Uczniowie ORDER BY Nazwisko ASC;

Sortowanie malejące (DESC)

DESC (skrót od Descending, czyli malejąco) sortuje dane od największej do najmniejszej (Z-A, 10-1, od najpóźniejszej daty). Użycie słowa kluczowego DESC jest obowiązkowe, jeśli chcemy sortować malejąco.

Przykład — wyświetl uczniów zaczynając od tego z najwyższą średnią ocen:

SELECT Imie, Nazwisko, Srednia FROM Uczniowie ORDER BY Srednia DESC;

Sortowanie po wielu kolumnach

Możemy sortować według wielu kryteriów. Baza danych sortuje najpierw po pierwszej kolumnie z listy. Następnie, tylko dla wierszy, które mają tę samą wartość w pierwszej kolumnie, stosuje sortowanie według drugiej kolumny.

Składnia:

... ORDER BY <kolumna1>, <kolumna2>, ...

Przykład: posortuj uczniów alfabetycznie po nazwisku, a w ramach tego samego nazwiska (np. jeśli jest wielu "Kowalskich") posortuj ich alfabetycznie po imieniu:

SELECT Imie, Nazwisko FROM Uczniowie ORDER BY Nazwisko ASC, Imie ASC;

Wynik może wyglądać np. tak: Kowalski Adam, Kowalski Jan, Nowak Anna, ...