เหมือนภาษาโปรแกรมมิ่งอื่นๆ Structured Query Language มีคำสั่งเงื่อนไขควบคุมโฟลว์ข้อมูล ฟังก์ชัน IF คืนคำสั่งหากเงื่อนไขตรง และอีกคำสั่ง (หรือไม่มี) หากไม่ตรง มาดูฟังก์ชัน SQL IF ด้วย MySQL
การเตรียมข้อมูล (Preparation)
SQL Fiddle นี้ลิงก์ไป schema ตัวอย่างที่มีชื่อ อายุ และเพศ – เราจะใช้ในบทความนี้ สร้างตารางใน IDE ของคุณด้วย schema นี้:
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(expression, expr_true, expr_false);
ไวยากรณ์ฟังก์ชัน IF ใน MySQL ใช้คีย์เวิร์ด IF รับ 3 พารามิเตอร์: นิพจน์ boolean ที่ฟังก์ชันประเมิน คำสั่งคืนหากเงื่อนไขจริง และคำสั่งคืนหากเงื่อนไขเท็จ
SELECT name, age, IF(age >= 18, "YES", "NO") AS OVER_18 FROM names;
คิวรี่ข้างต้นเลือก name และ age ของรายการ แล้วเลือกเงื่อนไขที่เราเรียกว่า OVER_18 ผลลัพธ์บางส่วนของ SQL (ดูผลเต็มใน SQL Fiddle):
| 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() เป็นคำสั่งเงื่อนไขถามว่า นิพจน์แรกเป็น NULL หรือไม่ หากเป็น คืนนิพจน์ที่สอง แทนที่จะคืนนิพจน์แรก
IFNULL(NULL, 2) ⇒ returns 2 IFNULL(0, 4) ⇒ returns 0 SELECT name, IFNULL(age, "NOT ENTERED") AS age FROM names;
คำสั่ง MySQL นี้คืนคอลัมน์ชื่อ age ที่จะทับทุก entry ที่เป็น NULL ด้วยสตริง "NOT ENTERED"
NULLIF()
NULLIF() คืน NULL เมื่อทั้ง 2 นิพจน์ที่ส่งเข้าฟังก์ชัน มีค่าเท่ากัน
SELECT name, NULLIF(name, age) AS FROM names;
นี่เป็นตัวอย่างสุดขีด เพราะน่าจะไม่มีกรณีที่ name และ age เท่ากัน แต่ไวยากรณ์จะเขียนแบบนี้ คุณคิดได้ออกไหมว่าบล็อกคำสั่งนี้จะมีประโยชน์เมื่อไหร่?
สรุป
ใน MySQL มี if functions หลายตัวช่วยควบคุมโฟลว์ข้อมูลของเรา แนวคิดเหล่านี้แปลงไปใช้กับฐานข้อมูลไหนก็ได้ที่คุณทำงาน – ดู documentation เพื่อรายละเอียด syntax ของฐานข้อมูลเฉพาะของคุณ