KWALIFIKACJA INF3 - STYCZEŃ 2021

PYTANIE NR 16.
Za pomocą którego polecenia SQL można usunąć z tabeli artykuly wiersze zawierające słowo "sto" znajdujące się w dowolnym miejscu pola tresc?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawne usunięcie wierszy wymaga polecenia DELETE FROM z warunkiem WHERE. Aby znaleźć słowo "sto" w dowolnym miejscu pola, używa się LIKE z wieloznacznikiem %, czyli wzorca %sto%. Warianty z DELETE * są niepoprawne, a porównanie = nie działa jak dopasowanie wzorca.

Pełne wyjaśnienie:

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.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
DELETE FROM usuwa całe wiersze (rekordy) z tabeli. Najczęściej łączy się je z WHERE, aby skasować tylko te rekordy, które spełniają warunek. Bez WHERE usunie wszystkie wiersze z tabeli, więc jest to operacja wymagająca dużej ostrożności.
Operator LIKE służy do dopasowania wzorca tekstowego. Znak % oznacza dowolny ciąg znaków (również pusty). Wzorzec %sto% znajdzie tekst zawierający "sto" na początku, w środku lub na końcu pola.
Gwiazdka * jest typowa dla SELECT i oznacza "wszystkie kolumny". W poleceniu DELETE nie wybiera się kolumn do usunięcia, bo zawsze usuwa się całe wiersze. Dlatego składnia z DELETE * jest zwykle niepoprawna.
DELETE FROM tabela; bez warunku WHERE usuwa wszystkie rekordy z tabeli. Struktura tabeli pozostaje, ale dane znikają. W praktyce przed takim działaniem wykonuje się kopię zapasową lub pracuje w transakcji, aby móc wycofać zmianę.
Najbezpieczniej najpierw wykonać SELECT z identycznym warunkiem, np. SELECT * FROM artykuly WHERE tresc LIKE "%sto%";. Dzięki temu widzisz listę rekordów, które spełniają warunek, zanim wykonasz operację usuwania.
Nie. W LIKE znak % to prosty wieloznacznik, a nie pełne wyrażenie regularne. Oznacza "dowolny ciąg znaków". Wiele baz ma osobne mechanizmy dla regex (np. inne operatory/funkcje), ale to zależy od DBMS.
Operator = wymaga dokładnej równości całego pola z podaną wartością. Operator LIKE porównuje pole z wzorcem i pozwala używać wieloznaczników, np. %. Dlatego do wyszukiwania podciągu w tekście stosuje się LIKE, a nie =.
Transakcja jest szczególnie przydatna, gdy usuwasz wiele rekordów i chcesz mieć możliwość cofnięcia operacji. Wtedy można wykonać DELETE, sprawdzić efekt, a następnie zatwierdzić (commit) albo wycofać (rollback) zmiany, jeśli warunek był błędny.
To zależy od DBMS. Często stosuje się dodatkowe ograniczenia w WHERE (np. po dacie, identyfikatorze) albo mechanizmy limitowania liczby wierszy specyficzne dla danej bazy. Na egzaminie kluczowe jest jednak zrozumienie, że LIKE filtruje, a reszta zależy od systemu.
To zależy od bazy danych i jej ustawień (kolacji/porównania). W jednych systemach lub konfiguracjach LIKE może traktować "Sto" i "sto" jako to samo, w innych nie. Na potrzeby typowych zadań egzaminacyjnych przyjmuje się działanie zgodne z konfiguracją DBMS.
info

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

Eksperci podkreślają: "Poprawne usunięcie wierszy wymaga polecenia DELETE FROM z warunkiem 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-27
  • PostgreSQL Documentation: DELETE, https://www.postgresql.org/docs/current/sql-delete.html - accessed 2026-02-27
  • Microsoft Learn: DELETE (Transact-SQL), https://learn.microsoft.com/en-us/sql/t-sql/statements/delete-transact-sql - accessed 2026-02-27

Materiały:

  • Dokumentacja SQL wybranego DBMS (sekcje: DELETE, LIKE, WHERE)
  • Ćwiczenia z zapytań DML na przykładowej bazie (CRUD)
  • Materiały o bezpieczeństwie operacji DELETE (transakcje, kopie zapasowe, LIMIT/ TOP w DBMS)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego