MySQL có IF()
chức năng cung cấp một cách thuận tiện để thực hiện thao tác “IF / ELSE” đơn giản.
Nó hoạt động tương tự như một IF
cơ bản / ELSE
, trong đó nó cho phép chúng tôi kiểm tra một điều kiện và trả về một kết quả khác tùy thuộc vào việc điều đó có đúng hay không.
Cụ thể hơn, nếu đối số đầu tiên của IF()
hàm là true, đối số thứ hai được trả về. Nếu không đúng, đối số thứ ba sẽ được trả về.
Cú pháp
IF(expr1,expr2,expr3)
Nếu expr1
là TRUE
(
và expr1
<> 0
), expr1
KHÔNG ĐẦY ĐỦ IF()
trả về expr2
. Nếu không, nó trả về expr3
.
Loại trả lại
- Nếu
expr2
hoặcexpr3
tạo ra một chuỗi, kết quả là một chuỗi. Nếuexpr2
vàexpr3
là cả hai chuỗi và một trong hai chuỗi có phân biệt chữ hoa chữ thường, kết quả là phân biệt chữ hoa chữ thường. - Nếu
expr2
hoặcexpr3
tạo ra giá trị dấu phẩy động, kết quả là giá trị dấu phẩy động. - Nếu
expr2
hoặcexpr3
tạo ra một số nguyên, kết quả là một số nguyên.
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh cách nó hoạt động:
SELECT IF( 1 > 2, 'Yes', 'No' );
Kết quả:
No
Tại đây, chúng tôi đã kiểm tra xem 1 có lớn hơn 2. Không và vì vậy đối số thứ ba đã được trả về.
Dưới đây là những gì sẽ xảy ra khi biểu thức đầu tiên là true:
SELECT IF( 2 > 1, 'Yes', 'No' );
Kết quả:
Yes
Ví dụ về cơ sở dữ liệu
Dưới đây là một ví dụ sử dụng IF()
khi truy vấn cơ sở dữ liệu:
SELECT
Name,
Population,
IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;
Kết quả:
+---------------------+------------+-----------+ | Name | Population | Big/Small | +---------------------+------------+-----------+ | Afghanistan | 22720000 | Big | | Albania | 3401200 | Small | | Algeria | 31471000 | Big | | American Samoa | 68000 | Small | | Andorra | 78000 | Small | | Angola | 12878000 | Big | | Anguilla | 8000 | Small | | Antarctica | 0 | Small | | Antigua and Barbuda | 68000 | Small | | Argentina | 37032000 | Big | +---------------------+------------+-----------+
IF()
lồng nhau Chức năng
Có thể lồng IF()
để cung cấp nhiều hơn một kết quả nhị phân.
Ví dụ:
SELECT
Name,
Population,
IF(
Population > 10000000,
IF( Population > 100000000, 'REALLY Big', 'Big' ),
'Small'
) AS "Size"
FROM Country
WHERE Region = 'Southern and Central Asia'
ORDER BY Population DESC;
Kết quả:
+--------------+------------+------------+ | Name | Population | Size | +--------------+------------+------------+ | India | 1013662000 | REALLY Big | | Pakistan | 156483000 | REALLY Big | | Bangladesh | 129155000 | REALLY Big | | Iran | 67702000 | Big | | Uzbekistan | 24318000 | Big | | Nepal | 23930000 | Big | | Afghanistan | 22720000 | Big | | Sri Lanka | 18827000 | Big | | Kazakstan | 16223000 | Big | | Tajikistan | 6188000 | Small | | Kyrgyzstan | 4699000 | Small | | Turkmenistan | 4459000 | Small | | Bhutan | 2124000 | Small | | Maldives | 286000 | Small | +--------------+------------+------------+
Nulls và Zeros
Nếu biểu thức đầu tiên là NULL
hoặc 0
, thì nó là false và giá trị thứ hai được trả về:
SELECT
IF( 1, 'True', 'False' ) AS "1",
IF( null, 'True', 'False' ) AS "Null",
IF( 0, 'True', 'False' ) AS "Zero";
Kết quả:
+------+-------+-------+ | 1 | Null | Zero | +------+-------+-------+ | True | False | False | +------+-------+-------+
Ở đây, cột đầu tiên là true vì nó phân giải thành 1. Hai cột còn lại trả về đối số thứ hai, vì đối số đầu tiên của chúng là null
và 0
tương ứng.
Đây là một ví dụ về cơ sở dữ liệu:
SELECT
Name,
GNPOld,
IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;
Kết quả:
+---------------------+-----------+------------------------------+ | Name | GNPOld | IF( GNPOld, GNPOld, 'None' ) | +---------------------+-----------+------------------------------+ | Afghanistan | NULL | None | | Albania | 2500.00 | 2500.00 | | Algeria | 46966.00 | 46966.00 | | American Samoa | NULL | None | | Andorra | NULL | None | | Angola | 7984.00 | 7984.00 | | Anguilla | NULL | None | | Antarctica | NULL | None | | Antigua and Barbuda | 584.00 | 584.00 | | Argentina | 323310.00 | 323310.00 | +---------------------+-----------+------------------------------+
Mặc dù trong trường hợp này, kết quả tương tự có thể đạt được với mã ít hơn một chút bằng cách sử dụng IFNULL()
hoặc thậm chí là COALESCE()
chức năng.