MySQL 中 IF 语句允许您根据表达式的某个条件或值结果来执行一组 SQL 语句。
要在 MySQL 中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回 TRUE, FALSE 或 NULL 三者之一。
IF(expr,v1,v2)
其中:表达式 expr 得到不同的结果,当 expr 为真是返回 v1 的值,否则返回 v2。
expr 表达式,该表达式返回 TRUE、FALSE 和 NULL 之一。
v1 当 expr 表达式返回 TRUE 时,返回该参数的值。
v2 当 expr 表达式返回结果不为 TRUE 时,返回该参数的值。
(1)验证 IF 函数第一个参数分别为 TRUE、FALSE 和 NULL 时,IF 函数如何进行处理。如下:
mysql> select IF(TRUE, 'v1', 'v2'); +----------------------+ | IF(TRUE, 'v1', 'v2') | +----------------------+ | v1 | +----------------------+ 1 row in set (0.02 sec) mysql> select IF(FALSE, 'v1', 'v2'); +-----------------------+ | IF(FALSE, 'v1', 'v2') | +-----------------------+ | v2 | +-----------------------+ 1 row in set (0.02 sec) mysql> select IF(NULL, 'v1', 'v2'); +----------------------+ | IF(NULL, 'v1', 'v2') | +----------------------+ | v2 | +----------------------+ 1 row in set (0.03 sec)
由运行结果可知,当 IF 第一个参数为 TRUE 时,返回 “v1”。当 IF 第一个参数为 FALSE、NULL 时,返回 “v2”。
(2)使用 IF 函数将 t_user 表中 name 字段为 NULL 的字段返回 “-”,age 字段为 NULL 的字段返回 0。其中,t_user 表有如下数据:
mysql> select * from t_user; +----+------+-----+------+----------+ | id | name | sex | age | salary | +----+------+-----+------+----------+ | 1 | 张三 | 男 | 22 | 6782.50 | | 2 | 李四 | 男 | 27 | 7523.00 | | 3 | 王五 | 女 | 22 | 6760.30 | | 4 | 赵六 | 男 | 24 | 6810.50 | | 5 | 王二 | 男 | 27 | 10280.00 | | 6 | 杜一 | 女 | 25 | 8700.00 | | 7 | NULL | 女 | NULL | 9750.00 | +----+------+-----+------+----------+ 7 rows in set (0.06 sec)
通过 IF 函数分别处理 name 和 age 字段,如果 name 字段为 NULL,则返回 “-”;如果 age 字段为 NULL,则返回 0。如下:
mysql> select id, IF(!ISNULL(name), name, '-') as name, sex, IF(!ISNULL(age), age, 0) as age,salary from t_user; +----+------+-----+-----+----------+ | id | name | sex | age | salary | +----+------+-----+-----+----------+ | 1 | 张三 | 男 | 22 | 6782.50 | | 2 | 李四 | 男 | 27 | 7523.00 | | 3 | 王五 | 女 | 22 | 6760.30 | | 4 | 赵六 | 男 | 24 | 6810.50 | | 5 | 王二 | 男 | 27 | 10280.00 | | 6 | 杜一 | 女 | 25 | 8700.00 | | 7 | - | 女 | 0 | 9750.00 | +----+------+-----+-----+----------+ 7 rows in set (0.06 sec)
由运行结果可知,id 为 7 的记录中,name 和 age 均为 NULL。
通过 IF(!ISNULL(name), name, '-') 判断,如果 name 为 NULL,则返回 “-”。否则,直接返回 name 字段的值。
通过 IF(!ISNULL(age), age, 0) 判断,如果 age 为 NULL,则返回 0。否则,直接返回 age 字段的值。