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

วิธีใช้ WHERE หลายเงื่อนไขด้วย IN() ใน MySQL

ใช้ IN() แทน OR หลายตัวสำหรับค่าหลายค่าในคอลัมน์เดียว

IN(value1, value2, ...) ตรวจสอบว่าค่าคอลัมน์ตรงกับค่าใดค่าหนึ่งในรายการ เขียนสั้นกว่าและอ่านง่ายกว่า col = v1 OR col = v2 OR ...

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (Id INT, Name VARCHAR(100));
INSERT INTO DemoTable VALUES (10, 'John'), (59, 'Carol'), (20, 'Sam'), (45, 'David');

ข้อมูลในตาราง

+------+-------+
| Id   | Name  |
+------+-------+
| 10   | John  |
| 59   | Carol |
| 20   | Sam   |
| 45   | David |
+------+-------+

คำสั่งค้นหา Id = 59 หรือ 45

SELECT * FROM DemoTable WHERE Id IN (59, 45);

ผลลัพธ์

+------+-------+
| Id   | Name  |
+------+-------+
| 59   | Carol |
| 45   | David |
+------+-------+

คำอธิบาย: Id IN (59, 45) เทียบเท่า Id = 59 OR Id = 45

ประโยชน์ของ IN():

  • อ่านง่าย กระชับ
  • Optimizer จัดการได้ดี (แปลงเป็น Range Scan หรือ IN-to-EXISTS)
  • รองรับ Subquery: WHERE Id IN (SELECT Id FROM OtherTable WHERE ...)
  • รองรับ Tuple: WHERE (col1, col2) IN ((1,'a'), (2,'b'))

⚠ ข้อจำกัด: รายการใน IN() ควรไม่เกินพันๆ รายการ (Limits: max_allowed_packet, optimizer_switch) หากมากเกินไป ควรใช้ JOIN กับ Temp Table/Derived Table แทน

NOT IN: WHERE Id NOT IN (59, 45) หาค่าที่ไม่อยู่ในรายการ (ระวัง NULL ใน Subquery)