4.1 Изявление UPDATE SET
Ако трябва да промените съществуващите записи в tableта, тогава за това използваме оператора UPDATE
.
От една страна, операторът UPDATE
е подобен на оператора INSERT
, защото трябва да посочим нови стойности за колоните. И от друга страна, на оператора SELECT
, защото ви позволява да работите веднага с групи данни.
важно! Целта на оператора UPDATE
е да промени данните не в един ред от tableта, а във всички редове, които отговарят на определено condition. И ако направите малка грешка, лесно можете да загубите всички данни в tableта.
Общ изглед на заявката:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Нека напишем заявка, която ще увеличи заплатите на всички наши служители със 100. Нашата заявка ще изглежда така:
UPDATE employee SET
salary = salary+100;
И сега за всички , които имат заплата под 50 хил., също ще ги увеличим с 20%. Пример за заявка:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
И разбира се, ще увеличим заплатата на директора 2 пъти, How без него:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Комплексни сценарии за промяна на данни
Ако решите да промените данни в няколко таблици едновременно or когато промените данни в една table, трябва да я попълните с данни от друга or просто по няHowъв начин да използвате данни от друга table в процеса на промяна на първата, тогава ни очакват изненади.
Нека се опитаме да променим нивото на всички потребители в потребителската table, които съществуват в tableта на служителите. За простота ще проверим съвпадението на потребителите по име.
Как бихме искали да напишем тази заявка:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Е, нека добавим списък с имена от tableта на служителите към тази заявка:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Интересно! Самата SQL заявка за получаване на имената се оказа дори по-кратка от описанието на задачата. Създателите на SQL не са изяли хляба си напразно.
Принуден да те разстрои -този подход няма да работи. Първо трябва да обедините тези таблици, това ще изглежда по следния начин:
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
Нека го направим малко по-трудно. Трябва да зададете ниво на 80 само за добри служители, чиято заплата ще бъде повече от 50 хиляди. Пълното решение ще изглежда така:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Такова съединение на таблици всъщност е INNER JOIN
, така че накрая ще останат само потребители, които имат съвпадение по име във втората table.
Но все още трябва по няHowъв начин да изберем добри служители, така че нека добавим още малко code:
SELECT * FROM employee WHERE salary >= 50000
И сега заместваме тази table в последната ни заявка:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Живейте с него сега.
GO TO FULL VERSION