Baza danych zawiera tabelę faktury o polach: numer, data, id_klienta, wartosc, status. Dla klienta o identyfikatorze 5 należy wyświetlić jedynie numery i wartości jego faktur, uporządkowane od najwyższej do najniższej wartości. Która z kwerend SQL służy do stworzenia tego zestawienia?
A.
SELECT numer, wartosc FROM faktury WHERE id_klienta = 5 ORDER BY wartosc;
B.
SELECT numer, wartosc FROM faktury ORDER BY wartosc DESC;
C.
SELECT * FROM faktury WHERE id_klienta = 5 ORDER BY wartosc DESC;
D.
SELECT numer, wartosc FROM faktury WHERE id_klienta = 5 ORDER BY wartosc DESC;
Ta kwerenda spełnia dokładnie wszystkie warunki z treści zadania: wybiera tylko kolumny numer oraz wartosc, pobiera dane z tabeli faktury, ogranicza wynik do klienta o identyfikatorze 5 i sortuje rekordy malejąco według wartości faktury. Klauzula SELECT numer, wartosc jest tu ważna, bo w praktyce nie powinno się pobierać danych, które nie są potrzebne w zestawieniu. To jest dobra praktyka wydajnościowa i organizacyjna: mniejszy wynik, czytelniejszy raport, mniej danych przesyłanych między serwerem bazy a aplikacją. Warunek WHERE id_klienta = 5 działa jak filtr, czyli zostawia tylko faktury jednego klienta. ORDER BY wartosc DESC oznacza sortowanie od największej wartości do najmniejszej, co pasuje do polecenia „od najwyższej do najniższej wartości”. Z mojego doświadczenia takie zapytanie często pojawia się np. w panelu księgowym albo CRM, gdy trzeba szybko sprawdzić największe faktury danego kontrahenta. W większej bazie warto też pomyśleć o indeksie na id_klienta, a czasem nawet o indeksie złożonym id_klienta, wartosc, bo wtedy filtrowanie i sortowanie może działać zauważalnie szybciej.
W tym zadaniu łatwo pomylić kilka elementów składni SQL, bo wszystkie zapytania wyglądają dość podobnie. Trzeba jednak bardzo dokładnie czytać polecenie: mają być wyświetlone jedynie numery i wartości faktur, tylko dla klienta o identyfikatorze 5, a wynik ma być uporządkowany malejąco według wartości. Jeżeli zapytanie używa SELECT *, to technicznie znajdzie faktury klienta i nawet może je dobrze posortować, ale zwróci także pola data, id_klienta oraz status. To nie jest zgodne z wymaganiem „jedynie numery i wartości”. W aplikacjach produkcyjnych SELECT * bywa też słabą praktyką, bo pobiera nadmiarowe dane i uzależnia kod od struktury tabeli. Jeśli w zapytaniu brakuje DESC przy ORDER BY wartosc, baza zwykle zastosuje sortowanie rosnące, czyli od najmniejszej wartości do największej. To odwrotność tego, czego oczekuje raport. Z kolei brak warunku WHERE id_klienta = 5 powoduje, że zestawienie obejmie faktury wszystkich klientów, a nie jednego wskazanego klienta. To typowy błąd myślowy: ktoś skupia się na wyborze kolumn i sortowaniu, ale zapomina o filtrze. Poprawne zapytanie musi połączyć wszystkie trzy rzeczy naraz: precyzyjny SELECT, właściwy WHERE oraz ORDER BY z kierunkiem DESC. Dopiero wtedy wynik jest i merytorycznie poprawny, i zgodny z dobrą praktyką pracy z relacyjną bazą danych.