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

ค้นหาข้อมูลที่ไม่อยู่ในชุดค่าที่กำหนดด้วย NOT IN() ใน MySQL

การใช้ NOT IN() เพื่อตัดข้อมูลที่ไม่ต้องการ

ฟังก์ชัน NOT IN(value1, value2, ...) ใช้ในเงื่อนไข WHERE เพื่อ **เลือกเฉพาะแถวที่ค่าของคอลัมน์ไม่อยู่ในรายการที่กำหนด**

Syntax

SELECT * FROM table_name WHERE column_name NOT IN (value1, value2, ...);

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูล:

mysql> CREATE TABLE DemoTable718 (
    Id INT,
    FirstName VARCHAR(100),
    Age INT
);
Query OK, 0 rows affected (0.59 sec)

mysql> INSERT INTO DemoTable718 VALUES 
    (101, 'Chris', 26),
    (102, 'Robert', 24),
    (103, 'David', 27),
    (104, 'Mike', 28),
    (105, 'Sam', 23);
Query OK, 5 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable718;
+------+-----------+------+
| Id   | FirstName | Age  |
+------+-----------+------+
| 101  | Chris     | 26   |
| 102  | Robert    | 24   |
| 103  | David     | 27   |
| 104  | Mike      | 28   |
| 105  | Sam       | 23   |
+------+-----------+------+
5 rows in set (0.00 sec)

ค้นหาข้อมูลที่ Id **ไม่อยู่ใน** ชุด (101, 103, 104):

mysql> SELECT * FROM DemoTable718 WHERE Id NOT IN ('101', '103', '104');
+------+-----------+------+
| Id   | FirstName | Age  |
+------+-----------+------+
| 102  | Robert    | 24   |
| 105  | Sam       | 23   |
+------+-----------+------+
2 rows in set (0.00 sec)

ข้อควรระวังสำคัญ: NULL ใน NOT IN

หากรายการใน NOT IN มีค่า NULL อยู่ **ผลลัพธ์จะว่างเปล่าเสมอ** เพราะ value NOT IN (..., NULL) ประเมินเป็น UNKNOWN

-- ผิด: หาก subquery คืนค่า NULL
WHERE id NOT IN (SELECT nullable_col FROM other_table)

-- ถูกต้อง: กรอง NULL ออกก่อน
WHERE id NOT IN (SELECT nullable_col FROM other_table WHERE nullable_col IS NOT NULL)

-- หรือใช้ NOT EXISTS (แนะนำ)
WHERE NOT EXISTS (SELECT 1 FROM other_table WHERE other_table.id = main_table.id)

ประสิทธิภาพ

  • IN() / NOT IN() ใช้ Index ได้ (Index Lookup)
  • สำหรับรายการเยอะมาก ควรใช้ JOIN หรือ NOT EXISTS แทน
  • MySQL จะแปลง IN (const, const...) เป็น Binary Search อัตโนมัติ