CodeGym /Kursy /SQL SELF /Użycie WHERE przy aktualizacji i usuwaniu d...

Użycie WHERE przy aktualizacji i usuwaniu danych

SQL SELF
Poziom 21 , Lekcja 4
Dostępny

Wyobraź sobie, że jesteś adminem bazy danych i musisz zmienić albo usunąć jakieś rekordy. Ale co, jeśli przypadkiem zaktualizujesz albo usuniesz wszystko? Użycie operatora WHERE to twój "ubezpieczeniowy polis" przeciwko katastrofalnym błędom. Pozwala dokładnie wskazać, które wiersze mają być zmienione w wyniku zapytania.

Na przykład:

UPDATE students
SET status = 'Graduated';
To zapytanie zaktualizuje absolutnie wszystkie wiersze w tabeli students. A wyobraź sobie, że zamiast gratulacji z okazji ukończenia, przypadkiem ustawiłeś wszystkim status = 'Expelled'. Straszne, nie? Żeby tego uniknąć, zawsze używamy WHERE, żeby wskazać warunki, które określają, które wiersze mają być zaktualizowane lub usunięte.

Składnia warunku WHERE

WHERE służy do filtrowania wierszy, do których stosowany jest operator. Możesz go użyć w poleceniu UPDATE albo DELETE. Składnia wygląda tak:

Dla UPDATE:

UPDATE tabela
SET kolumna1 = wartość1, kolumna2 = wartość2
WHERE warunek;

Dla DELETE:

DELETE FROM tabela
WHERE warunek;

Bez WHERE zmiany dotkną wszystkich wierszy w tabeli. Dlatego zawsze staraj się podawać warunki, żeby nie zmienić danych, których nie chciałeś ruszać.

Użycie operatorów porównania

Do budowania warunków w WHERE używamy operatorów porównania. Zobaczmy najważniejsze z nich:

Operator Opis Przykład
= Równe age = 18
<> Nie równe age <> 18
> Większe age > 18
< Mniejsze age < 18
>= Większe lub równe age >= 18
<= Mniejsze lub równe age <= 18

Przykład: aktualizujemy status studenta

Jeśli chcesz oznaczyć wszystkich studentów starszych niż 21 lat jako "absolwentów", robisz to tak:

UPDATE students
SET status = 'Graduated'
WHERE age > 21;

Przykład: usuwamy wszystkich studentów młodszych niż 18 lat

Jeśli ktoś przypadkiem dodał niepełnoletnich studentów, możemy ich usunąć:

DELETE FROM students
WHERE age < 18;

Zaawansowane warunki z operatorami logicznymi

Często trzeba filtrować wiersze według kilku kryteriów. Na przykład, żeby zaktualizować tylko tych studentów, którzy są starsi niż 18 lat i uczą się na kursie programowania. Do tego używamy operatorów logicznych: AND, OR i NOT.

Operatory logiczne:

Operator Opis Przykład
AND Wykonuje się, jeśli wszystkie warunki są prawdziwe age > 18 AND course = 'Programming'
OR Wykonuje się, jeśli chociaż jeden warunek jest prawdziwy age > 18 OR course = 'Programming'
NOT Odwrotność (odwraca wynik warunku) NOT (age < 18)

Przykład: aktualizujemy tylko studentów-programistów starszych niż 18 lat

UPDATE students
SET status = 'Advanced'
WHERE age > 18 AND course = 'Programming';

Przykład: usuwamy wszystkich studentów młodszych niż 18 lat lub tych, którzy są na kursie "Śpiew"

DELETE FROM students
WHERE age < 18 OR course = 'Singing';

Jak uniknąć katastrofalnych błędów

Zawsze sprawdzaj warunek przed wykonaniem!

Jeśli napiszesz zapytanie bez WHERE, PostgreSQL z radością wykona je dla wszystkich wierszy w tabeli. Oto co się stanie:

DELETE FROM students;
-- Ups! Wszystkie rekordy z tabeli students zostały usunięte!

Żeby tego uniknąć, dodaj WHERE:

DELETE FROM students
WHERE student_id = 123;

Tip: jeśli nie jesteś pewien, jaki efekt da warunek, zacznij od polecenia SELECT. Na przykład:

SELECT * FROM students
WHERE student_id = 123;

Jak już się upewnisz, że wybór jest poprawny, wykonaj UPDATE albo DELETE.

Praktyczne przykłady

Przykład 1: Aktualizacja statusów studentów

Załóżmy, że mamy tabelę students:

student_id name age course status
1 Otto Lin 20 Programming Beginner
2 Maria Chi 22 Mathematics Graduated
3 Eva Gram 19 Programming Beginner

Chcemy oznaczyć wszystkich studentów-programistów starszych niż 18 lat jako "Intermediate":

UPDATE students
SET status = 'Intermediate'
WHERE age > 18 AND course = 'Programming';

Efekt:

student_id name age course status
1 Otto Lin 20 Programming Intermediate
2 Maria Chi 22 Mathematics Graduated
3 Eva Gram 19 Programming Beginner

Przykład 2: Usuwanie wydalonych studentów

Załóżmy teraz, że mamy studentów na kursach, których trzeba się pozbyć. Na przykład studentów z kursu "Historia sztuki". Tabela:

student_id name age course status
1 Otto Lin 20 Programming Intermediate
4 Alex Ming 21 History of Arts Expelled

Usuwamy studentów z kursu "History of Arts":

DELETE FROM students
WHERE course = 'History of Arts';
student_id name age course status
1 Otto Lin 20 Programming Intermediate

Przykład 3: Aktualizacja bez warunków (i dlaczego to zły pomysł)

Jeśli napiszesz:

UPDATE students
SET status = 'Absolwent';

WSZYSCY studenci zostaną absolwentami. Dlatego zawsze zaleca się używać WHERE!

Załóżmy, że początkowo mieliśmy taką tabelę:

student_id name age course status
1 Otto Lin 20 Programming Intermediate
2 Maria Chi 22 Mathematics Graduated
3 Eva Gram 19 Programming Beginner

Po wykonaniu UPDATE bez WHERE:

student_id name age course status
1 Otto Lin 20 Programming Absolwent
2 Maria Chi 22 Mathematics Absolwent
3 Eva Gram 19 Programming Absolwent

😬 Widzisz? Wszystkie statusy zostały podmienione. Taki błąd może być nieodwracalny, zwłaszcza bez backupu. Dlatego WHERE to twój ziomek!

Specyfika i pułapki

Chociaż operator WHERE jest mega przydatny, początkujący często popełniają błędy:

  • Brak warunku: zapomnisz o WHERE i wszystkie wiersze zostaną zmienione.
  • Zły warunek: jeśli napiszesz np. age = 19 zamiast age < 19, możesz zmienić nie te dane, co trzeba.
  • Złożone warunki: źle ustawione priorytety (AND i OR) mogą dać nieoczekiwane efekty. Używaj nawiasów dla jasności:
    DELETE FROM students
    WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
    

Staraj się pisać zapytania tak, żeby były maksymalnie czytelne dla ciebie i twoich ziomków z zespołu.

Teraz już wiesz, jak używać WHERE do bezpiecznej i pewnej aktualizacji oraz usuwania danych. To narzędzie to twój najlepszy kumpel w pracy z bazami danych. I pamiętaj: lepiej sprawdzić warunek dwa razy, niż potem ratować dane!

2
Zadanie
SQL SELF, poziom 21, lekcja 4
Niedostępne
Aktualizacja z wieloma warunkami
Aktualizacja z wieloma warunkami
1
Ankieta/quiz
Wstawianie i aktualizacja danych, poziom 21, lekcja 4
Niedostępny
Wstawianie i aktualizacja danych
Wstawianie i aktualizacja danych
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION