KWALIFIKACJA INF3 - CZERWIEC 2022

PYTANIE NR 24.
Sklep internetowy korzysta z tabeli faktury. Podczas tworzenia faktury nie zawsze pole dataPlatnosci jest wypełniane. Aby to naprawić, na koniec dnia należy wpisać aktualną datę do wierszy, w których to pole jest puste (niewypełnione). Można w tym celu posłużyć się kwerendą
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Brak daty płatności oznacza zwykle wartość NULL, więc warunek powinien wyszukiwać rekordy przez IS NULL.
Zapytanie UPDATE ustawia dataPlatnosci na bieżącą datę (CURDATE()) tylko dla wierszy z niewypełnionym polem, bez zmiany rekordów już uzupełnionych.

Pełne wyjaśnienie:

W bazach danych "puste" pole daty najczęściej oznacza brak wartości, czyli NULL. Tego stanu nie sprawdza się operatorem "=" (równość), tylko specjalnym predykatem IS NULL. Dlatego poprawna kwerenda musi:

  • użyć UPDATE do modyfikacji istniejących rekordów,
  • ustawić kolumnę dataPlatnosci na bieżącą datę (funkcja typu CURDATE() w popularnych dialektach),
  • ograniczyć zakres zmian do rekordów, gdzie data nie jest wpisana, czyli WHERE dataPlatnosci IS NULL.

Odpowiedź z CURTIME() jest błędna w tym zadaniu, ponieważ wstawia czas, a nie datę (a typ kolumny daty może nie przyjąć wartości czasu lub spowoduje niepożądane konwersje). Zapytanie aktualizujące rekord "WHERE id = 3" też nie spełnia wymagania, bo obejmuje tylko jeden wskazany wiersz, a celem jest uzupełnienie wszystkich brakujących pól na koniec dnia.

Warunek IS NOT NULL działa odwrotnie niż potrzeba: wybrałby rekordy już uzupełnione i nadpisał prawidłowe dane bieżącą wartością, co jest typowym błędem logicznym w kwerendach masowych.

Wariant z porównaniem do wartości w stylu "0000-00-00" bywa spotykany w niektórych bazach/ustawieniach, ale nie jest równoważny z NULL i nie wynika wprost z treści zadania. Egzaminacyjnie kluczowe jest rozpoznanie, że "niewypełnione" pole w relacyjnej bazie danych modeluje się jako NULL i filtruje przez IS NULL.

Wskazówka praktyczna: przed wykonaniem UPDATE w systemie produkcyjnym warto najpierw wykonać SELECT z tym samym warunkiem WHERE, aby sprawdzić liczbę rekordów, które zostaną zmienione.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
NULL oznacza brak wartości, a nie "pusty tekst" ani "zero". W kontekście daty płatności znaczy to, że data nie została ustawiona w ogóle. Taki stan sprawdza się warunkiem IS NULL, a nie porównaniem typu = '' czy = 0.
Stosuje się instrukcję UPDATE z warunkiem wybierającym wyłącznie rekordy z brakiem wartości, np. przez WHERE ... IS NULL. Następnie w SET podaje się funkcję zwracającą bieżącą datę (w wielu dialektach: CURDATE()), aby nie nadpisać już poprawnie uzupełnionych wierszy.
NULL nie jest "zwykłą" wartością, tylko specjalnym markerem braku danych. Porównania równości z NULL nie działają jak dla liczb czy tekstu, więc warunek = NULL nie daje oczekiwanego filtrowania. Poprawnie używa się predykatów IS NULL oraz IS NOT NULL.
Nie. Funkcja typu CURDATE() zwraca bieżącą datę, a funkcja typu CURTIME() zwraca bieżący czas. W zadaniu o uzupełnianiu daty płatności należy użyć funkcji daty; wstawienie czasu może być błędne typowo (niezgodny typ) lub logicznie (inna informacja).
Warunek typu WHERE id = ... stosuje się, gdy chcesz zmienić pojedynczy, konkretny rekord (np. korekta jednej faktury). W tym zadaniu celem jest masowa naprawa wielu wierszy z brakującą datą, więc filtr powinien opierać się na stanie kolumny (np. NULL), a nie na jednym identyfikatorze.
Najbezpieczniej wykonać najpierw SELECT z identycznym warunkiem z klauzuli WHERE, np. wyświetlić rekordy, gdzie data jest niewypełniona. Dzięki temu wiesz, ile wierszy spełnia warunek i czy filtr jest poprawny. Dopiero potem uruchamiasz UPDATE, aby uniknąć masowego nadpisania danych.
Tak, zależy od projektu bazy i aplikacji. Można rozważyć wartość domyślną kolumny, logikę w aplikacji przy INSERT, albo mechanizmy automatyzujące (np. procedury/zdarzenia, jeśli są dostępne i dopuszczone). Trzeba jednak uważać, by automaty nie maskowały błędów procesu wystawiania faktury.
Taki warunek wybierze rekordy, które już mają ustawioną datę płatności. W efekcie UPDATE nadpisze poprawne wartości bieżącą datą, co fałszuje historię płatności i psuje dane księgowe. W zadaniach o "uzupełnianiu braków" filtr niemal zawsze powinien wskazywać braki: IS NULL.
Najczęściej tak, ale nie zawsze. Czasem spotyka się inne reprezentacje braku danych (np. specjalna data, pusty string w kolumnie tekstowej). Na egzaminie, jeśli w treści jest "pole jest puste/niewypełnione" i nie podano innej konwencji, standardową interpretacją w relacyjnych bazach jest NULL.
Najczęstsze pułapki to: użycie złej funkcji (czas zamiast daty), odwrócony warunek (IS NOT NULL zamiast IS NULL), brak WHERE (aktualizacja całej tabeli) oraz filtr po jednym id zamiast po stanie kolumny. Warto trenować schemat: najpierw SELECT z WHERE, potem dopiero UPDATE.
info

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

Źródła:

  • MySQL 8.0 Reference Manual: UPDATE Statement, https://dev.mysql.com/doc/refman/8.0/en/update.html - accessed 2026-03-02
  • MySQL 8.0 Reference Manual: CURDATE() and related date functions, https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_curdate - accessed 2026-03-02
  • MySQL 8.0 Reference Manual: Working with NULL (IS NULL / IS NOT NULL), https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html - accessed 2026-03-02

Materiały:

  • Dokumentacja silnika bazy danych: sekcja UPDATE oraz funkcje daty i czasu
  • Ćwiczenia z zapytań modyfikujących dane: UPDATE/INSERT/DELETE z warunkami
  • Materiały o modelowaniu danych: wartości NULL, ograniczenia kolumn, wartości domyślne

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego