KWALIFIKACJA INF3 - CZERWIEC 2022 (test 2)

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:
Raport dzienny ma pokazać wyłącznie tytuły książek wypożyczonych w danym dniu. Dlatego zapytanie musi wybierać tylko kolumnę tytul i ograniczać wynik klauzulą WHERE do rekordów, których data_wypoz równa się bieżącej dacie zwracanej przez funkcję daty.

Pełne wyjaśnienie:

Wymaganie raportu brzmi: "każdego dnia generowany jest raport książek wypożyczonych danego dnia" oraz "wyświetlane są jedynie tytuły książek". To narzuca dwie kluczowe cechy zapytania:

  • Projekcja (SELECT) ma zwracać tylko jedną kolumnę: tytul.
  • Selekcja (WHERE) ma odfiltrować tylko te rekordy, które dotyczą bieżącego dnia, czyli takie, gdzie data_wypoz odpowiada dzisiejszej dacie.

Zapytanie SELECT tytul FROM ksiazki WHERE data_wypoz = CURRENT_DATE(); spełnia oba warunki: pobiera wyłącznie tytuły i jednocześnie ogranicza wynik do wierszy z datą wypożyczenia równą bieżącej dacie.

Dlaczego pozostałe propozycje nie spełniają wymagań?

  • SELECT tytul FROM ksiazki; zwraca tytuły wszystkich książek z tabeli, bez rozróżnienia daty wypożyczenia. Brakuje filtra na "danego dnia", więc raport nie jest dzienny.
  • SELECT * FROM ksiazki; dodatkowo zwraca wszystkie kolumny (m.in. identyfikatory i datę), co łamie warunek "wyświetlane są jedynie tytuły". Nawet gdyby potem aplikacja ukryła kolumny, zapytanie nadal pobiera dane nadmiarowe.
  • SELECT tytul, data_wypoz FROM ksiazki WHERE data_wypoz = CURRDATE_NT_E(); nie spełnia wymogu "jedynie tytuły" (zwraca też datę) oraz zawiera niepoprawną nazwę funkcji daty, co w praktyce zakończy się błędem składniowym lub wykonania.

Wskazówka egzaminacyjna: w zadaniach "raport za dany dzień" zawsze sprawdź, czy zapytanie ma WHERE z porównaniem do bieżącej daty oraz czy lista kolumn w SELECT nie zawiera danych zbędnych dla raportu.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To zestawienie rekordów ograniczone do wierszy, których data wypożyczenia odpowiada jednemu konkretnemu dniowi (zwykle "dzisiaj"). W SQL realizuje się to przez WHERE na kolumnie daty oraz wybór tylko potrzebnych kolumn w SELECT.
WHERE wybiera tylko te wiersze tabeli, które spełniają podany warunek. Dla raportu dziennego typowo porównuje się kolumnę typu DATE z bieżącą datą. Jeśli kolumna zawiera także czas (DATETIME), porównanie "=" może wymagać innego podejścia.
SELECT * pobiera wszystkie kolumny, także te niepotrzebne w raporcie (np. identyfikatory). To zwiększa ilość danych do przesłania i przetworzenia oraz nie spełnia wymogu "wyświetlane są jedynie tytuły". Lepsze jest jawne wskazanie kolumn, np. tytul.
Zależy od silnika bazy. Przykładowo w PostgreSQL używa się current_date, a w MySQL spotyka się CURRENT_DATE() lub CURDATE(). Na egzaminie warto rozpoznać dialekt SQL w zadaniu lub w materiałach do nauki.
Gdy data_wypoz przechowuje datę i czas (np. typ DATETIME). Wtedy równość do samej daty może nie dopasować żadnego wiersza, bo wartości zawierają godziny. W praktyce stosuje się zakres (od początku do końca dnia) albo funkcję wyodrębniającą datę.
Po pierwsze, czy w SELECT są tylko potrzebne kolumny (tu: tytuł). Po drugie, czy jest filtr WHERE ograniczający rekordy do właściwej daty. Po trzecie, czy użyta funkcja daty jest poprawnie zapisana dla danego silnika.
Wynik powinien zawierać tylko jedną kolumnę: tytul. Dodanie innych pól (np. data_wypoz lub identyfikatorów) nie spełnia wymogu raportu "wyświetlane są jedynie tytuły". Jeśli potrzebujesz daty do filtrowania, używasz jej w WHERE, nie w wyniku.
Silnik bazy danych rozpoznaje tylko poprawne słowa kluczowe i nazwy funkcji. Literówka powoduje błąd składni lub wykonania, a zapytanie nie zwróci wyniku. Na egzaminie często jest to celowy "haczyk", aby sprawdzić, czy umiesz ocenić poprawność składni.
Tak, jeśli aplikacja przekaże konkretną datę jako parametr (np. z formularza) i wstawi ją do warunku WHERE. Wtedy zapytanie filtruje po podanej wartości. Funkcja bieżącej daty jest wygodna, gdy raport ma powstawać automatycznie "na dziś".
Sprawdź dwa elementy: (1) czy zapytanie zwraca dokładnie to, co ma być wyświetlane (tu: tylko tytuły), oraz (2) czy zawiera warunek ograniczający do bieżącego dnia. Odrzucaj propozycje bez WHERE, z * albo z ewidentnymi błędami składni.
info

Statystycznie 68% uczniów zna prawidłową odpowiedź. średnie

Eksperci podkreślają: "Raport dzienny ma pokazać wyłącznie tytuły książek wypożyczonych w danym dniu."

Źródła:

  • MySQL 8.0 Reference Manual: Date and Time Functions — CURRENT_DATE, CURRENT_DATE() (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 — current_date (https://www.postgresql.org/docs/current/functions-datetime.html) - dostęp 2026-02-27
  • SQLite Documentation: Built-In Date And Time Functions — date('now') i funkcje czasu (https://www.sqlite.org/lang_datefunc.html) - dostęp 2026-02-27

Materiały:

  • Dokumentacja SQL dla używanego systemu bazy danych (sekcja SELECT i funkcje daty)
  • Materiały kursowe z podstaw SQL: SELECT, WHERE, typy danych DATE/DATETIME
  • Ćwiczenia praktyczne: tworzenie raportów dziennych/tygodniowych na przykładowej tabeli zdarzeń

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego