Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การหลีกเลี่ยง OR หลายตัวใน MySQL ด้วย IN()

เมื่อมีเงื่อนไข 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 แทน