Bạn có thể sử dụng câu lệnh CASE để tạo một cột tạm thời (computed column) trong truy vấn SELECT, nơi giá trị được tính toán dựa trên điều kiện của cột khác.
Tạo bảng nhân viên
mysql> CREATE TABLE DemoTable (
-> EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName VARCHAR(20),
-> EmployeeSalary INT,
-> EmployeeExperience INT
-> );
Chèn dữ liệu mẫu
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Larry', 4500, 5);
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Mike', 130000, 8);
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Sam', 11000, 5);
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Carol', 140000, 8);
Xem dữ liệu gốc
mysql> SELECT * FROM DemoTable;
+------------+--------------+----------------+--------------------+ | EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | +------------+--------------+----------------+--------------------+ | 1 | Larry | 4500 | 5 | | 2 | Mike | 130000 | 8 | | 3 | Sam | 11000 | 5 | | 4 | Carol | 140000 | 8 | +------------+--------------+----------------+--------------------+
Tạo cột tạm thời NewSalary dựa trên kinh nghiệm
mysql> SELECT EmployeeId, EmployeeName, EmployeeSalary, EmployeeExperience,
-> CASE
-> WHEN EmployeeExperience = 5 THEN EmployeeSalary + 10000
-> WHEN EmployeeExperience = 8 THEN EmployeeSalary + 20000
-> ELSE NULL
-> END AS NewSalary
-> FROM DemoTable;
Kết quả
+------------+--------------+----------------+--------------------+-----------+ | EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | NewSalary | +------------+--------------+----------------+--------------------+-----------+ | 1 | Larry | 4500 | 5 | 14500 | | 2 | Mike | 130000 | 8 | 150000 | | 3 | Sam | 11000 | 5 | 21000 | | 4 | Carol | 140000 | 8 | 160000 | +------------+--------------+----------------+--------------------+-----------+
Lưu ý quan trọng
- Cột
NewSalarychỉ tồn tại trong kết quả truy vấn, không được lưu trữ trong bảng - Cú pháp
CASE WHEN ... THEN ... ELSE ... ENDcho phép logic điều kiện phức tạp - Có thể sử dụng
CASEđơn giản (so sánh giá trị) hoặcCASEtìm kiếm (điều kiện boolean)