KWALIFIKACJA INF3 - CZERWIEC 2022

PYTANIE NR 17.
Z tabeli mieszkańcy należy wybrać niepowtarzające się nazwy miast, w tym celu należy skorzystać z wyrażenia SQL zawierającego klauzulę
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Aby zwrócić z tabeli niepowtarzające się nazwy miast w wyniku zapytania SELECT, używa się słowa kluczowego DISTINCT. Powoduje ono usunięcie duplikatów z wynikowego zestawu danych. Pozostałe opcje dotyczą innych zastosowań: filtrowania grup, ograniczeń kolumn lub kontroli poprawności danych.

Pełne wyjaśnienie:

W SQL, gdy w tabeli występują powtórzenia tej samej wartości (np. to samo miasto zapisane dla wielu mieszkańców), standardowym sposobem uzyskania listy wartości bez duplikatów w wyniku zapytania jest użycie słowa kluczowego DISTINCT w instrukcji SELECT.

Przykładowo, aby otrzymać listę miast bez powtórzeń, stosuje się zapytanie w rodzaju:


SELECT DISTINCT miasto
FROM mieszkancy;

DISTINCT działa na zestawie zwracanych kolumn (projekcji). Jeżeli wybierzesz jedną kolumnę (np. miasto), to wynik będzie zawierał każdą nazwę miasta tylko raz. Jeżeli wybierzesz kilka kolumn, unikalność dotyczy całych wierszy wynikowych (kombinacji wartości), co jest częstą pułapką na egzaminach.

  • HAVING nie służy do usuwania duplikatów. To element używany po GROUP BY do filtrowania grup na podstawie warunków (zwykle z funkcjami agregującymi). Można nim ograniczać grupy, ale nie jest to mechanizm "wybierz unikalne wartości".
  • UNIQUE w typowych dialektach SQL oznacza ograniczenie (constraint) zapewniające, że w kolumnie lub zestawie kolumn w tabeli nie pojawią się duplikaty podczas wstawiania/aktualizacji danych. To mechanizm integralności danych na poziomie definicji tabeli, a nie klauzula zapytania SELECT do deduplikacji wyników.
  • CHECK również jest ograniczeniem integralności danych. Służy do walidowania, czy wstawiana lub zmieniana wartość spełnia warunek logiczny (np. zakres liczbowy). Nie ma zastosowania do wybierania unikalnych wartości w wyniku zapytania.

Wskazówka egzaminacyjna: gdy pytanie brzmi "niepowtarzające się wartości w wyniku SELECT", niemal zawsze chodzi o DISTINCT. Gdy mowa o "zapewnieniu unikalności w tabeli" lub "blokowaniu duplikatów przy zapisie", wtedy właściwym tropem jest ograniczenie UNIQUE (lub klucz główny), a nie DISTINCT.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
DISTINCT usuwa duplikaty z wyniku zapytania SELECT. Jeśli wybierasz jedną kolumnę, zwróci każdą wartość tylko raz (np. listę miast bez powtórzeń). Przy wielu kolumnach unikalność dotyczy całego wiersza wynikowego, czyli kombinacji wartości.
Najczęściej używa się konstrukcji: SELECT DISTINCT nazwa_kolumny FROM tabela. Przykład: SELECT DISTINCT miasto FROM mieszkancy;. Dzięki temu aplikacja dostaje listę miast bez powtórzeń, np. do formularza lub raportu.
HAVING służy do filtrowania grup po GROUP BY, zwykle z użyciem agregacji (np. COUNT, SUM). Nie jest mechanizmem usuwania duplikatów z projekcji SELECT. DISTINCT działa bezpośrednio na zwracanych kolumnach i eliminuje powtórzenia w wynikach.
UNIQUE to zwykle ograniczenie integralności w definicji tabeli: blokuje zapis duplikatów w kolumnie lub zestawie kolumn. DISTINCT dotyczy tylko wyniku zapytania SELECT i nie zmienia danych w tabeli. To inne poziomy działania: struktura danych vs prezentacja wyniku.
CHECK stosuje się przy projektowaniu tabel, aby wymusić warunek poprawności danych (np. wiek >= 0, status w dozwolonym zbiorze). Nie służy do wybierania unikalnych rekordów w SELECT. W zadaniach o "niepowtarzających się wartościach" właściwym narzędziem jest DISTINCT.
Tak. Gdy użyjesz DISTINCT przy wielu kolumnach, unikalność dotyczy całych wierszy wynikowych. To znaczy, że powtarzające się miasto może pojawić się kilka razy, jeśli różnią się inne wybrane kolumny. Aby dostać unikalne miasta, wybierz tylko kolumnę miasta.
Najczęstsze błędy to: wybór kilku kolumn i oczekiwanie unikalności jednej z nich, mylenie DISTINCT z ograniczeniem UNIQUE w tabeli oraz traktowanie HAVING jako sposobu na "pozbycie się powtórek". Warto rozróżniać: DISTINCT = wynik zapytania, UNIQUE/CHECK = reguły zapisu danych.
Czasem tak, np. przez GROUP BY na danej kolumnie, ale to inny mechanizm i zwykle służy agregacji. Na poziomie egzaminu i podstaw SQL, najprostszą i oczekiwaną odpowiedzią na "niepowtarzające się wartości" jest użycie DISTINCT w SELECT.
Unikalne wartości są często potrzebne do budowy interfejsu: list rozwijanych (np. wybór miasta), filtrów w wyszukiwarce, generowania zestawień oraz ograniczenia ilości danych przesyłanych do przeglądarki. DISTINCT pomaga zwrócić minimalny, "słownikowy" zestaw danych.
Jeśli pytanie dotyczy wyniku zapytania (co ma zwrócić SELECT, lista bez powtórzeń), to chodzi o DISTINCT. Jeśli pytanie dotyczy zapobiegania duplikatom w tabeli podczas INSERT/UPDATE, to chodzi o UNIQUE (lub klucz główny). Słowa "w wyniku" i "w tabeli" są kluczowe.
info

Statystycznie 80% uczniów zna prawidłową odpowiedź. średnio łatwe

Według specjalistów z branży: "Aby zwrócić z tabeli niepowtarzające się nazwy miast w wyniku zapytania SELECT, używa się słowa kluczowego DISTINCT."

Źródła:

  • PostgreSQL Documentation: "SELECT" (sekcja o DISTINCT) https://www.postgresql.org/docs/current/sql-select.html (dostęp: 2026-03-01)
  • MySQL 8.0 Reference Manual: "SELECT Statement" (opis DISTINCT) https://dev.mysql.com/doc/refman/8.0/en/select.html (dostęp: 2026-03-01)
  • SQLite Documentation: "SELECT" (DISTINCT w zapytaniach SELECT) https://www.sqlite.org/lang_select.html (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja wybranego systemu DBMS: opis SELECT i DISTINCT
  • Ćwiczenia praktyczne z zapytań SELECT na przykładowych bazach
  • Materiały dydaktyczne z podstaw relacyjnych baz danych (projekcja, selekcja, agregacja)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego