KWALIFIKACJA INF3 - STYCZEŃ 2017

PYTANIE NR 20.
W bazie danych MySQL dana jest tabela programów komputerowych o polach: nazwa, producent, rokWydania. Aby kwerenda SELECT zwróciła wszystkie nazwy producentów tak, by nazwy te nie powtarzały się, należy zapisać:
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
DISTINCT w zapytaniu SELECT usuwa powtarzające się wiersze wyników dla wskazanych kolumn. Dlatego, aby otrzymać listę producentów bez duplikatów, należy użyć zapisu SELECT DISTINCT producent FROM programy;. Pozostałe propozycje używają niepoprawnej składni (np. WHERE bez warunku logicznego).

Pełne wyjaśnienie:

W SQL bardzo często potrzebujesz pobrać listę wartości z jednej kolumny tak, aby się nie powtarzały (np. lista producentów do filtra w aplikacji webowej). Domyślnie instrukcja SELECT zwraca wszystkie pasujące wiersze, więc jeśli w tabeli istnieje wiele programów tego samego producenta, nazwa producenta pojawi się w wyniku wiele razy.

Służy do tego słowo kluczowe DISTINCT. Zastosowane po SELECT powoduje, że wynik zawiera tylko unikalne wiersze (dla zestawu wybieranych kolumn). W tym zadaniu wybierana jest pojedyncza kolumna, więc unikalność dotyczy wartości kolumny producent. Zapytanie SELECT DISTINCT producent FROM programy; zwróci więc listę producentów bez powtórzeń.

Dlaczego pozostałe odpowiedzi są błędne?

  • SELECT UNIQUE producent FROM programy; – w MySQL w składni SELECT nie stosuje się słowa kluczowego UNIQUE w tym miejscu, więc jest to zapis niezgodny ze składnią MySQL i nie realizuje poprawnie zadania.
  • SELECT producent FROM programy WHERE UNIQUE; – klauzula WHERE wymaga warunku logicznego (wyrażenia porównania, operatorów logicznych itp.). Samo słowo UNIQUE nie jest warunkiem filtrującym, więc zapytanie jest niepoprawne składniowo.
  • SELECT producent FROM programy WHERE producent NOT DUPLICATE; – taka konstrukcja nie jest poprawną składnią MySQL. Eliminowanie duplikatów nie odbywa się przez "NOT DUPLICATE" w WHERE, tylko przez DISTINCT (lub ewentualnie przez GROUP BY, gdy jest to uzasadnione logiką zapytania).

Wskazówka egzaminacyjna: gdy w treści pojawiają się sformułowania "bez powtórzeń", "unikalne wartości", "bez duplikatów", najczęściej chodzi o użycie DISTINCT (dla kolumn) albo o ograniczenie UNIQUE (jako cechę/indeks w definicji tabeli). W tym zadaniu mowa jest o kwerendzie SELECT, więc właściwy jest DISTINCT.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
DISTINCT usuwa duplikaty z wyniku zapytania. Oznacza to, że dla wskazanych kolumn zwrócone zostaną tylko unikalne wiersze wynikowe, np. lista producentów bez powtórzeń.
Użyj zapytania typu: SELECT DISTINCT producent FROM programy;. Dzięki temu, nawet jeśli w tabeli jest wiele rekordów z tym samym producentem, w wyniku zobaczysz każdą nazwę tylko raz.
Bo SELECT zwraca wartości z każdego pasującego wiersza. Jeśli w tabeli istnieje kilka programów tego samego producenta, to wartość w kolumnie producent powtórzy się w wyniku tyle razy, ile jest takich wierszy.
W kontekście zapytania SELECT w MySQL standardowo używa się słowa DISTINCT. UNIQUE kojarzy się głównie z ograniczeniem/indeksem unikalności w tabeli, a nie z typową składnią SELECT w MySQL na egzaminach.
UNIQUE jako ograniczenie (constraint) oznacza, że w kolumnie lub zestawie kolumn nie mogą pojawić się powtarzające wartości. To mechanizm spójności danych na poziomie tabeli, niezależny od tego, jak piszesz zapytania SELECT.
Najczęściej: pomylenie DISTINCT z UNIQUE, próba użycia WHERE do "usuwania duplikatów", albo brak zrozumienia, że DISTINCT dotyczy całego zestawu wybieranych kolumn (gdy wybierasz więcej niż jedną).
Jeśli wybierasz np. dwie kolumny, DISTINCT usuwa duplikaty całych par (lub krotek) wartości. To znaczy, że unikalność dotyczy kombinacji kolumn, a nie każdej kolumny osobno.
GROUP BY stosuje się głównie do grupowania i obliczeń agregujących (np. COUNT, SUM). Może też dać unikalne wartości, ale semantycznie DISTINCT jest prostsze, gdy chcesz tylko usunąć duplikaty bez liczenia i agregacji.
Tak, bo serwer musi wykryć i usunąć duplikaty (np. przez sortowanie lub strukturę tymczasową). W praktyce przy dużych tabelach warto mieć odpowiednie indeksy i pamiętać, że DISTINCT może być "kosztowniejsze" niż zwykły SELECT.
Przećwicz krótkie wzorce zapytań: SELECT DISTINCT, filtrowanie przez WHERE, sortowanie przez ORDER BY oraz podstawy GROUP BY. Rób zadania na prostych tabelach i sprawdzaj, czy wynik ma duplikaty.
info

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

W praktyce zawodowej kluczowe jest to, że dISTINCT w zapytaniu SELECT usuwa powtarzające się wiersze wyników dla wskazanych kolumn.

Źródła:

  • MySQL 8.0 Reference Manual: "SELECT Statement" (składnia SELECT, użycie DISTINCT/DISTINCTROW), https://dev.mysql.com/doc/refman/8.0/en/select.html - accessed 2026-02-28
  • MySQL 8.0 Reference Manual: "WHERE Clause" (wymóg warunku logicznego w WHERE), https://dev.mysql.com/doc/refman/8.0/en/where-optimization.html - accessed 2026-02-28
  • MySQL 8.0 Reference Manual: "Keywords and Reserved Words" (weryfikacja słów kluczowych i składni), https://dev.mysql.com/doc/refman/8.0/en/keywords.html - accessed 2026-02-28

Materiały:

  • Dokumentacja MySQL: opis składni SELECT i DISTINCT
  • Ćwiczenia: zapytania SELECT dla jednej i wielu kolumn, z DISTINCT i bez
  • Zadania praktyczne: budowa filtrów i list unikalnych wartości w aplikacji webowej

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego