Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

การใช้ฟังก์ชัน IF(), NULLIF(), และ IFNULL() ของ MySQL

เหมือนภาษาโปรแกรมมิ่งอื่นๆ 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):

nameageOVER_18
Bret Starkings55YES
Bobbye Eyckel76YES
Barbie Veschi50YES
Electra Blazewicz47YES
Estrella Borleace57YES
Washington Pittwood75YES
Phaedra Tertre27YES
Nicolina Elie76YES
Hugh Hughson86YES
Dare Ravilious59YES
Cad Levins13NO

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 ของฐานข้อมูลเฉพาะของคุณ