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

ใช้ != และ <> (Not Equals) ใน WHERE Clause ของ MySQL

ใน MySQL มีออปเกอร์เตอร์ "ไม่เท่ากับ" 2 รูปแบบ ให้ผลลัพธ์เหมือนกัน:

  • <> - มาตรฐาน ANSI SQL (แนะนำ)
  • != - MySQL Extension (ใช้ได้แต่ไม่ใช่ Standard)

รูปแบบคำสั่ง

SELECT * FROM yourTableName WHERE column_name <> value;
-- หรือ
SELECT * FROM yourTableName WHERE column_name != value;

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

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

mysql> CREATE TABLE NotEqualsDemo (Id INT);
Query OK, 0 rows affected (1.03 sec)

mysql> INSERT INTO NotEqualsDemo VALUES (1), (2), (3), (4), (5);

2. ดูข้อมูลทั้งหมด

mysql> SELECT * FROM NotEqualsDemo;
+------+
| Id   |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
+------+
5 rows in set (0.00 sec)

3. ใช้ <> เพื่อข้ามค่า 3

mysql> SELECT * FROM NotEqualsDemo WHERE Id <> 3;
+------+
| Id   |
+------+
| 1    |
| 2    |
| 4    |
| 5    |
+------+
4 rows in set (0.00 sec)

4. ใช้ != ให้ผลลัพธ์เหมือนกัน

mysql> SELECT * FROM NotEqualsDemo WHERE Id != 3;
+------+
| Id   |
+------+
| 1    |
| 2    |
| 4    |
| 5    |
+------+
4 rows in set (0.00 sec)

ความแตกต่างกับ NULL

สำคัญ: NULL <> 3 คือ NULL (ไม่ใช่ TRUE) → แถวที่มี NULL จะ **ไม่ถูกเลือก**

mysql> INSERT INTO NotEqualsDemo VALUES (NULL);
mysql> SELECT * FROM NotEqualsDemo WHERE Id <> 3;
+------+
| Id   |
+------+
| 1    |
| 2    |
| 4    |
| 5    |
+------+
4 rows in set (0.00 sec)

แถว NULL ไม่ออกมา เพราะ NULL <> 3 = UNKNOWN

หากต้องการรวม NULL ด้วย

SELECT * FROM NotEqualsDemo WHERE Id <> 3 OR Id IS NULL;
+------+
| Id   |
+------+
| 1    |
| 2    |
| 4    |
| 5    |
| NULL |
+------+
5 rows in set (0.00 sec)

NOT IN vs NOT EXISTS

สำหรับหลายค่า:

-- ใช้ NOT IN (ระวัง NULL ใน Subquery)
SELECT * FROM table WHERE id NOT IN (1, 2, 3);

-- ใช้ NOT EXISTS (ปลอดภัยกว่ากับ NULL)
SELECT * FROM table t WHERE NOT EXISTS (SELECT 1 FROM other WHERE id = t.id);

สรุปแนวทางเลือก

  • ใช้ <> สำหรับ Code ที่ต้อง Portable ระหว่าง Database
  • ใช้ != ได้หากทีมคุเคยและใช้ MySQL เท่านั้น
  • ระวัง NULL เสมอ - ใช้ IS NULL / IS NOT NULL แยกต่างหาก