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

Aby za pomocą polecenia SELECT wyświetlić nazwiska osób mieszkających na osiedlu tak, aby te nazwiska nie powtarzały się, należy zapisać zapytanie w postaci

A.
SELECT DISTINCT nazwisko FROM mieszkancy;
B.
SELECT AVG(nazwisko) FROM mieszkancy;
C.
SELECT TOP 10 nazwisko FROM mieszkancy;
D.
SELECT nazwisko FROM mieszkancy ORDER BY nazwisko;

Pytanie z egzaminu CKE, czerwiec 2020 (arkusz EE.09-SG-20.06).

W tym zapytaniu kluczowe jest użycie słowa DISTINCT: SELECT DISTINCT nazwisko FROM mieszkancy;. W SQL oznacza ono, że wynik ma zawierać tylko unikalne wartości z wybranej kolumny lub zestawu kolumn. Czyli jeśli w tabeli mieszkancy kilka osób ma nazwisko Kowalski, to w wyniku zobaczysz je tylko raz. To jest dokładnie to, o co chodzi w pytaniu: wyświetlić nazwiska bez powtórzeń. Moim zdaniem warto zapamiętać, że DISTINCT działa na wynik zapytania, a nie usuwa danych z tabeli. Baza nadal przechowuje wszystkie rekordy mieszkańców, tylko prezentacja danych jest oczyszczona z duplikatów. W praktyce używa się tego np. do listy miast klientów, nazwisk mieszkańców, kategorii produktów albo działów pracowników. Dobrą praktyką jest też, jeśli wynik ma być czytelny, dopisać sortowanie: SELECT DISTINCT nazwisko FROM mieszkancy ORDER BY nazwisko;. DISTINCT jest elementem standardowego SQL i działa w większości systemów baz danych, choć szczegóły sortowania mogą zależeć od ustawień porównywania tekstu, czyli tzw. collation.
W tym zadaniu łatwo pomylić kilka różnych operacji wykonywanych przez SELECT, bo wszystkie wyglądają podobnie: coś wybieramy z tabeli i dostajemy wynik. Samo SELECT nazwisko FROM mieszkancy ORDER BY nazwisko; tylko sortuje rekordy według nazwiska. ORDER BY porządkuje dane alfabetycznie, ale nie usuwa powtórzeń. Jeśli w tabeli są trzy osoby o nazwisku Nowak, to po sortowaniu nadal pojawią się trzy wiersze z tym samym nazwiskiem, tylko będą ustawione obok siebie. To częsty błąd myślowy: uporządkowanie danych wydaje się czasem tym samym co ich pogrupowanie, ale w SQL to zupełnie inna rzecz. Konstrukcja SELECT TOP 10 nazwisko FROM mieszkancy; ogranicza liczbę zwracanych rekordów, zwykle do dziesięciu pierwszych według domyślnej kolejności albo według ORDER BY, jeśli go dodamy. Nie gwarantuje unikalności, więc może zwrócić dziesięć wierszy, w tym powtarzające się nazwiska. Do tego TOP jest charakterystyczne głównie dla MS SQL Server, a nie jest najbardziej uniwersalnym rozwiązaniem w standardowym SQL. Z kolei AVG(nazwisko) jest merytorycznie nietrafione, bo AVG oblicza średnią arytmetyczną z danych liczbowych. Nazwisko to tekst, a nie wartość numeryczna, więc taka funkcja agregująca nie ma tu sensu i w wielu bazach zakończy się błędem. Właściwe podejście polega na świadomym użyciu DISTINCT, bo ono usuwa duplikaty z wyniku zapytania bez modyfikowania tabeli źródłowej.

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.