• SQL之流程控制函数


    简介

    他们都用在SELECT后面

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

    IF

    语法

    IF(expr1,expr2,expr3)
    
    • 1

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

    例子

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

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

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

    CASE

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

    他有两种写法

    写法一

      CASE case_value 
          WHEN when_value THEN statement_list
          WHEN ...
          ELSE statement_list
      END;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    写法二

      CASE 
          WHEN expr1 THEN statement_list
          WHEN ...
          ELSE statement_list 
      END;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例子

    固定值(第一种写法)

    SELECT `name`,
    	CASE `age`
    	WHEN "30" THEN "age是30"
    	ELSE "age不是30"
    	END AS "描述"
    FROM student LIMIT 10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    SELECT `name`,age,
    	CASE 
    	WHEN age > 20 THEN "age大于20"
    	ELSE "age小于20"
    	END AS "描述"
    FROM student LIMIT 10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    分组

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

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

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

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

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

    IFNULL

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

    IFNULL(expr1,expr2)
    
    • 1
    • expr1 为判断的值
    • expr2 为当判断的值为空的时候,返回expr2
  • 相关阅读:
    Servlet生命周期
    AIGC 时代,Amazon DeepRacer 带你驶入机器学习的快车道
    仿射变换案例
    页面跳转为什么要重新登陆
    TDengine负载均衡测试(运维场景)
    关于GIT配置安装及使用
    2022“杭电杯”中国大学生算法设计超级联赛(7)
    牛客 NC24858 [USACO 2009 Nov S]Job Hunt
    PHP - AJAX 与 PHP
    C++:stl:stack、queue、priority_queue介绍及模拟实现和容量适配器deque介绍
  • 原文地址:https://blog.csdn.net/youhebuke225/article/details/126506254