MySQL không có câu lệnh IF ... THEN ... ELSE dùng trực tiếp trong SELECT (chỉ có trong stored program). Thay vào đó, sử dụng biểu thức CASE để thực hiện logic điều kiện và phép toán học trên cột.
Tạo bảng sản phẩm
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FruitName VARCHAR(100),
FruitPrice INT
);
mysql> INSERT INTO DemoTable (FruitName, FruitPrice) VALUES
('Orange', 250), ('Banana', 100), ('Apple', 150), ('Pomegranate', 200);
Dữ liệu
mysql> SELECT * FROM DemoTable;
+----+-------------+------------+
| Id | FruitName | FruitPrice |
+----+-------------+------------+
| 1 | Orange | 250 |
| 2 | Banana | 100 |
| 3 | Apple | 150 |
| 4 | Pomegranate | 200 |
+----+-------------+------------+
Sử dụng CASE để tính giá gốc (giả sử Orange đang giảm giá 80%)
mysql> SELECT Id, FruitName, FruitPrice,
CASE
WHEN FruitName = 'Orange' THEN FruitPrice / 5
ELSE FruitPrice
END AS OriginalPrice
FROM DemoTable;
Kết quả
+----+-------------+------------+---------------+
| Id | FruitName | FruitPrice | OriginalPrice |
+----+-------------+------------+---------------+
| 1 | Orange | 250 | 50.0000|
| 2 | Banana | 100 | 100 |
| 3 | Apple | 150 | 150 |
| 4 | Pomegranate | 200 | 200 |
+----+-------------+------------+---------------+
Các dạng CASE
1. CASE đơn giản (Simple CASE) - so sánh bằng
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
2. CASE tìm kiếm (Searched CASE) - điều kiện bất kỳ
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Ví dụ trên dùng dạng Searched CASE.
Phép toán học trong THEN
Có thể dùng mọi biểu thức số học: +, -, *, /, %, hàm số học (ROUND, FLOOR, POWER...).
Mẹo: Dùng CASE trong SELECT, WHERE, ORDER BY, GROUP BY, UPDATE, SET... rất linh hoạt.