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. MySQL如何有效的存储IP地址及字符串IP和数值之间如何转换

    mysql> select inet_aton('192.168.0.1'); +--------------------------+ | inet_aton('192.168.0.1') | ...

  2. (转载)基于Bash命令行的百度云上传下载工具

    原文链接:http://hi.baidu.com/meoow/item/aef5814bbd5be3e1bcf451e9 这是我根据百度云PCS的API写的一个基于bash的命令行工具, 使用了cur ...

  3. database.properties数据源

    jdbc.driver_class=oracle.jdbc.driver.OracleDriverjdbc.connection.url=jdbc:oracle:thin:@localhost:152 ...

  4. Makefile学习总结

    Makefile用法分析     在linux开发中,应用程序的编译基本都采用GNU的make工具,而make搭配Makefile来实现工程代码的编译,在越是大型复杂的项目中,make的强悍之处越是明 ...

  5. 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  6. Vuejs——Vue生命周期,数据,手动挂载,指令,过滤器

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   原教程: http://cn.vuejs.org/guide/instance.html htt ...

  7. 多线程下System.Security.Cryptography.Aes CreateDecryptor报“Safe handle has been closed”的解决方案

    因为系统需要对一些核心数据进行预加载以保证查询速度. 所以在application_start 事件中启用了后台线程对相关的数据进行加载并解密(为了保证解密的效率,将AES对像做了静态对像来保存:pr ...

  8. ASP.NET CORE小试牛刀:干货(完整源码)

    扯淡 .NET Core 的推出让开发者欣喜万分,从封闭到拥抱开源十分振奋人心.对跨平台的支持,也让咱.NET开发者体验了一把 Write once,run any where 的感觉!近期离职后,时 ...

  9. 微信小程序 瀑布流布局

    今天做小程序的时候,碰到一个比较常见的需求,就是要瀑布流布局,两列,交错分布,大概如下图 最终要实现的结果就是如左图所示. 不过在微信小程序里面,不能通过JavaScript来直接操作dome,所以一 ...

  10. [Open Source] .NET 基于StackExchange.Redis的扩展

    目录 简介 主从复制 备份与恢复 API AddOrUpdate GetOrAdd DeleteByPattern SearchKeys TransExcute Subscribe/Publish T ...