KWALIFIKACJA INF3 - STYCZEŃ 2017

PYTANIE NR 16.
Dana jest tabela pracownicy. Polecenie MySQL usuwające wszystkie rekordy z tabeli, dla których nie wypełniono pola rodzaj_umowy, ma postać
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Brak wypełnienia pola w bazie danych oznacza zwykle wartość NULL.
Instrukcja usuwająca tylko te wiersze musi użyć DELETE FROM oraz warunku WHERE ... IS NULL. Polecenia z DROP dotyczą obiektów (np. tabel), a porównanie do tekstu 'brak' nie jest równoważne z NULL.

Pełne wyjaśnienie:

W relacyjnych bazach danych (w tym w MySQL) "nie wypełniono pola" najczęściej oznacza, że w kolumnie znajduje się wartość NULL (brak wartości), a nie liczba 0 ani napis typu "brak". Dlatego, aby usunąć wszystkie rekordy spełniające warunek braku danych w kolumnie rodzaj_umowy, należy użyć instrukcji DML:

DELETE FROM pracownicy WHERE rodzaj_umowy IS NULL;

Kluczowe są tu dwa elementy:

  • DELETE FROM pracownicy – usuwa wiersze (rekordy) z tabeli, ale nie usuwa samej tabeli.
  • WHERE rodzaj_umowy IS NULL – filtruje tylko te wiersze, w których kolumna ma wartość NULL. W SQL nie sprawdza się NULL operatorem "=" (porównania z NULL nie działają jak z typowymi wartościami), tylko predykatem IS NULL.

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

  • DROP ... dotyczy języka DDL (np. DROP TABLE) i służy do usuwania obiektów bazy, a nie wybranych rekordów. Dodatkowo w MySQL nie stosuje się konstrukcji "DROP [tabela] WHERE ...".
  • DELETE pracownicy WHERE ... jest niepoprawne składniowo w MySQL, bo brakuje słowa FROM.
  • Warunek rodzaj_umowy = 'brak' usuwałby tylko wiersze, gdzie wpisano dosłownie tekst "brak". To inny przypadek niż NULL i zależy od przyjętej konwencji danych.
  • Porównywanie do 0 również nie jest tożsame z NULL i dodatkowo sugeruje typ liczbowy, co może być sprzeczne z typem kolumny.

W praktyce, przed wykonaniem DELETE warto najpierw sprawdzić, które rekordy zostaną usunięte, wykonując analogiczne zapytanie SELECT z tym samym warunkiem.

Dodatkowe pytania

Dodatkowe pytania (FAQ):

NULL oznacza brak wartości (nieznane/nieustalone), a nie pusty tekst ani 0.

To ważne, bo NULL sprawdza się predykatem IS NULL, a nie operatorem =.

Użyj instrukcji DELETE z warunkiem WHERE i predykatem IS NULL, np. DELETE FROM tabela WHERE kolumna IS NULL;.

To usuwa tylko pasujące wiersze, a nie całą tabelę.

NULL nie jest "zwykłą wartością", tylko oznacza brak/nieznane.

Porównania typu = NULL nie zwracają prawdy w standardowym sensie, dlatego stosuje się IS NULL lub IS NOT NULL.

DELETE usuwa wiersze z tabeli (operacja na danych, DML), zwykle z warunkiem WHERE.

DROP TABLE usuwa całą tabelę jako obiekt bazy (DDL) razem z jej strukturą.

Najczęściej tak, ale zależy od aplikacji i konwencji danych.

Czasem brak danych bywa zapisywany jako pusty napis lub specjalny tekst (np. "brak"). Na egzaminie zwykle "nie wypełniono" odnosi się do NULL.

Najpierw wykonaj SELECT z identycznym warunkiem, np. SELECT * FROM pracownicy WHERE rodzaj_umowy IS NULL;.

Dopiero po weryfikacji wyników uruchom odpowiadające mu DELETE.

Tak: DELETE FROM tabela; usuwa wszystkie wiersze.

W tym zadaniu wymagane jest usunięcie tylko rekordów z brakującą wartością, więc potrzebny jest warunek WHERE ... IS NULL.

Gdy chcesz wybrać lub modyfikować tylko rekordy z uzupełnioną wartością.

Przykładowo do raportów lub walidacji danych: SELECT ... WHERE kolumna IS NOT NULL pomija rekordy z brakami.

Nie. 'brak' to zwykły napis zapisany w bazie, a NULL to brak wartości.

Warunek kolumna = 'brak' zadziała tylko na wiersze z takim tekstem, a kolumna IS NULL tylko na wiersze z NULL.

Częste błędy to pominięcie słowa FROM, użycie DROP zamiast DELETE oraz próba sprawdzania NULL przez = NULL.

Warto zapamiętać schemat: DELETE FROM tabela WHERE warunek;.

info

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

W praktyce zawodowej kluczowe jest to, że brak wypełnienia pola w bazie danych oznacza zwykle wartość NULL.Instrukcja usuwająca tylko te wiersze musi użyć DELETE FROM oraz warunku WHERE ...

Źródła:

  • MySQL 8.0 Reference Manual: DELETE Statement, https://dev.mysql.com/doc/refman/8.0/en/delete.html - accessed 2026-02-28
  • MySQL 8.0 Reference Manual: Working with NULL Values (IS NULL / IS NOT NULL), https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html - accessed 2026-02-28
  • MySQL 8.0 Reference Manual: DROP TABLE Statement, https://dev.mysql.com/doc/refman/8.0/en/drop-table.html - accessed 2026-02-28

Materiały:

  • Dokumentacja MySQL: instrukcja DELETE (manual reference)
  • Dokumentacja MySQL: porównywanie z NULL (IS NULL, IS NOT NULL)
  • Ćwiczenia SQL: operacje DML vs DDL (DELETE vs DROP)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego