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

วิธีเลือกข้อมูลทั้งหมดยกเว้นแถวที่มี ID เฉพาะใน MySQL

การยกเว้นแถวที่มี 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 แทน