การยกเว้นแถวที่มี ID เฉพาะด้วยออเปอเรเตอร์ <> (NOT EQUAL)
ใช้ตัวดำเนินการ <> (หรือ !=) ในเงื่อนไข WHERE เพื่อเลือกข้อมูลทั้งหมดยกเว้นแถวที่มี ID ตรงตามที่กำหนด
รูปแบบคำสั่ง
SELECT * FROM table_name WHERE id_column <> exclude_value;
<> และ != ให้ผลลัพธ์เหมือนกัน (มาตรฐาน SQL ใช้ <>)
ตัวอย่าง: ยกเว้น StudentId = 2
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable7 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(40)
);
INSERT INTO DemoTable7 (StudentName) VALUES ('Chris'), ('Robert'), ('Mike'), ('Sam');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable7;
ผลลัพธ์:
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | Chris |
| 2 | Robert |
| 3 | Mike |
| 4 | Sam |
+-----------+-------------+
3. ยกเว้น StudentId = 2
SELECT * FROM DemoTable7 WHERE StudentId <> 2;
ผลลัพธ์:
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | Chris |
| 3 | Mike |
| 4 | Sam |
+-----------+-------------+
การยกเว้นหลายค่า: ใช้ NOT IN
SELECT * FROM DemoTable7 WHERE StudentId NOT IN (2, 4);
ผลลัพธ์: StudentId 1 และ 3 (Chris, Mike)
การยกเว้นช่วงค่า: ใช้ NOT BETWEEN
SELECT * FROM DemoTable7 WHERE StudentId NOT BETWEEN 2 AND 3;
ผลลัพธ์: StudentId 1 และ 4
ข้อควรระวังกับ NULL
-- หากคอลัมน์มี NULL
SELECT * FROM DemoTable7 WHERE StudentId <> 2;
-- จะไม่คืนแถวที่ StudentId IS NULL (เพราะ NULL <> 2 เป็น UNKNOWN ไม่ใช่ TRUE)
-- ต้องเพิ่มเงื่อนไข OR IS NULL
SELECT * FROM DemoTable7 WHERE StudentId <> 2 OR StudentId IS NULL;
การใช้งานกับ JOIN
-- หา Orders ที่ไม่ได้มาจาก Customer ID 5
SELECT o.* FROM Orders o
LEFT JOIN Customers c ON o.CustomerId = c.Id
WHERE c.Id <> 5 OR c.Id IS NULL;
ประสิทธิภาพ
<>และNOT INสามารถใช้ Index ได้ (Range Scan)NOT INกับ Subquery อาจช้า หาก Subquery คืนค่ามาก → ใช้NOT EXISTSแทน