เมื่อต้องการอัปเดตหลายแถวพร้อมกันโดยระบุเงื่อนไขในคอลัมน์เดียว สามารถใช้ฟังก์ชัน IN() ในส่วน WHERE ได้ ซึ่งช่วยลดความซับซ้อนของคำสั่ง SQL และเพิ่มประสิทธิภาพ
ตัวอย่างการใช้งาน
สร้างตารางตัวอย่าง:
mysql> CREATE TABLE DemoTable1420 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstName VARCHAR(20),
-> LastName VARCHAR(20),
-> Age INT
-> );
เพิ่มข้อมูลทดสอบ:
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('Chris', 'Brown', 23);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('David', 'Miller', 22);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('John', 'Smith', 24);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('John', 'Doe', 21);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('Adam', 'Smith', 25);
ดูข้อมูลก่อนอัปเดต:
mysql> SELECT * FROM DemoTable1420; +----+-----------+----------+------+ | Id | FirstName | LastName | Age | +----+-----------+----------+------+ | 1 | Chris | Brown | 23 | | 2 | David | Miller | 22 | | 3 | John | Smith | 24 | | 4 | John | Doe | 21 | | 5 | Adam | Smith | 25 | +----+-----------+----------+------+
อัปเดตข้อมูลหลายแถวพร้อมกันด้วย IN():
mysql> UPDATE DemoTable1420
-> SET FirstName = 'Carol', LastName = 'Taylor'
-> WHERE Id IN (1, 3, 4, 5);
ผลลัพธ์หลังอัปเดต:
mysql> SELECT * FROM DemoTable1420; +----+-----------+----------+------+ | Id | FirstName | LastName | Age | +----+-----------+----------+------+ | 1 | Carol | Taylor | 23 | | 2 | David | Miller | 22 | | 3 | Carol | Taylor | 24 | | 4 | Carol | Taylor | 21 | | 5 | Carol | Taylor | 25 | +----+-----------+----------+------+
ข้อดีของการใช้ IN()
- เขียนโค้ดสั้นกว่าและอ่านง่ายกว่าการใช้ OR หลายครั้ง
- ประสิทธิภาพดีกว่าในบางกรณี เนื่องจาก MySQL สามารถเพิ่มประสิทธิภาพการค้นหาได้
- รองรับทั้งตัวเลขและสตริง (เช่น
WHERE Name IN ('John', 'Jane')) - สามารถใช้กับ Subquery ได้ (เช่น
WHERE Id IN (SELECT Id FROM OtherTable))
วิธีนี้เหมาะสำหรับการอัปเดตหรือลบข้อมูลหลายแถวที่มีคีย์หลักหรือค่าที่ทราบล่วงหน้า