JavaRush/Java курси/All lectures for UA purposes/Зміна даних у таблиці

Зміна даних у таблиці

Відкрита

1. Оператор UPDATE SET

Якщо потрібно змінити існуючі записи в таблиці, використовуємо оператор UPDATE.

З одного боку, оператор UPDATE схожий на оператор INSERT, адже нам потрібно вказувати нові значення для колонок. А з іншого — на оператор SELECT, адже він дозволяє працювати одразу з групами даних.

Важливо! Мета оператора UPDATE — змінити дані не в одному рядку таблиці, а в усіх рядках, які відповідають певній умові. І якщо зробити маленьку помилку, легко можна втратити всі дані у таблиці.

Загальний запит:

UPDATE таблиця SET
  колонка1 = вираз1,
  колонка2 = вираз2,
  колонка3 = вираз3
WHERE умова;

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

UPDATE employee SET
  salary = salary+100;

А тепер усім, у кого зарплата менша за 50К, ще й збільшимо її на 20%. Приклад запиту:

UPDATE employee SET
  salary = salary*1.2
WHERE salary<50000;

Ну і звісно ж збільшимо зарплату директору в 2 рази, як без нього:

UPDATE employee SET
  salary = salary*2
WHERE id=4;

2. Складні сценарії змінення даних

Якщо ти вирішиш змінити дані в декількох таблицях одночасно, або під час зміни даних в одній таблиці потрібно заповнити її даними з іншої, або просто якимось чином задіяти дані з іншої таблиці в процесі зміни першої, то тут на нас чекають сюрпризи.

Давай спробуємо змінити рівень всіх користувачів у таблиці user, які існують у таблиці employee. Збіг користувачів для простоти перевірятимемо на ім'я.

Як би ми хотіли написати цей запит:

UPDATE user SET
  level = 80,
WHERE user.name IN (список імен з таблиці employee);

Ну і додамо до цього запиту список імен з таблиці employee:

UPDATE user SET
  level = 80,
WHERE user.name IN (select name from employee);

Цікаво! Сам SQL-запит на отримання імен вийшов навіть коротшим, ніж опис завдання. Творці SQL свій хліб даремно не їли.

Змушений тебе засмутити — такий підхід не працюватиме. Спочатку потрібно заджойнити ці таблиці. Виглядатиме це приблизно так:

UPDATE таблиця1, таблиця2 SET
  колонка1 = вираз1,
  колонка2 = вираз2,
  колонка3 = вираз3
WHERE таблиця1.id = таблиця2.ref_id;

Давай ще трохи ускладнимо завдання. Потрібно встановити рівень у 80 тільки для хороших співробітників, чия зарплата буде більшою за 50к. Повне рішення виглядатиме так:

UPDATE user, хороші_працівники SET
  user.level = 80
WHERE user.name = хороші_працівники.name;

Таке об'єднання таблиць — це фактично INNER JOIN, отже в результаті залишаться лише користувачі, яким знайшлася відповідність на ім'я у другій таблиці.

Але нам потрібно ще якось відібрати хороших співробітників, тому допишемо ще трохи коду:

SELECT * FROM employee WHERE salary >= 50000

І тепер підставимо цю таблицю до нашого фінального запиту:

UPDATE user,
    (SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
    user.level = 80
WHERE user.name = good_emps.name;

Живи тепер із цим.

Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.