łatwySQLSQL

SQL ORDER BY - Sortowanie Wyników na Maturze

10 min czytania
SQL
Zaktualizowano: 4.11.2025

Klauzula `ORDER BY` to Twoje narzędzie do porządkowania wyników zapytania. Po tym, jak `SELECT`, `FROM` i `WHERE` zbiorą i przefiltrują dane, `ORDER BY` wkracza na końcu, aby je posortować. Chcesz zobaczyć listę uczniów alfabetycznie? A może ranking graczy od najwyższego wyniku? Właśnie do tego służy `ORDER BY`. Jest to jedna z najprostszych i najbardziej intuicyjnych części SQL, ale kluczowa, aby prezentować dane w czytelny i logiczny sposób, zgodnie z wymaganiami zadania.

Dlaczego to ważne? Na maturze polecenia często brzmią: 'Wypisz listę posortowaną alfabetycznie...', 'Znajdź 10 najlepszych wyników...', 'Podaj nazwisko właściciela, który zapłacił najwięcej...'. Wszystkie te zadania, które pytają o kolejność, ranking lub skrajne wartości (po posortowaniu), wymagają użycia `ORDER BY`. Jest to klauzula, która (logicznie) wykonuje się jako ostatnia w zapytaniu.

Teoria

Klauzula `ORDER BY` jest dodawana na *samym końcu* zapytania `SELECT` i sortuje wiersze wynikowe na podstawie jednej lub więcej kolumn. Domyślnie sortuje rosnąco. Możesz jawnie określić kierunek sortowania za pomocą słów kluczowych `ASC` (rosnąco) lub `DESC` (malejąco).

Jak to działa?

  1. Krok 1: Napisz całe zapytanie `SELECT ... FROM ... WHERE ...`.
  2. Krok 2: Na samym końcu dodaj klauzulę `ORDER BY`.
  3. Krok 3: Podaj nazwę kolumny, po której chcesz sortować, np. `ORDER BY nazwisko`.
  4. Krok 4: **Kierunek (Opcjonalnie)**: Domyślnie jest `ASC` (Ascending - rosnąco, A-Z, 1-100). Nie musisz go pisać.
  5. Krok 5: **Kierunek (Jawnie)**: Aby sortować malejąco (Z-A, 100-1), musisz dodać `DESC` (Descending): `ORDER BY punkty DESC`.
  6. Krok 6: **Sortowanie po wielu kolumnach**: Możesz podać kilka kolumn. Baza posortuje dane po pierwszej, a w przypadku 'remisów' (tych samych wartości), użyje drugiej kolumny do sortowania wewnątrz tej grupy. Np. `ORDER BY klasa ASC, nazwisko ASC`.

Złożoność: Złożoność czasowa sortowania to zazwyczaj O(n log n), gdzie 'n' to liczba wierszy do posortowania. Na maturze nie musisz się tym przejmować, jest to operacja standardowa.

Implementacja

Sortowanie rosnące (domyślne `ASC`)

SQL
-- Pokaż uczniów posortowanych alfabetycznie po nazwisku
SELECT imie, nazwisko
FROM Uczniowie
ORDER BY nazwisko;

-- Powyższe zapytanie jest identyczne z:
SELECT imie, nazwisko
FROM Uczniowie
ORDER BY nazwisko ASC;

Jeśli nie podasz `ASC` ani `DESC`, baza danych *domyślnie* używa `ASC` (rosnąco). Dla tekstów oznacza to porządek alfabetyczny (A-Z), a dla liczb - od najmniejszej do największej.

Sortowanie malejące (`DESC`) - np. ranking

SQL
-- Pokaż ranking uczniów, od najwyższej liczby punktów
SELECT imie, nazwisko, punkty
FROM Uczniowie
WHERE klasa = '2A'
ORDER BY punkty DESC;

To jest kluczowy przykład. `DESC` (Descending) odwraca porządek sortowania. Jest niezbędne do tworzenia rankingów 'top 10', 'kto ma najwięcej' itp. Zwróć uwagę, że `ORDER BY` jest *po* `WHERE`.

Sortowanie po wielu kolumnach

SQL
-- Pokaż listę uczniów, posortowaną najpierw po klasie (A-Z),
-- a następnie alfabetycznie po nazwisku (A-Z) w obrębie każdej klasy
SELECT klasa, nazwisko, imie
FROM Uczniowie
ORDER BY klasa ASC, nazwisko ASC;

Baza najpierw sortuje wszystkie wiersze po `klasa`. Następnie, jeśli w jednej klasie (np. '1A') jest wielu uczniów, sortuje *tę grupę* według `nazwisko`.

Przykładowe Zadania Maturalne

Matura 2026Zadanie Zadanie Typu Maturalnego 1

Masz tabelę 'Gracze' (id, nazwa, punkty). Napisz zapytanie SQL, które wyświetli nazwy i punkty wszystkich graczy, którzy zdobyli więcej niż 1000 punktów. Wyniki posortuj od gracza z największą liczbą punktów do gracza z najmniejszą.

Wskazówka: Potrzebujesz trzech klauzul: `SELECT`, `WHERE` (aby odfiltrować graczy z punktami <= 1000) oraz `ORDER BY`. Aby posortować od największej liczby, musisz użyć słowa kluczowego `DESC`.

Pokaż szkic rozwiązania
1. Wybierz kolumny: `SELECT nazwa, punkty`
2. Wskaż tabelę: `FROM Gracze`
3. Ustaw filtr: `WHERE punkty > 1000`
4. Posortuj wynik: `ORDER BY punkty DESC;`
5. Pełne zapytanie: `SELECT nazwa, punkty FROM Gracze WHERE punkty > 1000 ORDER BY punkty DESC;`
Matura 2024Zadanie 8.5 (Matura Próbna Grudzień 2024)

W bazie danych są tabele 'Wlasciciele' i 'Samochody'. Zapisz zapytanie SQL, w wyniku którego uzyskasz imiona i nazwiska właścicieli samochodów zarejestrowanych w Chorzowie (nr rejestracyjny rozpoczyna się od liter SH) i wyprodukowanych w 2020 roku. **Nazwiska uporządkuj alfabetycznie.**

Wskazówka: To zadanie łączy `JOIN`, `WHERE` i `ORDER BY`. Po połączeniu tabel (`JOIN`) i przefiltrowaniu wyników (`WHERE`), na samym końcu musisz dodać klauzulę `ORDER BY nazwisko`. Domyślny porządek (alfabetyczny) to `ASC`, więc nie musisz nic więcej pisać.

Pokaż szkic rozwiązania
1. Wybierz dane: `SELECT W.imie, W.nazwisko`
2. Połącz tabele: `FROM Wlasciciele AS W JOIN Samochody AS S ON W.id_wlasciciela = S.id_wlasciciela`
3. Ustaw filtry: `WHERE S.nr_rejestracyjny LIKE 'SH%' AND S.rok_produkcji = 2020`
4. Posortuj wynik: `ORDER BY W.nazwisko ASC;` (lub samo `ORDER BY W.nazwisko;`)

Częste Błędy

Błędna kolejność klauzul

Najczęstszy błąd. Uczeń pisze `... ORDER BY punkty DESC WHERE klasa = '1A' ...`. To nie zadziała. `ORDER BY` musi być *na samym końcu*.

Poprawka: Zapamiętaj kolejność: `SELECT` -> `FROM` -> `JOIN` -> `WHERE` -> `GROUP BY` -> `HAVING` -> `ORDER BY`. `ORDER BY` jest zawsze ostatnie (przed `LIMIT`, jeśli go używasz).

Zapominanie o `DESC`

Zadanie prosi o 'najlepsze wyniki', 'najwyższe ceny' lub 'ranking malejąco'. Uczeń pisze `ORDER BY punkty`, co sortuje rosnąco (od najgorszych).

Poprawka: Jeśli chcesz porządek od największego do najmniejszego (Z-A, 100-1), *musisz* jawnie napisać `DESC`.

Mylenie `ORDER BY` z `GROUP BY`

`GROUP BY` 'zwija' wiele wierszy w jeden (np. liczy średnią dla klasy). `ORDER BY` *nie zwija* wierszy, tylko zmienia ich kolejność wyświetlania.

Poprawka: Jeśli chcesz policzyć coś *dla grupy*, użyj `GROUP BY`. Jeśli chcesz *posortować* wynik, użyj `ORDER BY`.

Sortowanie tekstu jak liczb

Czasami liczby (np. '1', '10', '2') są przechowywane w bazie jako tekst (VARCHAR). `ORDER BY` posortuje je alfabetycznie: '1', '10', '2'. To zły wynik.

Poprawka: Na maturze dane są zwykle poprawnych typów (liczby jako INT). Jeśli jednak tak się zdarzy, musisz rzutować (konwertować) kolumnę na liczbę: `ORDER BY CAST(kolumna_tekstowa AS INT) ASC`.

Kluczowe Wnioski

  • `ORDER BY` służy do sortowania *wyników* zapytania.
  • Jest to (logicznie) **ostatnia** klauzula wykonywana w zapytaniu `SELECT`.
  • Domyślny porządek to `ASC` (rosnąco, A-Z, 1-100). Nie trzeba go pisać.
  • Aby sortować malejąco (Z-A, 100-1), musisz *jawnie* użyć `DESC`.
  • Można sortować po wielu kolumnach, podając je po przecinku: `ORDER BY kolumna1, kolumna2`.
  • Poprawna kolejność klauzul to `SELECT... FROM... WHERE... GROUP BY... HAVING... ORDER BY...`.

Najczęściej Zadawane Pytania

Jaka jest różnica między `ASC` a `DESC`?

`ASC` (Ascending) sortuje rosnąco: A, B, C... lub 1, 2, 3... To jest domyślne. `DESC` (Descending) sortuje malejąco: Z, Y, X... lub 100, 99, 98... Trzeba je jawnie napisać.

Czy mogę sortować po kolumnie, której nie ma w `SELECT`?

Tak. Możesz napisać `SELECT imie, nazwisko FROM Uczniowie ORDER BY punkty DESC;`. To zadziała - baza posortuje uczniów po punktach, ale wyświetli tylko ich imiona i nazwiska.

Jaka jest różnica między `ORDER BY` a `GROUP BY`?

`GROUP BY` *zmienia* liczbę wierszy – 'zwija' wiele wierszy (np. 30 uczniów z klasy 1A) w jeden wiersz (np. '1A', 'średnia=85'). `ORDER BY` *nie zmienia* liczby wierszy – tylko zmienia ich kolejność.

Co się stanie, jeśli posortuję po `NULL` (pustych wartościach)?

Zależy od bazy danych. W MySQL (używanym na maturze), wartości `NULL` są traktowane jako mniejsze od wszystkich innych wartości, więc przy sortowaniu `ASC` pojawią się na początku.

Chcesz opanować wszystkie tematy maturalne?

Dołącz do kursu i zyskaj dostęp do interaktywnych lekcji, edytora kodu i setek zadań.

Powiązane Tematy