本人因为今天用到了流程函数,顿时感觉语法生疏啊,为了防止以后忘记,故写此篇!!!

流程函数是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
下面的例子中模拟对职员进行分类,首先创建一个职员薪水表:
1
create table salary(userid int, salary decimal(9,2));

插入一些测试数据
1
insert into salary values (1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(1,null);
数据如下
1
2
3
4
5
6
7
8
9
10
11
12
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'来表示.
1
2
3
4
5
6
7
8
9
10
11
12
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替换.
1
2
3
4
5
6
7
8
9
10
11
12
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函数实现上面例子中高薪低薪的问题.
1
2
3
4
5
6
7
8
9
10
11
12
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种情况。同样可以分成更多种情况,这里不再举例了,有兴趣的朋友可以自己测试一下
1
2
3
4
5
6
7
8
9
10
11
12
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)

SQL语句流程函数的更多相关文章

  1. 第五篇、常用的SQL语句和函数介绍

    简介: 在使用到sqlite3的时候,常常需要写一些SQL语句,现将常用到的部分语句稍微总结以下,由于个人习惯,关键字用大写. 附: /*简单约束*/ CREATE TABLE IF NOT EXIS ...

  2. SQL 语句常用函数

    一.字符转换函数 1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CH ...

  3. 厚溥教育1718部数据库连接作业答案,分装一个操作数据库而无需写SQL语句的函数

    <?php header("Content-type:text/html;charset=utf8"); //PHP操作数据库的函数 function phpsql($dbc ...

  4. 四、oracle基本sql语句和函数详解

    一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构 ...

  5. Oracle数据库入门——sql语句和函数详解

    一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构 ...

  6. sql语句replace函数的使用

    SQL中的替换函数replace()使用 语法 REPLACE ( string_expression , string_pattern , string_replacement ) 参数 strin ...

  7. mssql 常用SQL语句或函数

    按 OrderDate 的顺序计算 SalesOrderHeader 表中所有行的行号,并只返回行 50 到 60(含). WITH OrderedOrders AS ( SELECT SalesOr ...

  8. C#程序中SQL语句作为函数参数形式问题

    今天遇到一个神奇现象,目前正在写一个Demo,人事管理系统,首先肯定是初始化主页面,在初始化时,需要声明一个登陆窗体,但是当我在登陆窗体中填入登入名称和密码时直接就登陆成功了,但是发现我的status ...

  9. Oracle 树形SQL语句,SYS_CONNECT_BY_PATH 函数

    转一个SYS_CONNECT_BY_PATH 函数的例子.推断原表应该是这样: Child                        Parent ------------------------ ...

随机推荐

  1. Javascript 继承 图形化展示

      <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" conte ...

  2. iOS 环信消息撤回

    这两天在做环信的消息回撤,在网上找了许久没有这种案例,之后官方的一些方法,但是自己做,还是需要花点时间去整理,所以我决定等我把这个做好之后,分享给大家,如果做的不好多多指教,谢谢- 首先要实现消息撤回 ...

  3. 导入android工程没有R文件的解决办法

    第一种: 千万不要重启Eclipse.也不自己创建R.java 类文件! 右击你的工程(项目)——>Android Tools——>Fix Project Properties       ...

  4. 如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单

    阅读目录 前言 解决数据一致性的方案 回到DDD 设计 实现 结语 一.前言 之前的十一篇把用户购买商品并提交订单整个流程上的中间环节都过了一遍.现在来到了这最后一个环节,提交订单.单从业务上看,这个 ...

  5. 《JAVASCRIPT高级程序设计》闭包

    一.闭包的概念 闭包是JAVASCRIPT中最重要的概念之一,闭包是指有权访问另一个函数作用域中变量的函数:创建闭包常见的方式,就是在一个函数内部,创建另一个函数.以下的例子创建了一个闭包,加粗的两行 ...

  6. oracle_权限

    Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级.Role 角色级.这些权限可以授予给用户.特殊用户publi ...

  7. 【4Large-Style】前端框架设计——Button 的设计思路

    Button 的设计 Button 作为基本的 Web 元素,看似简单,却需要非常用心的设计,因为 Button 作为按钮,是具有多个不同的状态,每种状态都基本上需要进行一些特殊的优化设计,以让组件更 ...

  8. TCP/IP 协议族的简介

    TCP/IP重要的特性就是分层.TCP/IP 按照层次分为四层:应用层.传输层.网络层.数据链路层.分层的好处就是当某些地方需要改变的时候,只需要将改变的层替换掉即可,而不用去把整体做替换.各层之间的 ...

  9. ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

    .NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...

  10. Vue.js 系列教程 5:动画

    原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地 ...