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: Programowanie webowe Bazy danych

Słowa kluczowe: DISTINCT w SQL DQL w SQL GROUP BY w SQL ORDER BY w SQL WHERE w SQL

W języku SQL klauzula DISTINCT instrukcji SELECT sprawi, że zwrócone dane

A. nie będą zawierały powtórzeń.
B. zostaną posortowane.
C. będą spełniały określony warunek.
D. będą pogrupowane według określonego pola.

Pytanie z egzaminu CKE, styczeń 2016 (arkusz E.14-X-16.01).

Klauzula DISTINCT w instrukcji SELECT powoduje, że wynik zapytania nie zawiera powtórzonych wierszy dla wybranych kolumn. Czyli jeśli napiszesz SELECT DISTINCT miasto FROM klienci, baza zwróci każde miasto tylko raz, nawet gdy w tabeli jest wielu klientów z Warszawy, Krakowa albo Gdańska. To jest bardzo praktyczne, gdy chcesz przygotować listę unikalnych wartości, np. listę kategorii produktów, dostępnych województw, loginów użytkowników albo typów zamówień. Ważna rzecz: DISTINCT działa na cały zestaw kolumn podany po SELECT, a nie tylko na jedną kolumnę, jeśli wybierasz ich więcej. Przykład SELECT DISTINCT miasto, kod_pocztowy FROM klienci usuwa powtórzenia par miasto + kod_pocztowy, więc samo miasto może pojawić się kilka razy, jeżeli ma różne kody. Z mojego doświadczenia to jest częsty szczegół, który potem robi zamieszanie w raportach. W dobrych praktykach SQL używa się DISTINCT wtedy, gdy naprawdę potrzebujemy eliminacji duplikatów, a nie jako sposobu na ukrycie źle zaprojektowanego zapytania z niepotrzebnymi złączeniami. Warto też pamiętać, że DISTINCT może zwiększać koszt wykonania zapytania, bo serwer bazy danych musi porównać rekordy i usunąć powtórki.
W tym pytaniu łatwo pomylić DISTINCT z innymi klauzulami języka SQL, bo wszystkie one wpływają na wynik zapytania SELECT, ale robią zupełnie inne rzeczy. Grupowanie danych według pola wykonuje się za pomocą GROUP BY. Ta klauzula służy zwykle do tworzenia zestawień, na przykład liczby zamówień w każdym mieście albo sumy sprzedaży dla każdego pracownika. GROUP BY łączy rekordy w grupy i bardzo często używa się go razem z funkcjami agregującymi, takimi jak COUNT, SUM, AVG, MIN czy MAX. DISTINCT nie tworzy takich grup obliczeniowych, tylko usuwa powtarzające się wiersze z wyniku. Warunek filtrowania rekordów zapisuje się natomiast w klauzuli WHERE. To WHERE decyduje, które rekordy spełniają kryterium, np. cena > 100 albo status = aktywny. DISTINCT nie sprawdza warunku logicznego, tylko działa już na zbiorze wybranych danych i eliminuje duplikaty. Sortowanie to jeszcze inna sprawa, obsługiwana przez ORDER BY. Jeżeli chcesz, żeby wyniki były ułożone alfabetycznie, rosnąco lub malejąco, musisz jawnie dodać ORDER BY. Samo DISTINCT nie gwarantuje kolejności wyników, nawet jeśli w praktyce czasem wydaje się, że dane wyszły uporządkowane. Moim zdaniem to jedna z pułapek w nauce SQL: baza może zwrócić rekordy w pewnym porządku, ale bez ORDER BY nie należy na tym polegać. Typowy błąd myślowy polega na traktowaniu DISTINCT jako ogólnej opcji porządkowania wyniku. A to jest konkretny mechanizm usuwania powtórzeń, przydatny, ale trzeba go stosować świadomie.

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.