4.1 KEMASKINI kenyataan SET
Jika anda perlu menukar rekod sedia ada dalam jadual, maka untuk ini kami menggunakan operator UPDATE
.
Di satu pihak, operator UPDATE
adalah serupa dengan operator INSERT
, kerana kita perlu menentukan nilai baru untuk lajur. Dan sebaliknya, pada operator SELECT
, kerana ia membolehkan anda bekerja serta-merta dengan kumpulan data.
Penting! Tujuan pengendali UPDATE
adalah untuk menukar data bukan dalam satu baris jadual, tetapi dalam semua baris yang memenuhi syarat tertentu. Dan jika anda membuat kesilapan kecil, anda boleh kehilangan semua data dalam jadual dengan mudah.
Pandangan umum permintaan:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Mari tulis pertanyaan yang akan meningkatkan gaji semua pekerja kami sebanyak 100. Pertanyaan kami akan kelihatan seperti ini:
UPDATE employee SET
salary = salary+100;
Dan sekarang untuk semua orang yang mempunyai gaji bawah 50K, kami juga akan menaikkannya sebanyak 20%. Contoh permintaan:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
Dan sudah tentu, kami akan menaikkan gaji pengarah sebanyak 2 kali ganda, bagaimana mungkin tanpa dia:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Senario perubahan data yang kompleks
Jika anda memutuskan untuk menukar data dalam beberapa jadual pada masa yang sama, atau apabila anda menukar data dalam satu jadual, anda perlu mengisinya dengan data daripada yang lain, atau hanya menggunakan data dari jadual lain dalam proses menukar yang pertama, maka kejutan menanti kita.
Mari cuba ubah tahap semua pengguna dalam jadual pengguna yang wujud dalam jadual pekerja. Untuk memudahkan, kami akan menyemak kebetulan pengguna mengikut nama.
Bagaimanakah kami ingin menulis pertanyaan ini:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Baiklah, mari tambahkan senarai nama daripada jadual pekerja kepada pertanyaan ini:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Menarik! Pertanyaan SQL itu sendiri untuk mendapatkan nama ternyata lebih pendek daripada penerangan tugas. Pencipta SQL tidak makan roti mereka dengan sia-sia.
Terpaksa buat awak kecewa -pendekatan ini tidak akan berkesan. Mula-mula anda perlu menyertai jadual ini, ia akan kelihatan 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;
Biar susah sikit. Anda perlu menetapkan tahap kepada 80 hanya untuk pekerja yang baik yang gajinya akan melebihi 50k. Penyelesaian lengkap akan kelihatan seperti ini:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Gabungan jadual sedemikian sebenarnya INNER JOIN
, supaya pada akhirnya hanya pengguna yang mempunyai padanan dengan nama dalam jadual kedua akan kekal.
Tetapi kita masih perlu memilih pekerja yang baik, jadi mari tambahkan beberapa kod lagi:
SELECT * FROM employee WHERE salary >= 50000
Dan sekarang kami menggantikan jadual ini dalam pertanyaan terakhir kami:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Hidup dengannya sekarang.