欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL流程函数常见用法实例分析

程序员文章站 2023-09-27 15:28:59
本文实例讲述了mysql流程函数常见用法。分享给大家供大家参考,具体如下: 流程函数是mysql相对常用的一类函数, 用户可以使用这类函数在一个sql语句中实现条件选择, 这样能够提...

本文实例讲述了mysql流程函数常见用法。分享给大家供大家参考,具体如下:

流程函数是mysql相对常用的一类函数, 用户可以使用这类函数在一个sql语句中实现条件选择, 这样能够提高效率.

下面列出了mysql跟条件有关的流程函数

函数 功能
if(expr1,expr2,expr3) 如果expr1是真, 返回expr2, 否则返回expr3
ifnull(expr1,expr2) 如果expr1不是null,返回expr1,否则返回expr2
case when [value1] then[result1]… else[default] end 如果value是真, 返回result1,否则返回default
case [expr] when [value1] then[result1]… else[default] end 如果expr等于value1, 返回result1,否则返回default

下面的例子中模拟对职员进行分类,首先创建一个职员薪水表:

create table salary(userid int, salary decimal(9,2));

插入一些测试数据

insert into salary values (1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(1,null);

数据如下

mysql> select * from salary;
+--------+---------+
| userid | salary |
+--------+---------+
| 1 | 1000.00 |
| 2 | 2000.00 |
| 3 | 3000.00 |
| 4 | 4000.00 |
| 5 | 5000.00 |
| 1 | null |
+--------+---------+
6 rows in set (0.00 sec)

接下来, 通过这个表来介绍各个函数的应用.

if(expr1,expr2,expr3)函数: 这里认为月薪在2000元以上的职员属于高薪, 用"high'表示; 而2000以下的职员属于低薪, 用'low'来表示.

mysql> select if(salary>2000, 'high', 'low') from salary;    
+--------------------------------+
| if(salary>2000, 'high', 'low') |
+--------------------------------+
| low              |
| low              |
| high              |
| high              |
| high              |
| low              |
+--------------------------------+
6 rows in set (0.00 sec)

ifnull(expr1,expr2)函数: 这个函数一般用来替换null值, 我们知道null值是不能参参与数值运算的, 下面这个语句就是把null值用0替换.

mysql> select ifnull(salary,0) from salary;
+------------------+
| ifnull(salary,0) |
+------------------+
|     1000.00 |
|     2000.00 |
|     3000.00 |
|     4000.00 |
|     5000.00 |
|       0.00 |
+------------------+
6 rows in set (0.00 sec)

case when [value1] then[result1]… else[default] end函数:这里可以用case when..then函数实现上面例子中高薪低薪的问题.

mysql> select case when salary<=2000 then 'low' else 'high' end from salary;
+---------------------------------------------------+
| case when salary<=2000 then 'low' else 'high' end |
+---------------------------------------------------+
| low                        |
| low                        |
| high                       |
| high                       |
| high                       |
| high                       |
+---------------------------------------------------+
6 rows in set (0.00 sec)

case [expr] when [value1] then[result1]… else[default] end函数:这里还可以分为多种情况把职员的薪水分为多个档次,比如下面的例子分成高、中、低3种情况。同样可以分成更多种情况,这里不再举例了,有兴趣的朋友可以自己测试一下

mysql> select case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end from salary;
+-----------------------------------------------------------------------+
| case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end |
+-----------------------------------------------------------------------+
| low                                  |
| mid                                  |
| high                                 |
| high                                 |
| high                                 |
| high                                 |
+-----------------------------------------------------------------------+
6 rows in set (0.00 sec)