SELECT中的if_case流程函数
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流程函数的更多相关文章
- MySQL数据库学习笔记(四)----MySQL聚合函数、控制流程函数(含navicat软件的介绍)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL聚合函数、控制流程函数(含navicat软件的介绍)
MySQL聚合函数.控制流程函数(含navicat软件的介绍) 一.navicat的引入:(第三方可视化的客户端,方便MySQL数据库的管理和维护) NavicatTM是一套快速.可靠并价格相宜的数据 ...
- SQL中的存储过程和函数
存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如 ...
- SQL语句流程函数
本人因为今天用到了流程函数,顿时感觉语法生疏啊,为了防止以后忘记,故写此篇!!! 流程函数是MySQL相对常用的一类函数, 用户可以使用这类函数在一个SQL语句中实现条件选择, 这样能够提高效率. 下 ...
- mysql 开发基础系列7 流程函数与其它函数
一.流程函数 -- 创建表来介绍 ,)); ,),(,), (,),(,),(,), (,NULL); SELECT * FROM salary 1. if(value,t,f) 超过2000的用h ...
- MySQL聚合函数、控制流程函数
[正文] 一.navicat的引入:(第三方可视化的客户端,方便MySQL数据库的管理和维护) NavicatTM是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设 ...
- MySQL中的存储过程和函数
存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...
- MYSQL-----控制流程函数(case when...then..else..end)
MySQL有一些内置的控制流程函数,可以在SQL语句中使用这些函数来更加准确和直接的结果. 第一种语法: case when [value] then result ................. ...
- SQL中Round(),Floor(),Ceiling()函数的浅析
项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...
随机推荐
- 遇到scan configurtation CDT builder等的错误
可以直接propoerty中的builder中把这两项删除
- accp8.0转换教材第3章MySQL高级查询(一)理解与练习
一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...
- pl_sql develope连接远程数据库的方法
需要修改你所安装的数据的路径下 tnsnames.ora 文件(我安装路径是F:\app\Aside\product\11.2.0\dbhome_1\NETWORK\ADMIN) tnsnames.o ...
- XML读取两种方法
//第一种SAX方法解析 package a20170722.xmlex; import java.io.File; import java.util.ArrayList; import java.u ...
- ionic 最简单的路由形式,头部固定,下面tab切换-------一个简单的单页切换起飞了
<ion-header-bar class="bar-dark" align-title="left"> <h1 class="ti ...
- thinkphp的空控制器和空操作以及对应解决方法
在上篇随笔中我们已经知道了tp框架的四种访问方式,那么当在地址栏输入不存在的操作方法.控制器会怎么样呢? 先看一下定义: 空操作:一个对象(控制器)调用本身不存在的方法 空控制器:在实例化控制器对象的 ...
- (转载)Sybase:bcp命令参考
参考文档: http://blog.csdn.net/wwp1026/article/details/6900569
- # nodejs模块学习: express 解析
# nodejs模块学习: express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子 ...
- PostMessage,模拟键盘输入
for i := 0 to length(tel) do begin //SendMessage(cHwnd,WM_KEYDOWN,Integer(tel[ ...
- 【PHP】PHP面向对象编程--phpOOP入门
PHP从入门到精通 之PHP的面相对象编程 面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序 ...