4.1 UPDATE SET statement
Yen sampeyan kudu ngganti cathetan sing ana ing tabel, mula iki digunakake operator UPDATE
.
Ing tangan siji, operator UPDATE
padha karo operator INSERT
, amarga kita kudu nemtokake nilai anyar kanggo kolom. Lan ing tangan liyane, ing operator SELECT
, amarga ngidini sampeyan bisa langsung karo grup data.
Penting! Tujuan operator UPDATE
yaiku ngganti data ora ing siji baris tabel, nanging ing kabeh baris sing ketemu kondisi tartamtu. Lan yen sampeyan nggawe kesalahan cilik, sampeyan bisa kanthi gampang ilang kabeh data ing meja.
Tampilan umum panyuwunan:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Ayo nulis pitakon sing bakal nambah gaji kabeh karyawan nganti 100. Pitakonan bakal katon kaya iki:
UPDATE employee SET
salary = salary+100;
Lan saiki kanggo saben wong sing duwe gaji kurang saka 50K, kita uga bakal nambah 20%. Tuladha panyuwunan:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
Lan mesthi, kita bakal nambah gaji direktur kaping 2, kepiye yen tanpa dheweke:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Skenario modifikasi data sing rumit
Yen sampeyan mutusake ngganti data ing sawetara tabel bebarengan, utawa nalika sampeyan ngganti data ing siji tabel, sampeyan kudu ngisi data saka liyane, utawa mung nggunakake data saka tabel liyane ing proses ngganti sing pisanan, banjur surprises nunggu kita.
Ayo nyoba ngganti level kabeh pangguna ing tabel pangguna sing ana ing tabel karyawan. Kanggo gamblang, kita bakal mriksa ketepakan pangguna kanthi jeneng.
Kepiye carane kita pengin nulis pitakon iki:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Ayo, tambahake dhaptar jeneng saka tabel karyawan menyang pitakon iki:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
menarik! Pitakonan SQL dhewe kanggo njupuk jeneng dadi luwih cendhek tinimbang deskripsi tugas kasebut. Pencipta SQL ora mangan roti kanthi sia-sia.
Dipaksa ngganggu sampeyan -pendekatan iki ora bakal bisa. Pisanan sampeyan kudu nggabungake tabel iki, bakal katon kaya iki:
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;
Ayo dadi luwih angel. Sampeyan kudu nyetel tingkat kanggo 80 mung kanggo karyawan apik sing gaji bakal luwih saka 50k. Solusi lengkap bakal katon kaya iki:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Gabungan tabel kasebut bener-bener INNER JOIN
, supaya pungkasane mung pangguna sing cocog karo jeneng ing tabel kapindho bakal tetep.
Nanging kita isih kudu milih karyawan sing apik, mula ayo nambah kode liyane:
SELECT * FROM employee WHERE salary >= 50000
Lan saiki kita ngganti tabel iki ing pitakon pungkasan:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Urip karo saiki.