Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Bazy danych

Słowa kluczowe: DELETE w SQL DML w SQL LIKE w SQL

Za pomocą którego polecenia SQL można usunąć z tabeli artykuly wiersze, w których wartość pola tresc zaczyna się od ciągu znaków „sto”?

A.
DELETE FROM artykuly WHERE tresc LIKE "%sto";
B.
DELETE * FROM artykuly WHERE tresc LIKE "sto%";
C.
DELETE FROM artykuly WHERE tresc LIKE "sto%";
D.
DELETE FROM artykuly WHERE tresc = "sto%";
Polecenie DELETE FROM artykuly WHERE tresc LIKE 'sto%'; usuwa z tabeli artykuly tylko te rekordy, dla których zawartość kolumny tresc zaczyna się od znaków sto. Kluczowe jest tutaj użycie operatora LIKE oraz wzorca sto%. Znak % w SQL oznacza dowolny ciąg dalszych znaków, także pusty, więc pasują wartości typu sto, stół, stop, stosunek czy strony, o ile zaczynają się dokładnie od podanego fragmentu. To jest typowa konstrukcja używana przy filtrowaniu tekstu. Samo DELETE FROM wskazuje, że usuwamy całe wiersze, a nie pojedyncze komórki. Warunek WHERE jest bardzo ważny, bo ogranicza operację tylko do wybranych rekordów. Moim zdaniem dobrą praktyką przed takim usuwaniem jest najpierw wykonać SELECT * FROM artykuly WHERE tresc LIKE 'sto%'; i sprawdzić, co faktycznie zostanie usunięte. W pracy z bazą warto też używać transakcji, np. START TRANSACTION, potem DELETE, a na końcu COMMIT albo ROLLBACK, jeśli coś poszło nie tak. W standardowym SQL literały tekstowe zapisuje się zwykle w apostrofach, czyli 'sto%', choć w niektórych systemach, np. w MySQL zależnie od ustawień, spotyka się też cudzysłowy.
W tym zadaniu łatwo pomylić składnię DELETE ze składnią SELECT. Przy usuwaniu rekordów nie podaje się gwiazdki po słowie DELETE. Gwiazdka występuje w zapytaniach SELECT * FROM tabela, bo oznacza pobranie wszystkich kolumn. DELETE działa inaczej: usuwa całe wiersze spełniające warunek, więc poprawna składnia to DELETE FROM nazwa_tabeli WHERE warunek. Dopisanie DELETE * FROM jest typowym błędem osób, które próbują przenieść zapis z pobierania danych na usuwanie danych, ale większość silników SQL tego nie zaakceptuje albo potraktuje jako błąd składni. Ważne jest też rozumienie wzorca w operatorze LIKE. Zapis '%sto' oznacza tekst kończący się na sto, na przykład miasto albo presto, a nie tekst zaczynający się od sto. Jeśli szukamy początku napisu, znaki sto muszą być na początku wzorca, a symbol % dopiero po nich. Równie częsty błąd to użycie operatora = razem z tekstem 'sto%'. Operator równości nie interpretuje procentu jako symbolu wieloznacznego, tylko jako zwykły znak. Takie zapytanie szukałoby wartości dokładnie równej sto%, co w praktyce prawie nigdy nie jest tym, o co chodzi. Do dopasowań tekstowych używa się LIKE, ewentualnie bardziej zaawansowanych wyrażeń regularnych, jeśli baza je obsługuje. Z mojego doświadczenia najbezpieczniej jest przed DELETE odpalić analogiczny SELECT i sprawdzić wynik, bo źle zapisany warunek WHERE może usunąć nie te dane, co trzeba, a czasem nawet bardzo dużo rekordów.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.