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.