DQL中常用的流程函数if_case

  ---流程函数在一个SQL语句中实现条件选择

模拟对职员薪水进行分类:

mysql> create table salary_tab(userid int not null primary key,salary dec(,));
Query OK, rows affected (0.04 sec) mysql> insert into salary_tab values(,);
mysql> insert into salary_tab values(,);
mysql> insert into salary_tab values(,);
mysql> insert into salary_tab(userid) values();
mysql> insert into salary_tab values(,); mysql> select * from salary_tab;
+--------+---------+
| userid | salary |
+--------+---------+
| | 1000.00 |
| | 2000.00 |
| | 3000.00 |
| | NULL |
| | 1000.00 |
+--------+---------+
rows in set (0.00 sec)

1、IF(expr1,expr2,expr3)

  判断第一个参数expr1为TRUE (expr1 <> 0 and expr1 <> NULL):

    成功,返回第二个参数expr2

    失败,返回第三个参数expr3

返回值可以是数字、字符串、列值

mysql> select if(null,'非空','空');
+-------------------------+
| if(null,'非空','空') |
+-------------------------+
| 空 |
+-------------------------+ mysql> select userid,if(salary>,'high','low') from salary_tab;
+--------+------------------------------+
| userid | if(salary>,'high','low') |
+--------+------------------------------+
| | low |
| | low |
| | high |
| | low |
| | low |
+--------+------------------------------+ mysql> select if(>,,),if(<,'yes','no');
+-------------+--------------------+
| if(>,,) | if(<,'yes','no') |
+-------------+--------------------+
| | yes |
+-------------+--------------------+

2、IFNULL(expr1,expr2)

  判断第一个参数expr1是否为NULL:

    如果expr1不为空,直接返回expr1;

    如果expr1为空,返回第二个参数 expr2

常用在算术表达式计算和组函数中,用来对null值进行转换处理(返回值是数字或者字符串)

mysql> select ifnull(salary,) from salary_tab;
+------------------+
| ifnull(salary,) |
+------------------+
| 1000.00 |
| 2000.00 |
| 3000.00 |
| 0.00 |
| 1000.00 |
+------------------+ mysql> select ifnull(/,'yes');
+-------------------+
| ifnull(/,'yes') |
+-------------------+
| yes |
+-------------------+

NULLIF(expr1,expr2):如果两个参数相等则返回NULL,否则返回第一个参数的值expr1

mysql> select nullif(,),nullif(,);
+-------------+-----------------+
| nullif(,) | nullif(,) |
+-------------+-----------------+
| NULL | |
+-------------+-----------------+

3、在SQL语句中实现“if-then-else”逻辑计算功能

  有两种形式:simple case和searched case

1)simple case的语法结构:

CASE  value

    WHEN  [compare_value] THEN  result

    [WHEN [compare_value] THEN  result ...] 

    [ELSE  result]  END

语义:

  将case后面的值value分别和每个when子句后面的值compare_value进行相等比较:

    如果一旦和某个when子句后面的值相等则返回相应的then子句后面的值result;

    如果和所有when子句后面的值都不相等,则返回else子句后面的值;

    如果没有else部分则返回null。

注意:

  ①value可以是字面量、表达式或者列名

  ②CASE表达式的数据类型取决于跟在then或else后面的表达式的类型

类型必须相同(可尝试做隐式类型转换),否则出错

mysql> select userid,case salary
-> when then 'low'
-> when then 'med'
-> when then 'high'
-> else '无效值' end salary_grade
-> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
| | low |
| | med |
| | high |
| | 无效值 |
| | low |
+--------+--------------+

2)searched  case的语法结构:

CASE

    WHEN [condition] THEN result

    [WHEN [condition] THEN result ...]

    [ELSE result]  END

语义:

  如果某个when子句后面的条件condition为true,则返回相应的when子句后面的值result;

  如果所有的when子句后面的条件condition都不为true,则返回else子句后面的值;

  如果没有else部分则返回null。

mysql> select userid,case
-> when salary<= then 'low'
-> when salary= then 'med'
-> when salary>= then 'high'
-> else '无效值' end salary_grade
-> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
| | low |
| | med |
| | high |
| | 无效值 |
| | low |
+--------+--------------+

SELECT中的if_case流程函数的更多相关文章

  1. MySQL数据库学习笔记(四)----MySQL聚合函数、控制流程函数(含navicat软件的介绍)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. MySQL聚合函数、控制流程函数(含navicat软件的介绍)

    MySQL聚合函数.控制流程函数(含navicat软件的介绍) 一.navicat的引入:(第三方可视化的客户端,方便MySQL数据库的管理和维护) NavicatTM是一套快速.可靠并价格相宜的数据 ...

  3. SQL中的存储过程和函数

                                        存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如 ...

  4. SQL语句流程函数

    本人因为今天用到了流程函数,顿时感觉语法生疏啊,为了防止以后忘记,故写此篇!!! 流程函数是MySQL相对常用的一类函数, 用户可以使用这类函数在一个SQL语句中实现条件选择, 这样能够提高效率. 下 ...

  5. mysql 开发基础系列7 流程函数与其它函数

    一.流程函数 -- 创建表来介绍 ,)); ,),(,), (,),(,),(,), (,NULL); SELECT * FROM salary 1. if(value,t,f)  超过2000的用h ...

  6. MySQL聚合函数、控制流程函数

    [正文] 一.navicat的引入:(第三方可视化的客户端,方便MySQL数据库的管理和维护) NavicatTM是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设 ...

  7. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  8. MYSQL-----控制流程函数(case when...then..else..end)

    MySQL有一些内置的控制流程函数,可以在SQL语句中使用这些函数来更加准确和直接的结果. 第一种语法: case when [value] then result ................. ...

  9. SQL中Round(),Floor(),Ceiling()函数的浅析

    项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...

随机推荐

  1. 利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

    因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是 ...

  2. 基于vue2.0的网易云音乐 (实时更新)

    本人在自学vue,之后想在学习过程中加以实践.由于之前有做过jquery的播放器效果,ui仿照网易云,地址 www.daiwei.org/music 于是就想做vue 的网易云播放器,网上也有类似的项 ...

  3. Android精品源码与技术博文

    Android精品源码android遵循Material Design风格天气源码基于exoplay 自定义播放器 支持直播 1 ExoUserPlayer 基本播放器...几种动画效果Animati ...

  4. 安装WIA组件

    下载地址: http://pan.baidu.com/s/1bnGU5Nx 安装方法: 将下载后的WIAAutSDK.zip解压,复制wiaaut.dll到C:\Windows\System32,注册 ...

  5. SQL-结构化查询语言(1)

    一:数据查询语言(DQL),Data Query Language,用以从表中获取数据,确定数据怎样在程序中给出.SELECT是DQL中用的最多的! select user,host,password ...

  6. ansible的安装

    安装 ansible-server的安装 client需要有python2.5以上 的python server和client都关闭了selinux server端: 网址: http://www.a ...

  7. xtrabackup备份mysql数据库的使用方法

    xtrabackup是由percona提供的mysql备份工具,它是一款物理备份工具,通过连接数据库把数据库的数据备份出来.对于innodb存储引擎其支持全量备份和增量备份.对于myisam存储引擎只 ...

  8. gtest 操作指南

    首先,下载gtest-17.0,CSDN上就可以免费下载. 然后,打开gtest-17.0下的msvc文件夹,运行gtest.sln,右键解决方案,选择生成解决方案,此时会在gtest-17.0/ms ...

  9. MySQL 启动参数说明及性能优化建议

    [mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-name-resolve #禁止MySQL对外部连接进行DNS解析,使用 ...

  10. 关于SpringMVC中如何把查询数据全转成String类型

    之前,本想与客户商量做几张固定的报表予使用,结果发现客户每个月都需要各种各样的报表,所以我们做了个窗口用于直接执行SQL语句:数据量一开始并不是很大查询出来的数据较少(约1-6W左右),所以刚开始几个 ...