流程控制函数 [MySQL][数据库]

流程控制函数

流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的选择,MySQL中的流程处理函数主要包括IF(),IFNULL()和CASE()函数

下面我们就来一一进行分析

  1. IF(value , value1 , value2)
    • 如果value的值为1(也就是表示true),则返回value1,否则就返回value2

这里我们通过一个例子来理解IF()函数的使用:

SELECT last_name,salary,IF(salary >= 6000,'高工资','低工资') AS "details"
FROM employees;
  • 这里就是判断员工表中如果工资>=6000,那么这个details字段显示的就是高工资,如果工资<6000,那么这个details字段显示的就是低工资
  • 上面的details就是我们给 IF(salary >= 6000,‘高工资’,‘低工资’)起的别名
注意: 我们对于字符串类型和日期时间类型的数据值我们都选择使用’’(单引号)括住,对于列的别名我们都使用""(双引号)括住
  1. IFNULL(value1,value2)
    • 如果value1不为null,则返回value1,如果value1为null,则返回value2
    • 我们常常可以使用这个函数来对表中为null的数据值进行替换,从而让其可以参与运算
      • 因为如果我们是一个null值我们就一般不使用其直接参与运算,因为null值参与运算后的结果一般还是null,我们往往将为null的值使用IFNULL()函数替换成一个其他值,比如0,就可以参与运算了

这里我们通过举例说明IFNULL()函数的使用:

SELECT last_name,commission_pct,IFNULL(commission_pct,0) AS "details"
FROM employees;
  • 这里就是判断如果commission_pct(奖金率)为null,那么就会返回一个0,如果不为null,那么返回原本不为null的值

  • 我们说IFNULL(value1,value2)函数可以看做是IF(value,value1,value2)函数的一个特殊情况,我们的IFNULL()函数判断是否为NULL,而我们的IF()函数不仅仅可以判断是否为NULL,还可以用来做一些其他的判断(比如比较大小等等)

    • 我们通过一个例子来说明IFNULL()函数是IF()函数的一个特殊情况

      SELECT last_name,commision_pct,
      #下面的IF()函数和IFNULL函数的执行结果是一样的
      IF(comission_pct IS NOT NULL,commmision_pct,0) AS "details1"
      IFNULL(commision_pct,0) AS "details2"
      FROM employees
      
  1. CASE WHEN 条件1 THEN 结果1
    WHEN 条件2 THEN 结果2

    [ELSE 结果n] END
    • 这个就相当于java中的if …else if … else …
    • 注意 : []中的内容可以有也可以没有

我们通过举例来说明这个case()函数的使用

SELECT last_name,salary,CASE WHEN salary>=15000 THEN '白骨精'
                             WHEN salary>=10000 THEN '潜力股'
                             WHEN salary>=8000 THEN '小屌丝'
                             ELSE '草根' END AS "details"
FROM employees;
  • 这里就是查询员工表中的员工,如果工资>=15000,则details字段就为’白骨精’,如果员工工资>=10000,则对应的details字段就为’潜力股’,如果员工工资>=8000,则对应的details字段为’小屌丝’,如果员工工资<8000,则对应的details字段值就为’草根’
  1. CASE 字段名 WHEN 常量值1 THEN 结果1
    WHEN 常量值2 THEN 结果2

    [ELSE 结果n] END
    • 相当于java中的switch…case…

这里我们通过一个例题来说明这个CASE()函数的使用

SELECT last_name,salary,CASE department_id WHEN 10 THEN salary*1.1
                                           WHEN 20 THEN salary*1.2
                                           WHEN 30 THEN salary*1.3
                                           #这里我们就省略了else ...
                                           END "details"
FROM employees
WHERE department_id IN(10,20,30);
  • 这里就是查询公司中部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,若部门号为20,则打印其工资的1.2倍,若部门号为30,则打印其工资的1.3倍

补充:

流程函数中有顺序结构和分支结构和循环结构,顺序结构就是按顺序执行,这里我们也讲到了分支结构,那么循环结构呐?

  • 其实我们可以发现在我们的SQL语句中其实是自带循环的,比如我们在写一个查询语句的时候,如果表中有100条记录,这个时候我们在查询语句中写一些判断语句,我们可以发现查询到的每一条记录都是满足这个判断条件的,也就是说明我们是将表中的所有记录都循环了一遍,使用每个记录都进行了比较
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值