Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

Wskaż kwerendę, która z tabeli klienci wybierze jedynie nazwiska trzech najlepszych klientów, czyli takich, którzy na swoim koncie mają najwięcej punktów (pole całkowite punkty).

A.
SELECT nazwisko FROM klienci ORDER BY nazwisko DESC LIMIT 3;
B.
SELECT nazwisko FROM klienci ORDER BY punkty DESC LIMIT 3;
C.
SELECT LIMIT 3 nazwisko FROM klienci ORDER BY nazwisko DESC;
D.
SELECT nazwisko FROM klienci LIMIT 3;

Pytanie z egzaminu CKE, czerwiec 2022 (arkusz EE.09-SG-22.06).

Ta kwerenda spełnia dokładnie warunek z treści zadania: SELECT nazwisko FROM klienci ORDER BY punkty DESC LIMIT 3; wybiera tylko kolumnę nazwisko z tabeli klienci, sortuje rekordy według pola punkty malejąco, a potem ogranicza wynik do trzech pierwszych wierszy. Dzięki ORDER BY punkty DESC na początku listy znajdą się klienci z największą liczbą punktów, czyli właśnie najlepsi klienci według podanego kryterium. LIMIT 3 działa już na posortowanym wyniku, więc dostajemy trzy rekordy z góry rankingu, a nie trzy losowe lub przypadkowe osoby. W praktyce taki zapis jest bardzo typowy np. przy tworzeniu rankingów użytkowników, list TOP 3 klientów, najlepszych sprzedawców albo produktów o najwyższej sprzedaży. Moim zdaniem warto zapamiętać tu prostą zasadę: najpierw ustalamy, po czym sortujemy, a dopiero potem ograniczamy liczbę rekordów. Dobrą praktyką jest też wybieranie tylko potrzebnych kolumn, zamiast SELECT *, bo zmniejsza to ilość przesyłanych danych i poprawia czytelność zapytania. W prawdziwej bazie można by jeszcze rozważyć indeks na kolumnie punkty, szczególnie jeśli tabela klienci ma dużo rekordów i ranking jest często wyświetlany.
W tym zadaniu najważniejsze jest rozróżnienie dwóch rzeczy: według czego sortujemy dane oraz ile rekordów pokazujemy na końcu. Samo użycie LIMIT 3 nie oznacza jeszcze, że baza wybierze trzech najlepszych klientów. Bez poprawnego ORDER BY system bazodanowy może zwrócić trzy rekordy w kolejności wynikającej z planu wykonania zapytania, indeksów albo fizycznego ułożenia danych. To nie jest bezpieczne założenie i w praktyce potrafi dać inne wyniki po zmianie danych, wersji silnika lub dodaniu indeksu. Z mojego doświadczenia to częsty błąd: ktoś widzi LIMIT i myśli, że to już robi ranking, a LIMIT tylko ucina liczbę wierszy. Sortowanie po nazwisku również nie rozwiązuje problemu, bo nazwisko nie mówi nic o liczbie punktów. ORDER BY nazwisko DESC ustawi klientów alfabetycznie od końca, czyli np. nazwiska na Ż czy Z mogą być wyżej niż nazwiska na A, ale to nie ma związku z tym, kto ma najwięcej punktów. Jest też kwestia składni SQL: LIMIT w popularnych dialektach, takich jak MySQL czy PostgreSQL, zapisuje się po klauzuli ORDER BY, a nie bezpośrednio po SELECT przed nazwą kolumny. Poprawne myślenie powinno wyglądać tak: wybieram nazwisko, sortuję rekordy po kolumnie punkty malejąco, następnie biorę pierwsze 3 wiersze. W bazach danych precyzja kolejności klauzul ma znaczenie, bo SQL jest deklaratywny, ale składnię nadal trzeba trzymać zgodnie z regułami danego silnika.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.