เมื่อมีเงื่อนไข OR หลายตัว ให้ใช้ IN() แทน เพื่อความกระชับและประสิทธิภาพที่ดีกว่า
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(40) );
Query OK, 0 rows affected (0.89 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable(Name) values('Chris'); Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Name) values('Robert'); Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Name) values('Mike'); Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Name) values('Sam'); Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(Name) values('David'); Query OK, 1 row affected (0.14 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+----+--------+ | Id | Name | +----+--------+ | 1 | Chris | | 2 | Robert | | 3 | Mike | | 4 | Sam | | 5 | David | +----+--------+ 5 rows in set (0.00 sec)
คิวรี่ใช้ IN() แทน OR หลายตัว
mysql> select *from DemoTable where Id IN(1,3,5);
ผลลัพธ์:
+----+-------+ | Id | Name | +----+-------+ | 1 | Chris | | 3 | Mike | | 5 | David | +----+-------+ 3 rows in set (0.00 sec)
เปรียบเทียบ
-- ใช้ OR (ยาวและอ่านยาก) WHERE Id = 1 OR Id = 3 OR Id = 5 -- ใช้ IN() (สั้นและชัดเจน) WHERE Id IN (1, 3, 5)
ข้อดีของ IN()
- อ่านง่าย บำรุงรักษาง่าย
- Optimizer จัดการได้ดี (แปลงเป็น Range scan หรือ Hash join)
- รองรับ Subquery:
WHERE id IN (SELECT id FROM other_table WHERE ...) - ใช้กับค่าตัวอักษรได้:
WHERE name IN ('Chris', 'Mike', 'David')
NOT IN
สำหรับเงื่อนไข NOT ให้ใช้ NOT IN():
SELECT * FROM DemoTable WHERE Id NOT IN (1, 3, 5);
ข้อควรระวังกับ NULL
NOT IN จะคืนค่า FALSE (ไม่ได้ผล) หากรายการมี NULL อยู่ ควรใช้ NOT EXISTS แทน