Computer >> Máy Tính >  >> Lập trình >> SQL

Sử dụng các hàm IF (), NULLIF () và IFNULL () của MySQL

Cũng giống như các ngôn ngữ lập trình khác, ngôn ngữ truy vấn cấu trúc có các câu lệnh điều kiện kiểm soát luồng dữ liệu. Hàm IF trả về một câu lệnh nếu điều kiện được đáp ứng và một câu lệnh kiểu khác (hoặc không có gì cả) nếu không được đáp ứng. Hãy xem xét hàm IF trong SQL bằng MySQL.

Chuẩn bị

SQL Fiddle này liên kết đến một lược đồ mẫu có chứa tên, tuổi và giới tính - đây là những gì chúng tôi làm việc với bài viết này. Tạo một bảng trong IDE của riêng bạn với giản đồ 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(expression ,expr_true, expr_false);

Cú pháp cho hàm IF trong cơ sở dữ liệu MySQL sử dụng từ khóa IF và sau đó nhận vào ba tham số:biểu thức boolean mà hàm đang đánh giá, câu lệnh trả về nếu điều kiện là đúng và sau đó là 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 của chúng tôi ở trên chọn tên và tuổi của mục nhập của chúng tôi, sau đó chọn một điều kiện mà chúng tôi gọi là OVER_18. Kết quả từng phần SQL của chúng tôi được hiển thị bên dưới (Bạn có thể xem toàn bộ kết quả trong SQL Fiddle này):

tên tuổi OVER_18
Bret Starkings 55
Bobbye Eyckel 76
Barbie Veschi 50
Electra Blazewicz 47
Estrella Borleace 57
Washington Pittwood 75
Phaedra Tertre 27
Nicolina Elie 76
Hugh Hughson 86
Dám mạnh mẽ 59
Cad Levins 13 KHÔNG

IFNULL ()

IFNULL() là một câu lệnh điều kiện hỏi xem biểu thức đầu tiên có phải là NULL hay không. Nếu đúng, nó trả về biểu thức thứ hai chứ không phải biểu thức đầu tiên.

IFNULL(NULL, 2) ⇒ returns 2
IFNULL(0, 4) ⇒ returns 0

SELECT name, IFNULL(age, "NOT ENTERED") AS age
FROM names;

Câu lệnh MySQL này trả về một cột có tên là tuổi sẽ ghi đè lên mọi mục nhập NULL bằng chuỗi “NOT ENTERED”.

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

NULLIF ()

NULLIF() trả về NULL khi cả hai biểu thức được truyền vào hàm đều bằng nhau.

SELECT name, NULLIF(name, age) AS 
FROM names;

Đây là một ví dụ cực đoan vì có lẽ sẽ không bao giờ có trường hợp tên và tuổi bằng nhau, nhưng đây là cách viết cú pháp. Bạn có thể nghĩ về trường hợp mà khối câu lệnh này sẽ có lợi không?

Kết luận

Trong MySQL, có một số hàm if khác nhau cho phép chúng ta kiểm soát luồng dữ liệu của mình. Các khái niệm này được dịch sang bất kỳ cơ sở dữ liệu nào bạn đang làm việc - hãy xem tài liệu để biết thêm thông tin về cú pháp của cơ sở dữ liệu cụ thể của bạn.