KWALIFIKACJA INF3 - CZERWIEC 2021 (test 2)

PYTANIE NR 14.
Dana jest tabela uczniowie o polach id, imie, nazwisko, data_ur (format rrrr-mm-dd). Które zapytanie w języku SQL wyświetli tylko imiona i nazwiska uczniów urodzonych w 2001 roku?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Zapytanie z SELECT imie, nazwisko spełnia warunek "tylko imiona i nazwiska". Filtr WHERE data_ur LIKE "2001-%-%" dopasowuje wszystkie daty zaczynające się od "2001-", czyli wszystkie urodzenia w 2001 roku, niezależnie od miesiąca i dnia (symbol % zastępuje dowolny ciąg znaków).

Pełne wyjaśnienie:

W tabeli uczniowie pole data_ur ma zapis daty w formacie rrrr-mm-dd. Aby wyświetlić osoby urodzone w jednym roku, trzeba odfiltrować rekordy tak, by początek zapisu daty wskazywał ten rok.

Poprawne zapytanie to: SELECT imie, nazwisko FROM uczniowie WHERE data_ur LIKE "2001-%-%";

  • SELECT imie, nazwisko – zwraca dokładnie te dwie kolumny, o które pyta zadanie (bez id i bez daty).
  • LIKE – służy do dopasowania wzorca tekstowego.
  • Wzorzec "2001-%-%" oznacza: ciąg zaczynający się od 2001-, a następnie dowolne znaki w miejscu miesiąca i dnia. Znak % jest wieloznacznikiem i może zastąpić dowolny ciąg znaków, więc obejmie wszystkie miesiące (01–12) i dni (01–31).

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

  • SELECT * ... data_ur == 2001-%-% – w SQL standardowo nie używa się operatora ==, a dodatkowo wzorzec nie jest ujęty jako literał tekstowy. Taki zapis jest niepoprawny składniowo w wielu silnikach.
  • SELECT * ... LIKE "2001" – wzorzec nie odpowiada pełnej postaci daty. Data ma postać 2001-..-.., więc dopasowanie samego "2001" zwykle nie zwróci oczekiwanych rekordów.
  • ... LIKE "2001-*-*" – w SQL w operatorze LIKE nie stosuje się gwiazdki * jako wieloznacznika; właściwy jest % (oraz _ dla pojedynczego znaku).

W praktyce często spotyka się też rozwiązanie zakresowe (np. od 2001-01-01 do 2001-12-31), które bywa bardziej przenośne i jednoznaczne, ale w tym zadaniu poprawnie sprawdza się dopasowanie wzorca LIKE.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
LIKE służy do dopasowania wartości tekstowej do wzorca. Najczęściej używa się symbolu % (dowolny ciąg znaków) oraz _ (dokładnie jeden znak). Dzięki temu można filtrować rekordy po fragmencie tekstu, np. po początku daty zapisanej jako tekst.
Wzorzec zaczyna się od stałego prefiksu 2001-, a dalej zawiera %, który dopasuje dowolny ciąg znaków (miesiąc i dzień). W efekcie pasują wszystkie wartości dat w formacie YYYY-MM-DD, których rok to 2001.
W SQL (LIKE) standardowym wieloznacznikiem jest %. Gwiazdka * kojarzy się z maskami w systemach plików lub niektórymi narzędziami, ale nie jest poprawnym symbolem w LIKE. Użycie * w LIKE zwykle powoduje brak dopasowań albo błąd.
Technicznie SELECT * zwraca wszystkie kolumny, ale nie spełnia warunku "tylko imiona i nazwiska". Na egzaminie takie zapytanie należy uznać za błędne, bo wynik zawierałby też np. id i datę urodzenia, czyli dane, których nie proszono wyświetlać.
Typowym rozwiązaniem jest filtr zakresowy, np. data_ur od 2001-01-01 do 2001-12-31. Jest to czytelne i dobrze działa dla kolumn typu DATE. Konkretna składnia zależy od silnika bazy, ale idea polega na porównaniu dat w określonym przedziale.
Różnice mogą dotyczyć m.in. czułości na wielkość liter, trybu porównań (kolacje) i dopuszczalnej składni literałów tekstowych. Dlatego w zadaniach egzaminacyjnych warto trzymać się najczęściej spotykanych zapisów i jednoznacznych wzorców.
Nie. Może być zapisana jako typ DATE (wtedy baza przechowuje ją jako datę, a format to sposób prezentacji) albo jako tekst. W obu przypadkach można czasem użyć LIKE, ale dla typu DATE częściej zaleca się warunki zakresowe lub funkcje wyciągające rok.
Częste błędy to: użycie == zamiast =, użycie * zamiast %, wpisanie zbyt krótkiego wzorca (np. samo "2001"), oraz wybór niewłaściwych kolumn w SELECT. Warto sprawdzać, czy zapytanie spełnia dokładnie treść polecenia.
W wielu silnikach istnieją funkcje wyodrębniające rok z daty (np. YEAR() lub EXTRACT). Ich nazwy i szczegóły zależą od bazy danych. Na egzaminie ważne jest rozpoznanie, że takie podejście bywa poprawniejsze dla typu DATE niż traktowanie daty jak tekstu.
Najbezpieczniej zakładać, że literały tekstowe zapisuje się w cudzysłowach (często pojedynczych). Jeśli w odpowiedziach tylko jedna opcja ma spójną składnię SQL (SELECT wskazuje wymagane kolumny i WHERE ma poprawny wzorzec LIKE), zwykle jest to właściwy wybór.
info

To pytanie poprawnie rozwiązuje 57% zdających egzamin. średnie

W praktyce zawodowej kluczowe jest to, że zapytanie z SELECT imie, nazwisko spełnia warunek "tylko imiona i nazwiska".

Źródła:

  • MySQL 8.0 Reference Manual: String comparison functions and operators – LIKE, https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_like (dostęp: 2026-03-01)
  • PostgreSQL Documentation: Functions and Operators – Pattern Matching (LIKE), https://www.postgresql.org/docs/current/functions-matching.html (dostęp: 2026-03-01)
  • SQLite Documentation: The LIKE and GLOB operators, https://www.sqlite.org/lang_expr.html#the_like_glob_regexp_and_match_operators (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja wybranego dialektu SQL (MySQL/PostgreSQL/SQLite) – LIKE i literały tekstowe
  • Materiały do INF.3 dotyczące podstaw zapytań SELECT i filtrów WHERE
  • Ćwiczenia praktyczne: zapytania filtrujące po dacie (zakres, funkcje daty, LIKE)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego