การใช้งานคำสั่ง IN() ใน MySQL
คำสั่ง IN() ใช้สำหรับตรวจสอบว่าค่าในคอลัมน์ตรงกับค่าใดค่าหนึ่งในรายการที่กำหนด ทำงานคล้ายกับการใช้ OR หลายครั้ง แต่เขียนสั้นกว่าและอ่านง่ายกว่า
รูปแบบคำสั่ง
SELECT * FROM table_name WHERE column_name IN (value1, value2, value3, ...);
ตัวอย่าง: ค้นหาข้อมูลจากนามสกุลเฉพาะ
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
FirstName VARCHAR(100),
LastName VARCHAR(100)
);
INSERT INTO DemoTable VALUES ('Adam', 'Smith');
INSERT INTO DemoTable VALUES ('John', 'Doe');
INSERT INTO DemoTable VALUES ('John', 'Smith');
INSERT INTO DemoTable VALUES ('Chris', 'Brown');
INSERT INTO DemoTable VALUES ('Robert', 'Brown');
INSERT INTO DemoTable VALUES ('David', 'Miller');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam | Smith |
| John | Doe |
| John | Smith |
| Chris | Brown |
| Robert | Brown |
| David | Miller |
+-----------+----------+
3. ค้นหาข้อมูลที่นามสกุลเป็น Smith, Brown หรือ Miller
SELECT * FROM DemoTable WHERE LastName IN ('Smith', 'Brown', 'Miller');
ผลลัพธ์:
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam | Smith |
| John | Smith |
| Chris | Brown |
| Robert | Brown |
| David | Miller |
+-----------+----------+
เทียบกับการใช้ OR
คำสั่งด้านบนเทียบเท่ากับ:
SELECT * FROM DemoTable
WHERE LastName = 'Smith'
OR LastName = 'Brown'
OR LastName = 'Miller';
ข้อดีของ IN()
- โค้ดสั้นกว่าและอ่านง่ายกว่า
- ประสิทธิภาพดีกว่าในบางกรณี (Optimizer จัดการได้ดีกว่า)
- ง่ายต่อการแก้ไข เพียงเพิ่ม/ลบค่าในวงเล็บ
- รองรับ Subquery ได้:
WHERE LastName IN (SELECT LastName FROM OtherTable)
ข้อจำกัด
- ไม่ควรใส่ค่ามากเกินไป (หลายพันค่า) เพราะอาจส่งผลต่อประสิทธิภาพ
- ค่าที่เป็น NULL ในรายการ IN() จะไม่จับคู่กับ NULL ในคอลัมน์ (ต้องใช้ IS NULL แทน)