CodeGym /Java курс /All lectures for BG purposes /Промяна на данни в таблица

Промяна на данни в таблица

All lectures for BG purposes
Ниво , Урок
На разположение

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;

Живейте с него сега.

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION