KWALIFIKACJA INF3 - STYCZEŃ 2024

PYTANIE NR 20.
Baza danych zawiera tabelę ksiazki o polach: tytul, id_autora, data_wypoz, id_czytelnika. Każdego dnia generowany jest raport książek wypożyczonych danego dnia. Wyświetlane są jedynie tytuły książek. Która z kwerend SQL posłuży do stworzenia tego raportu?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Zapytanie raportu dziennego musi zwrócić wyłącznie kolumnę tytułu i ograniczyć wyniki do rekordów, których data wypożyczenia jest równa bieżącej dacie.
Dlatego poprawne jest użycie SELECT tytul oraz warunku WHERE data_wypoz = CURRENT_DATE(); pozostałe opcje nie filtrują lub zwracają zbędne dane.

Pełne wyjaśnienie:

Raport "książek wypożyczonych danego dnia" oznacza, że w wyniku mają znaleźć się wyłącznie te wiersze tabeli ksiazki, dla których pole data_wypoz odpowiada dacie, dla której raport jest generowany (tu: bieżący dzień). Dodatkowo w treści zadania wskazano, że wyświetlane mają być tylko tytuły, więc należy pobrać wyłącznie kolumnę tytul.

Zapytanie SELECT tytul FROM ksiazki WHERE data_wypoz = CURRENT_DATE(); spełnia oba warunki jednocześnie:

  • część SELECT tytul ogranicza wynik do samych tytułów (bez identyfikatorów autora/czytelnika i bez daty),
  • część WHERE data_wypoz = CURRENT_DATE() filtruje rekordy do tych, które mają datę wypożyczenia równą bieżącej dacie zwróconej przez funkcję systemową.

Dlaczego pozostałe propozycje są niepoprawne?

  • SELECT tytul FROM ksiazki; zwraca tytuły wszystkich książek w tabeli, bez ograniczenia do bieżącego dnia, więc nie tworzy raportu dziennego.
  • SELECT * FROM ksiazki; zwraca wszystkie kolumny dla wszystkich wierszy. To łamie wymaganie "wyświetlane są jedynie tytuły" oraz nadal nie zawiera warunku na konkretną datę.
  • SELECT tytul, data_wypoz FROM ksiazki WHERE data_wypoz = CURRDATE_NT_E(); ma dwie wady: zwraca dodatkową kolumnę data_wypoz (a miały być tylko tytuły) oraz używa nazwy funkcji, która nie jest poprawną, typową funkcją zwracającą bieżącą datę w popularnych systemach DB.

W praktyce warto pamiętać, że funkcje daty mogą różnić się w zależności od silnika bazy danych. Na egzaminie kluczowe jest jednak rozpoznanie schematu: wybierz tylko wymagane kolumny + dodaj warunek WHERE ograniczający do danego dnia.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Klauzula WHERE filtruje wiersze zwracane przez zapytanie. Dzięki niej otrzymujesz tylko rekordy spełniające warunek, np. tylko wypożyczenia z bieżącego dnia. Bez WHERE baza zwróci wszystkie wiersze z tabeli, co zwykle nie spełnia wymagań raportu.
CURRENT_DATE() (lub CURRENT_DATE w części dialektów) zwraca bieżącą datę według ustawień serwera bazy danych. Używa się jej w warunkach, gdy chcesz odfiltrować dane "z dzisiaj", np. data_wypoz = CURRENT_DATE().
SELECT * zwraca wszystkie kolumny, także te niepotrzebne w raporcie. Jeśli raport ma pokazać wyłącznie tytuły, poprawne jest wskazanie jednej kolumny: SELECT tytul. To jest czytelniejsze, szybsze i zgodne z wymaganiem "wyświetlane są jedynie tytuły".
Gdy data_wypoz zawiera także godzinę, proste porównanie do bieżącej daty może nie zadziałać wprost. Wtedy zwykle stosuje się zakres (od początku do końca dnia) albo funkcję wyciągającą samą datę. Dokładna składnia zależy od silnika bazy danych.
Najczęstsze pomyłki to: brak warunku WHERE (raport zwraca wszystko), wybór zbyt wielu kolumn (SELECT *), porównywanie DATETIME do DATE bez uwzględnienia godzin oraz użycie nieistniejącej lub błędnie zapisanej funkcji daty. Na egzaminie czytaj uważnie ograniczenia.
Tak. Można przekazać konkretną datę jako parametr (np. z aplikacji WWW) i porównać ją w WHERE. Wtedy zapytanie nie zależy od funkcji typu CURRENT_DATE(), a raport może być generowany dla dowolnego dnia wskazanego przez użytkownika.
Najprościej wykonać zapytanie zwracające datę systemową, np. z użyciem funkcji bieżącej daty dostępnej w danym DBMS. To pomaga wykryć różnice stref czasowych między serwerem aplikacji a serwerem bazy. Konkretna funkcja zależy od silnika bazy.
Raport "z danego dnia" musi zawęzić dane do konkretnej daty. Zapytanie bez WHERE nie ma mechanizmu selekcji, więc pokaże rekordy z wielu dni. To typowy błąd wynikający z pominięcia warunku w treści zadania lub zbyt szybkiego wyboru najprostszego SELECT.
Minimum to tytuł i filtr po dacie wypożyczenia. W realnym systemie często dodaje się też autora, identyfikator czytelnika, godzinę wypożyczenia, a czasem status (oddana/nieoddana). W zadaniu egzaminacyjnym trzeba jednak trzymać się wymogu "tylko tytuły".
Ćwicz rozpoznawanie: jakie kolumny mają być zwrócone (SELECT), jakie warunki trzeba spełnić (WHERE) i czy potrzebne są sortowanie, łączenia lub agregacje. Rób krótkie zadania na filtrację po dacie i tekście. Zawsze sprawdzaj, czy wynik nie zawiera zbędnych kolumn.
info

Około 58% zdających odpowiada poprawnie na to pytanie. średnie

Źródła:

  • MySQL 8.0 Reference Manual: "CURRENT_DATE(), CURDATE()" (Date and Time Functions) – https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html (dostęp: 2026-02-27)
  • PostgreSQL Documentation: "Date/Time Functions and Operators" (m.in. current_date) – https://www.postgresql.org/docs/current/functions-datetime.html (dostęp: 2026-02-27)
  • SQLite Documentation: "Date And Time Functions" (date('now')) – https://www.sqlite.org/lang_datefunc.html (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja używanego systemu DB w zakresie funkcji daty i czasu
  • Ćwiczenia z zapytań SELECT z warunkami WHERE dla pól typu DATE/DATETIME
  • Zadania praktyczne: raporty dzienne/tygodniowe z wykorzystaniem filtrów czasu

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego