Giống như các ngôn ngữ lập trình khác, ngôn ngữ truy vấn có cấu trúc có câu lệnh điều kiện kiểm soát luồng dữ liệu. Hàm IF trả về câu lệnh nếu điều kiện thỏa mãn và câu lệnh khác (hoặc không có) nếu không thỏa mãn. Hãy xem hàm SQL IF dùng MySQL.
Chuẩn bị
SQL Fiddle này liên kết đến schema mẫu chứa tên, tuổi, giới tính — đây là dữ liệu chúng ta làm việc trong bài. Tạo bảng trong IDE của bạn với schema này:
CREATE TABLE names ( id INT, name VARCHAR(50), age INT, gender VARCHAR(50) ); INSERT INTO names (id, name, age, gender) VALUES (1, 'Bret Starkings', 55, 'M'); INSERT INTO names (id, name, age, gender) VALUES (2, 'Bobbye Eyckel', 76, 'F'); INSERT INTO names (id, name, age, gender) VALUES (3, 'Barbie Veschi', 50, 'F'); INSERT INTO names (id, name, age, gender) VALUES (4, 'Electra Blazewicz', 47, 'F'); INSERT INTO names (id, name, age, gender) VALUES (5, 'Estrella Borleace', 57, 'F'); INSERT INTO names (id, name, age, gender) VALUES (6, 'Washington Pittwood', 75, 'M'); INSERT INTO names (id, name, age, gender) VALUES (7, 'Phaedra Tertre', 27, 'F'); INSERT INTO names (id, name, age, gender) VALUES (8, 'Nicolina Elie', 76, 'F'); INSERT INTO names (id, name, age, gender) VALUES (9, 'Hugh Hughson', 86, 'M'); INSERT INTO names (id, name, age, gender) VALUES (10, 'Dare Ravilious', 59, 'M'); INSERT INTO names (id, name, age, gender) VALUES (11, 'Cad Levins', 13, 'M'); INSERT INTO names (id, name, age, gender) VALUES (12, 'Sollie Kimbury', 33, 'M'); INSERT INTO names (id, name, age, gender) VALUES (13, 'Elga Rearie', 61, 'F'); INSERT INTO names (id, name, age, gender) VALUES (14, 'Cherey Terron', 54, 'F'); INSERT INTO names (id, name, age, gender) VALUES (15, 'Abbie Kent', 23, 'F'); INSERT INTO names (id, name, age, gender) VALUES (38, 'Nelia Picot', 2, 'F'); INSERT INTO names (id, name, age, gender) VALUES (39, 'Benedetto Smithin', 33, 'M'); INSERT INTO names (id, name, age, gender) VALUES (40, 'Rickie Maymand', 83, 'F'); INSERT INTO names (id, name, age, gender) VALUES (41, 'Kristoforo Dashkov', 6, 'M'); INSERT INTO names (id, name, age, gender) VALUES (42, 'Cherice Genty', 6, 'F'); INSERT INTO names (id, name, age, gender) VALUES (43, 'Shirley Fake', 95, 'F'); INSERT INTO names (id, name, age, gender) VALUES (44, 'Aeriel Plant', 36, 'F'); INSERT INTO names (id, name, age, gender) VALUES (45, 'Halimeda Gook', 74, 'F'); INSERT INTO names (id, name, age, gender) VALUES (46, 'Minor Harriot', 63, 'M'); INSERT INTO names (id, name, age, gender) VALUES (47, 'Greggory Found', 61, 'M'); INSERT INTO names (id, name, age, gender) VALUES (48, 'Vivien Braund', 94, 'F'); INSERT INTO names (id, name, age, gender) VALUES (49, 'Gaylord Pochet', 96, 'M'); INSERT INTO names (id, name, age, gender) VALUES (77, 'Nataline Sealand', 43, 'F');
IF()
IF(bieu_thuc, gia_tri_true, gia_tri_false);
Cú pháp hàm IF trong MySQL dùng từ khóa IF và nhận ba tham số: biểu thức boolean hàm đánh giá, câu lệnh trả về nếu điều kiện đúng, câu lệnh trả về nếu điều kiện sai.
SELECT name, age, IF(age >= 18, 'YES', 'NO') AS OVER_18 FROM names;
Truy vấn trên chọn tên và tuổi mục nhập sau đó chọn điều kiện gọi là OVER_18. Kết quả SQL một phần:
| name | age | OVER_18 |
|---|---|---|
| Bret Starkings | 55 | YES |
| Bobbye Eyckel | 76 | YES |
| Barbie Veschi | 50 | YES |
| Electra Blazewicz | 47 | YES |
| Estrella Borleace | 57 | YES |
| Washington Pittwood | 75 | YES |
| Phaedra Tertre | 27 | YES |
| Nicolina Elie | 76 | YES |
| Hugh Hughson | 86 | YES |
| Dare Ravilious | 59 | YES |
| Cad Levins | 13 | NO |
IFNULL()
IFNULL() là câu lệnh điều kiện hỏi xem biểu thức đầu tiên có phải NULL không. Nếu có, trả về biểu thức thứ hai chứ không phải biểu thức đầu.
IFNULL(NULL, 2) → trả về 2 IFNULL(0, 4) → trả về 0 SELECT name, IFNULL(age, 'NOT ENTERED') AS age FROM names;
Câu lệnh MySQL này trả về cột tên age sẽ ghi đè mọi mục NULL bằng chuỗi "NOT ENTERED".
NULLIF()
NULLIF() trả về NULL khi cả hai biểu thức truyền vào hàm đều bằng nhau.
SELECT name, NULLIF(name, age) AS result FROM names;
Đây là ví dụ cực đoan vì hiếm khi tên và tuổi bằng nhau, nhưng đây là cách cú pháp được viết. Bạn nghĩ ra trường hợp nào câu lệnh này hữu ích?
Kết luận
Trong MySQL, có vài hàm IF khác nhau cho phép kiểm soát luồng dữ liệu. Các khái niệm này được chuyển dịch sang bất kỳ cơ sở dữ liệu nào bạn làm việc — hãy xem tài liệu để biết thêm về cú pháp cho cơ sở dữ liệu cụ thể của bạn.