IF 判断,流程控制

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 字段的值。

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号