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

Lọc bản ghi TINYINT khác 1 hoặc NULL trong MySQL

Cột TINYINT thường dùng lưu boolean (0/1) hoặc trạng thái (0/1/NULL). Để lọc các hàng khác 1 (bao gồm 0 và NULL), dùng điều kiện cot <> 1 OR cot IS NULL.

Ví dụ minh họa

Tạo bảng nhân viên với cột isMarried TINYINT:

CREATE TABLE DemoTable (
    EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    EmployeeName VARCHAR(20),
    isMarried TINYINT
);
INSERT INTO DemoTable (EmployeeName, isMarried) VALUES 
('Chris', NULL), ('David', 1), ('Mike', 0), ('Sam', NULL), ('Bob', 0);

Lọc không kết hôn (0) hoặc chưa biết (NULL):

SELECT * FROM DemoTable
WHERE isMarried <> 1 OR isMarried IS NULL;

Kết quả

EmployeeIdEmployeeNameisMarried
1ChrisNULL
3Mike0
4SamNULL
5Bob0

Giải thích logic

  • isMarried <> 1: Khớp 0 (FALSE trong boolean context).
  • isMarried IS NULL: Khớp NULL (unknown).
  • OR: Hợp nhất 2 điều kiện.
  • Lưu ý: NULL <> 1 trả về NULL (không phải TRUE), nên phải tách ra IS NULL.

Cách viết gọn hơn

WHERE NOT (isMarried = 1)  -- Bao gồm cả 0 và NULL
-- Hoặc
WHERE isMarried <=> 0      -- Null-safe equal: khớp 0, KHÔNG khớp NULL
WHERE isMarried IS NOT TRUE -- MySQL: TRUE=1, FALSE=0, UNKNOWN=NULL. IS NOT TRUE khớp 0 và NULL

Khuyên dùng: WHERE isMarried IS NOT TRUE — ngắn gọn, đúng ngữ nghĩa boolean.

Thiết kế tốt hơn

  • Dùng ENUM('single','married','divorced') thay vì TINYINT để rõ nghĩa.
  • Hoặc BOOLEAN (alias của TINYINT(1)) với NOT NULL DEFAULT 0.