Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Toán tử NOT EQUAL (<>) trong MySQL và xử lý NULL

MySQL hỗ trợ toán tử không bằng là <> (tiêu chuẩn SQL) và !=. Tuy nhiên, cần lưu ý đặc biệt khi so sánh với NULL.

Cú pháp cơ bản

SELECT * FROM ten_bang WHERE ten_cot <> gia_tri;
-- Hoặc
SELECT * FROM ten_bang WHERE ten_cot != gia_tri;

Ví dụ minh họa

1. Tạo bảng kiểm thử

CREATE TABLE DoesNotEqualDemo (
    Id INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(20),
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu (có NULL và chuỗi rỗng)

INSERT INTO DoesNotEqualDemo(Name) VALUES(NULL);
INSERT INTO DoesNotEqualDemo(Name) VALUES('John');
INSERT INTO DoesNotEqualDemo(Name) VALUES('Carol');
INSERT INTO DoesNotEqualDemo(Name) VALUES('Bob');
INSERT INTO DoesNotEqualDemo(Name) VALUES('');    -- Chuỗi rỗng
INSERT INTO DoesNotEqualDemo(Name) VALUES('Larry');
INSERT INTO DoesNotEqualDemo(Name) VALUES(NULL);

3. Xem toàn bộ dữ liệu

SELECT * FROM DoesNotEqualDemo;

Kết quả:

+----+-------+
| Id | Name  |
+----+-------+
| 1  | NULL  |
| 2  | John  |
| 3  | Carol |
| 4  | Bob   |
| 5  |       |
| 6  | Larry |
| 7  | NULL  |
+----+-------+

4. Tìm các hàng KHÔNG phải NULL và KHÔNG phải chuỗi rỗng

SELECT * FROM DoesNotEqualDemo 
WHERE Name <> 'NULL' AND Name <> '';

Kết quả:

+----+-------+
| Id | Name  |
+----+-------+
| 2  | John  |
| 3  | Carol |
| 4  | Bob   |
| 6  | Larry |
+----+-------+

⚠️ Lưu ý quan trọng về NULL

Trong SQL, NULL <> 'giatri' trả về UNKNOWN (không phải TRUE), do đó hàng có giá trị NULL sẽ không được chọn. Cần xử lý tường minh:

-- Sai: WHERE Name <> 'John'  -- Bỏ qua hàng NULL
-- Đúng: WHERE Name <> 'John' OR Name IS NULL
-- Hoặc: WHERE NOT (Name = 'John')  -- Vẫn bỏ qua NULL
-- Đúng hoàn toàn: WHERE Name IS NULL OR Name <> 'John'

So sánh <> vs !=

  • <>: Tiêu chuẩn SQL (ANSI), khuyến nghị dùng
  • !=: Cú pháp mở rộng của MySQL, hoạt động tương tự
  • Cả hai đều có độ ưu tiên như nhau