zl程序教程

您现在的位置是:首页 >  其他

当前栏目

SQL之流程控制函数

2023-09-11 14:19:18 时间

简介

他们都用在SELECT后面

假设我们有这样一张表
在这里插入图片描述

IF

语法

IF(expr1,expr2,expr3)

expr1为判断条件,符合则返回expr2,否则expr3

例子

我们有一个这样的要求,查询表中的人员,大于20的打印✔,小于等于20的打印✖

SELECT `name`,IF(age>20,"✔","✖") FROM student;

执行语句,我们会得到
在这里插入图片描述
也就是说select后面的IF也相当于一列,满足和不满足的都有相应的打印

CASE

一般case结合when,else,end使用一起使用,其中else可以省略,end不可以省略,他也相当于一列

他有两种写法

写法一

  CASE case_value 
      WHEN when_value THEN statement_list
      WHEN ...
      ELSE statement_list
  END;

写法二

  CASE 
      WHEN expr1 THEN statement_list
      WHEN ...
      ELSE statement_list 
  END;

例子

固定值(第一种写法)

SELECT `name`,
	CASE `age`
	WHEN "30" THEN "age是30"
	ELSE "age不是30"
	END AS "描述"
FROM student LIMIT 10;

在这里插入图片描述
表达式(第二种写法)

这里其实就是将字段写在WHEN的后面

SELECT `name`,age,
	CASE 
	WHEN age > 20 THEN "age大于20"
	ELSE "age小于20"
	END AS "描述"
FROM student LIMIT 10;

在这里插入图片描述

分组

根据sql的执行顺序,点击,他会先进行分组,对于分组后的数据进行select后语句的执行

SELECT age,GROUP_CONCAT(`name`) AS 姓名,SUM(IF(sex="male",1,2))
FROM student
GROUP BY age;

执行结果
在这里插入图片描述
执行顺序

根据sql的执行顺序,执行的流程大致如下

  1. 通过age分成了三组
  2. 每一组的内容,我们可以通过GROUP_CONCAT函数来间接进行查看
  3. 对于聚合函数的执行
    1. 他相当于一个遍历
    2. 遍历每组的内容,把它放到一个列表(数组)中
    3. 遍历完后,对于数组中的数据进行计算,就是这一列的内容

IFNULL

他与if的使用差不多,这里就不做过多介绍了

IFNULL(expr1,expr2)
  • expr1 为判断的值
  • expr2 为当判断的值为空的时候,返回expr2