4.1 I-UPDATE ang SET na pahayag
Kung kailangan mong baguhin ang mga umiiral na tala sa talahanayan, pagkatapos ay para dito ginagamit namin ang operator UPDATE
.
Sa isang banda, ang operator UPDATE
ay katulad ng operator INSERT
, dahil kailangan nating tukuyin ang mga bagong halaga para sa mga column. At sa kabilang banda, sa operator SELECT
, dahil pinapayagan ka nitong magtrabaho kaagad sa mga pangkat ng data.
Mahalaga! Ang layunin ng operator UPDATE
ay baguhin ang data hindi sa isang row ng table, ngunit sa lahat ng row na nakakatugon sa isang partikular na kundisyon. At kung gumawa ka ng isang maliit na pagkakamali, madali mong mawala ang lahat ng data sa talahanayan.
Pangkalahatang view ng kahilingan:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Sumulat tayo ng isang query na magtataas sa suweldo ng lahat ng ating mga empleyado ng 100. Magiging ganito ang hitsura ng ating query:
UPDATE employee SET
salary = salary+100;
At ngayon para sa lahat ng kulang sa 50K ang sahod, tataas din tayo ng 20%. Halimbawa ng kahilingan:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
At syempre, 2 beses na tataas ang suweldo ng direktor, paano kung wala siya:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Kumplikadong mga sitwasyon sa pagbabago ng data
Kung magpasya kang baguhin ang data sa ilang mga talahanayan nang sabay-sabay, o kapag binago mo ang data sa isang talahanayan, kailangan mong punan ito ng data mula sa isa pa, o kahit papaano ay gumamit ng data mula sa isa pang talahanayan sa proseso ng pagbabago ng una, pagkatapos ay naghihintay sa amin ang mga sorpresa.
Subukan nating baguhin ang antas ng lahat ng mga user sa talahanayan ng user na umiiral sa talahanayan ng empleyado. Para sa pagiging simple, susuriin namin ang pagkakaisa ng mga gumagamit sa pamamagitan ng pangalan.
Paano namin gustong isulat ang query na ito:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Well, magdagdag tayo ng listahan ng mga pangalan mula sa talahanayan ng empleyado sa query na ito:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Interesting! Ang SQL query mismo para sa pagkuha ng mga pangalan ay naging mas maikli pa kaysa sa paglalarawan ng gawain. Ang mga tagalikha ng SQL ay hindi kumain ng kanilang tinapay nang walang kabuluhan.
Pinilit na magalit sa iyo -hindi gagana ang diskarteng ito. Una kailangan mong sumali sa mga talahanayang ito, magiging ganito ang hitsura:
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;
Pahirapan natin ng kaunti. Kailangan mong itakda ang level sa 80 para lamang sa mga magagaling na empleyado na ang sahod ay higit sa 50k. Ang kumpletong solusyon ay magiging ganito:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Ang ganitong pagsasama ng mga talahanayan ay talagang INNER JOIN
, upang sa huli ay mananatili lamang ang mga user na may tugma ayon sa pangalan sa pangalawang talahanayan.
Ngunit kailangan pa rin nating pumili ng mabubuting empleyado, kaya magdagdag pa tayo ng ilang code:
SELECT * FROM employee WHERE salary >= 50000
At ngayon pinapalitan namin ang talahanayang ito sa aming huling query:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Mabuhay kasama ito ngayon.