ใช้ IF() Function ตั้งค่าตามเงื่อนไข (Conditional Expression)
IF(condition, true_value, false_value) ใช้ใน SELECT, SET, WHERE ได้ คืนค่า true_value ถ้า condition TRUE มิฉะนั้น false_value
ตัวอย่าง: แสดงชื่อลูกค้าที่อายุ > 50, ไม่อย่างนั้นแสดง Dash
CREATE TABLE DemoTable637 (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(100),
ClientAge INT
);
INSERT INTO DemoTable637(ClientName, ClientAge) VALUES
('Chris', 23), ('Robert', 24), ('David', 57), ('Carol', 60);
Query:
SELECT IF(ClientName IS NOT NULL AND ClientAge > 50, ClientName, '-------------')
FROM DemoTable637;
ผลลัพธ์:
+--------------------------------------------------------------------------+
| IF(ClientName IS NOT NULL AND ClientAge > 50, ClientName, '-------------') |
+--------------------------------------------------------------------------+
| ------------- |
| ------------- |
| David |
| Carol |
+--------------------------------------------------------------------------+
IF() vs CASE WHEN
| คุณสมบัติ | IF() | CASE WHEN |
|---|---|---|
| Syntax | IF(cond, true, false) | CASE WHEN cond THEN val ELSE val END |
| Conditions | 1 Condition (True/False) | หลาย Conditions (WHEN...THEN...) |
| Readability | Simple Cases | Complex Logic |
| Standard SQL | MySQL Extension | ANSI SQL |
CASE WHEN Equivalent
SELECT CASE
WHEN ClientName IS NOT NULL AND ClientAge > 50 THEN ClientName
ELSE '-------------'
END AS display_name
FROM DemoTable637;
Nested IF Example
SELECT
ClientName,
ClientAge,
IF(ClientAge >= 60, 'Senior',
IF(ClientAge >= 18, 'Adult', 'Minor')
) AS age_group
FROM DemoTable637;
ใช้ใน UPDATE
UPDATE DemoTable637
SET ClientName = IF(ClientAge > 50, CONCAT('VIP-', ClientName), ClientName);
⚠️ NULL Handling ใน IF()
-- Condition เป็น NULL -> FALSE branch
SELECT IF(NULL, 'yes', 'no'); -- 'no'
-- True Value เป็น NULL -> คืน NULL
SELECT IF(1 > 0, NULL, 'no'); -- NULL
-- ใช้ COALESCE กัน
SELECT IF(ClientAge > 50, COALESCE(ClientName, 'Unknown'), 'N/A');
MySQL 8.0: IF() ใน Generated Column
ALTER TABLE DemoTable637
ADD COLUMN age_group VARCHAR(10)
GENERATED ALWAYS AS (
IF(ClientAge >= 60, 'Senior',
IF(ClientAge >= 18, 'Adult', 'Minor')
)
) STORED;