4.1 ปรับปรุงคำสั่ง SET
หากคุณต้องการเปลี่ยนบันทึกที่มีอยู่ในตารางสำหรับสิ่งนี้เราจะใช้ตัวดำเนินUPDATE
การ
ในอีกด้านหนึ่ง ตัวดำเนินการUPDATE
คล้ายกับตัวดำเนินการINSERT
เนื่องจากเราจำเป็นต้องระบุค่าใหม่สำหรับคอลัมน์ และในทางกลับกัน บนตัวดำเนินการSELECT
เพราะมันช่วยให้คุณทำงานกับกลุ่มข้อมูลได้ทันที
สำคัญ! จุดประสงค์ของตัวดำเนินการUPDATE
คือเพื่อเปลี่ยนข้อมูลที่ไม่ได้อยู่ในแถวเดียวของตาราง แต่ในทุกแถวที่ตรงตามเงื่อนไขที่กำหนด และหากคุณทำผิดพลาดเพียงเล็กน้อย ข้อมูลทั้งหมดในตารางก็จะสูญหายไปได้อย่างง่ายดาย
มุมมองทั่วไปของคำขอ:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
ลองเขียนแบบสอบถามที่จะเพิ่มเงินเดือนของพนักงานทั้งหมด 100 คน แบบสอบถามของเราจะมีลักษณะดังนี้:
UPDATE employee SET
salary = salary+100;
และตอนนี้สำหรับทุกคนที่มีเงินเดือนน้อยกว่า 50K เราจะเพิ่มให้อีก 20% ตัวอย่างคำขอ:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
และแน่นอนว่าเราจะเพิ่มเงินเดือนของผู้อำนวยการเป็น 2 เท่า ถ้าไม่มีเขาจะเป็นอย่างไร:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 สถานการณ์แก้ไขข้อมูลที่ซับซ้อน
หากคุณตัดสินใจที่จะเปลี่ยนแปลงข้อมูลในหลายตารางพร้อมกัน หรือเมื่อคุณเปลี่ยนแปลงข้อมูลในตารางหนึ่ง คุณต้องเติมข้อมูลจากอีกตารางหนึ่ง หรือเพียงแค่ใช้ข้อมูลจากอีกตารางหนึ่งในกระบวนการเปลี่ยนแปลงตารางแรก แล้วเซอร์ไพรส์รอเราอยู่
ลองเปลี่ยนระดับของผู้ใช้ทั้งหมดในตารางผู้ใช้ที่มีอยู่ในตารางพนักงาน เพื่อความง่าย เราจะตรวจสอบความบังเอิญของผู้ใช้ตามชื่อ
เราต้องการเขียนแบบสอบถามนี้อย่างไร:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee 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 เฉพาะพนักงานดีๆที่เงินเดือนเกิน 50k โซลูชันที่สมบูรณ์จะมีลักษณะดังนี้:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
การรวมตารางดังกล่าวเป็นจริงINNER JOIN
ดังนั้นในที่สุดผู้ใช้ที่มีชื่อตรงกันในตารางที่สองจะยังคงอยู่
แต่ยังไงก็ต้องเลือกพนักงานดีๆ อยู่ดี ดังนั้นเรามาเพิ่มโค้ดกัน:
SELECT * FROM employee WHERE salary >= 50000
และตอนนี้เราแทนที่ตารางนี้ในแบบสอบถามสุดท้ายของเรา:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
อยู่กับมันตอนนี้
GO TO FULL VERSION