JavaRush /Курси /SQL SELF /Використання WHERE при оновленні та видален...

Використання WHERE при оновленні та видаленні даних

SQL SELF
Рівень 21 , Лекція 4
Відкрита

Уяви, що ти адміністратор бази даних, і тобі треба змінити або видалити записи. Але що, якщо ти випадково оновиш або видалиш все? Використання оператора WHERE — це твій "страховий поліс" від катастрофічних помилок. Він дозволяє чітко вказати, які саме рядки треба зачепити під час виконання запитів.

Наприклад:

UPDATE students
SET status = 'Graduated';
Цей запит оновить абсолютно всі рядки таблиці students. А уяви, що замість привітання з випуском ти випадково поставив усім status = 'Expelled'. Небезпечно, правда? Щоб цього не сталося, завжди використовуй WHERE для вказання умов, які визначають, які рядки мають бути оновлені або видалені.

Синтаксис умови WHERE

WHERE використовується для фільтрації рядків, до яких застосовується оператор. Його можна використовувати в команді UPDATE або DELETE. Синтаксис виглядає так:

Для UPDATE:

UPDATE таблиця
SET column1 = value1, column2 = value2
WHERE умова;

Для DELETE:

DELETE FROM таблиця
WHERE умова;

Без WHERE зміни торкнуться всіх рядків таблиці. Тому намагайся завжди задавати умови, щоб не змінити дані, які не планував чіпати.

Використання операторів порівняння

Для побудови умов у WHERE використовуються оператори порівняння. Давай розглянемо основні з них:

Оператор Опис Приклад
= Дорівнює age = 18
<> Не дорівнює age <> 18
> Більше age > 18
< Менше age < 18
>= Більше або дорівнює age >= 18
<= Менше або дорівнює age <= 18

Приклад: оновимо статус студента

Якщо треба відмітити всіх студентів старше 21 року як "випускників", це робиться так:

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

Приклад: видалимо всіх студентів молодше 18 років

Якщо хтось випадково записав неповнолітніх студентів, ми можемо їх видалити:

DELETE FROM students
WHERE age < 18;

Складні умови з логічними операторами

Часто треба фільтрувати рядки за кількома критеріями. Наприклад, щоб оновити тільки тих студентів, які одночасно старше 18 років і навчаються на курсі програмування. Для цього використовуються логічні оператори: AND, OR і NOT.

Логічні оператори:

Оператор Опис Приклад
AND Виконується, якщо всі умови істинні age > 18 AND course = 'Programming'
OR Виконується, якщо хоча б одна умова істинна age > 18 OR course = 'Programming'
NOT Зворотне (інвертує результат умови) NOT (age < 18)

Приклад: оновимо тільки студентів-програмістів старше 18 років

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

Приклад: видалимо всіх студентів молодше 18 років або тих, хто навчається на курсі "Пісні"

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

Як уникнути катастрофічних помилок

Завжди перевіряй умову перед виконанням!

Якщо ти напишеш запит без WHERE, PostgreSQL із задоволенням виконає його для всіх рядків таблиці. Ось що станеться:

DELETE FROM students;
-- Ой! Видалені всі записи з таблиці students!

Щоб уникнути таких ситуацій, додай WHERE:

DELETE FROM students
WHERE student_id = 123;

Порада: якщо не впевнений, який ефект дасть умова, почни з команди SELECT. Наприклад:

SELECT * FROM students
WHERE student_id = 123;

Як тільки переконаєшся, що вибірка правильна, виконуй UPDATE або DELETE.

Практичні приклади

Приклад 1: Оновлення статусів студентів

Припустимо, у нас є таблиця 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

Ми хочемо відмітити всіх студентів-програмістів, старше 18 років, як "Intermediate":

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

Результат:

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

Приклад 2: Видалення відрахованих студентів

Тепер уяви, що у нас є студенти з курсами, яких треба видалити. Наприклад, студентів, які навчались на курсі "History of Arts". Таблиця:

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

Видалимо студентів курсу "History of Arts":

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

Приклад 3: Оновлення без умов (і чому це погано)

Якщо ти напишеш:

UPDATE students
SET status = 'Випускник';

ВСІ студенти стануть випускниками. Тому дуже рекомендується завжди використовувати WHERE!

Припустимо, спочатку у нас була така таблиця:

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

Після виконання UPDATE без WHERE:

student_id name age course status
1 Otto Lin 20 Programming Випускник
2 Maria Chi 22 Mathematics Випускник
3 Eva Gram 19 Programming Випускник

😬 Бачиш? Всі статуси замінилися. Помилка може бути незворотною, особливо без резервної копії. Тому WHERE — твій друг!

Особливості та підводні камені

Хоч оператор WHERE дуже корисний, новачки часто роблять помилки:

  • Відсутність умови: забудеш WHERE — і всі рядки будуть змінені.
  • Неправильна умова: якщо напишеш, наприклад, age = 19 замість age < 19, можеш зачепити не ті дані.
  • Складні умови: неправильно розставлені пріоритети (AND і OR) можуть дати неочікуваний результат. Використовуй дужки для зрозумілості:
    DELETE FROM students
    WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
    

Старайся писати запити так, щоб вони були максимально зрозумілі для тебе і колег.

Тепер ти знаєш, як використовувати WHERE для оновлення та видалення даних безпечно і надійно. Цей інструмент — твій найкращий друг у роботі з базами даних. І пам'ятай: краще перестрахуватися і перевірити умову двічі, ніж потім відновлювати дані!

1
Опитування
Вставка та оновлення даних, рівень 21, лекція 4
Недоступний
Вставка та оновлення даних
Вставка та оновлення даних
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ