ł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