Truy vấn dữ liệu với cột kiểu ENUM trong MySQL
Cột ENUM chỉ chấp nhận các giá trị được định nghĩa trước, có thể là NULL nếu không đặt NOT NULL.
Tạo bảng với ENUM
mysql> create table DemoTable (
EmployeeStatus ENUM('FULLTIME','Intern') default NULL
);
Query OK, 0 rows affected (0.66 sec)
Chèn dữ liệu
mysql> insert into DemoTable values('FULLTIME');
mysql> insert into DemoTable values('Intern');
mysql> insert into DemoTable values('Intern');
mysql> insert into DemoTable values(); -- NULL
Dữ liệu
+----------------+ | EmployeeStatus | +----------------+ | FULLTIME | | Intern | | Intern | | NULL | +----------------+
Truy vấn: Lấy nhân viên KHÔNG phải Intern (bao gồm NULL)
mysql> select * from DemoTable
-> where EmployeeStatus is null or EmployeeStatus <> 'Intern';
Kết quả
+----------------+ | EmployeeStatus | +----------------+ | FULLTIME | | NULL | +----------------+
Điểm quan trọng về ENUM và NULL:
EmployeeStatus <> 'Intern'KHÔNG khớp với NULL (NULL <> 'Intern' là UNKNOWN, không phải TRUE)- Phải kiểm tra
IS NULLriêng biệt - ENUM nội bộ lưu trữ dưới dạng số (1, 2, ...), sắp xếp theo thứ tự định nghĩa
Mẹo: WHERE EmployeeStatus NOT IN ('Intern') cũng KHÔNG lấy được NULL. Luôn dùng IS NULL OR ... hoặc COALESCE(EmployeeStatus, '') <> 'Intern'.