MYSQL 控制流

iBit程序猿 2018年01月19日 1,143次浏览

1.相关测试sql

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `name` varchar(20) NOT NULL COMMENT '用户名称',
  `age` int(11) NOT NULL COMMENT '年龄',
  `gender` int(11) DEFAULT '0' COMMENT '性别,0:未知, 1:男,2:女',
  `phone` varchar(16) DEFAULT NULL COMMENT '手机',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户表';


insert into user(`name`, `age`, `gender`, 'phone') values ('张三', '23', '1', '10086'), ('李四', '18', '0', '10010'), ('王五', '16', '2', null);


2.相关sql

2.1 IF()用法

  • 语法:IF(expr1, expr2, expr3)
  • 规则: 如果expr1为 true, 返回expr2, 否则返回expr3。

eg:

select u.name 姓名, IF(u.age >= 18, '是', '否') 是否成年 from user u;

2.2 IFNULL用法

  • 语法: IFNULL(expr1, expr2)
  • 规则: 如果 expr1 不为 NULL,就返回 expr1,否则返回 expr2。

eg:

select u.name 姓名, IFNULL(u.phone, '未知') 电话号码 from user u;

2.3 NULLIF用法

  • 语法: NULLIF(expr1,expr2)
  • 规则: 如果 expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。

2.4 CASE用法

CASE 存在以下两种语法:

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

或者

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

eg :

语法1:
select u.name, (CASE u.gender WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '未知' END) 性别 from user u;

语法2:
select u.name, (CASE WHEN u.gender = '1' THEN '男' WHEN u.gender = '2' THEN '女' ELSE '未知' END) 性别 from user u;

参考资料

mysql官网 Control Flow Functions