Polecenie usuwające rekordy z tabeli ma w SQL postać DELETE FROM nazwa_tabeli WHERE warunek;. Kluczowe są tu dwa elementy: brak listy kolumn (w DELETE nie wskazuje się kolumn jak w SELECT) oraz warunek ograniczający, które wiersze mają zostać skasowane.
Aby usunąć wiersze, w których w polu tresc występuje ciąg znaków "sto" w dowolnym miejscu, stosuje się operator LIKE z symbolem %. Znak % oznacza "dowolny (także pusty) ciąg znaków", więc wzorzec %sto% dopasuje m.in. "sto", "postój", "masto", "zastopowany" (o ile kolacja/porównanie w danym DBMS na to pozwala).
Dlatego poprawne zapytanie to: DELETE FROM artykuly WHERE tresc LIKE "%sto%";
Dlaczego pozostałe propozycje są błędne?
- Warianty zawierające DELETE * są niezgodne z typową składnią SQL. Gwiazdka kojarzy się z SELECT (wybór wszystkich kolumn), ale w DELETE nie używa się jej w ten sposób.
- Warianty używające operatora = z wartością "%sto%" traktują znaki % jak zwykłe znaki tekstu. W takim porównaniu rekord spełni warunek tylko wtedy, gdy pole tresc jest dokładnie równe ciągowi "%sto%", co nie odpowiada wymaganiu "w dowolnym miejscu".
W praktyce przed wykonaniem DELETE warto najpierw sprawdzić, które rekordy zostaną objęte operacją, np. analogicznym SELECT z tym samym warunkiem. W systemach produkcyjnych istotne są też transakcje i kopie zapasowe, bo operacja jest destrukcyjna.