4.1 UPDATE SET pernyataan

Jika Anda perlu mengubah record yang ada di tabel, maka untuk ini kami menggunakan operator UPDATE.

Di satu sisi, operator UPDATEmirip dengan operator INSERT, karena kita perlu menentukan nilai baru untuk kolom. Dan di sisi lain, di operator SELECT, karena memungkinkan Anda untuk langsung bekerja dengan grup data.

Penting! Tujuan dari operator UPDATEadalah mengubah data bukan pada satu baris tabel, melainkan pada semua baris yang memenuhi syarat tertentu. Dan jika Anda membuat kesalahan kecil, Anda dapat dengan mudah kehilangan semua data di tabel.

Tampilan umum permintaan:

UPDATE table SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE condition;

Mari tulis kueri yang akan menaikkan gaji semua karyawan kita sebesar 100. Kueri kita akan terlihat seperti ini:

UPDATE employee SET
  	salary = salary+100;

Dan sekarang untuk setiap orang yang memiliki gaji kurang dari 50 ribu, kami juga akan menaikkannya sebesar 20%. Contoh permintaan:

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

Dan tentunya kami akan menaikkan gaji direktur sebanyak 2 kali lipat, bagaimana bisa tanpa dia:

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

4.2 Skenario perubahan data yang kompleks

Jika Anda memutuskan untuk mengubah data di beberapa tabel secara bersamaan, atau ketika Anda mengubah data di satu tabel, Anda perlu mengisinya dengan data dari yang lain, atau entah bagaimana menggunakan data dari tabel lain dalam proses mengubah yang pertama, lalu kejutan menanti kita.

Mari kita coba ubah level semua user pada tabel user yang ada pada tabel employee. Untuk kesederhanaan, kami akan memeriksa kebetulan nama pengguna.

Bagaimana kami ingin menulis kueri ini:

UPDATE user SET
  	level = 80,
WHERE user . name IN ( list of names from employee table );

Baiklah, mari tambahkan daftar nama dari tabel karyawan ke kueri ini:

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

Menarik! Kueri SQL itu sendiri untuk mendapatkan nama ternyata lebih pendek dari deskripsi tugas. Pembuat SQL tidak memakan roti mereka dengan sia-sia.

Terpaksa membuatmu kesal -pendekatan ini tidak akan berhasil. Pertama, Anda harus bergabung dengan tabel ini, akan terlihat seperti ini:

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;

Mari kita membuatnya sedikit lebih sulit. Anda perlu menyetel level ke 80 hanya untuk karyawan baik yang gajinya lebih dari 50k. Solusi lengkap akan terlihat seperti ini:

UPDATE user, good_employees SET
  	user.level = 80
WHERE user.name = good_employees.name;

Gabungan tabel seperti itu sebenarnya INNER JOIN, sehingga pada akhirnya hanya pengguna yang memiliki kecocokan nama di tabel kedua yang akan tersisa.

Tapi kita masih perlu memilih karyawan yang baik, jadi mari tambahkan beberapa kode lagi:

SELECT * FROM employee WHERE salary >= 50000

Dan sekarang kami mengganti tabel ini di kueri terakhir kami:

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

Hiduplah dengannya sekarang.