zoukankan      html  css  js  c++  java
  • 【《SQL进阶教程》】1-1 CASE表达式

    一、CASE表达式:

    用来描述条件分支;

    --简单CASE表达式:
    CASE sex
    	WHEN '1' THEN '男'
    	WHEN '2' THEN '女'
    ELSE '其他' END
    
    --搜索CASE表达式:
    CASE WHEN sex = '1' THEN '男'
    	 WHEN sex = '2' THEN '女'
    ELSE '其他' END
    

    注意事项:

    1. 各分支返回的数据类型必须统一;
    2. 必须要写END;
    3. 一般也必须写ELSE;
    4. 搜索CASE表达式的表达能力远大于简单表达式,一般都会使用前者。

    一)、在聚合函数中使用CASE:

    SELECT pref_name,
    	   --男性人口
    	   SUM(CASE WHEN sex = '1' THEN population ELSE 0 END) AS cnt_m,
    	   --女性人口
    	   SUM(CASE WHEN sex = '2' THEN population ELSE 0 END) AS cnt_f
    	FROM PopTbl2
       GROUP BY pref_name;
    

    ​ 上面的SQL语句就可以将一个列为[pref_name(县名), sex, population]的表转换成一个列为[县名, 男, 女]的表。这样的表就类似我们在Excel等软件中见到的表,也就是 二维表

    二)、在CASE语句中使用CHECK约束:

    CHECK 约束用于限制列中的值的范围。

    如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

    如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

    三)、在UPDATE语句里进行条件分支:

    ​ 使用多个UPDATE语句可能造成冲突,不利于保持原子性。

    --为工资高于300000的员工降薪
    UPDATE Salaries
       SET salary = salary * 0.9
     WHERE salary >= 300000;
    
    --为工资高于250000但低于280000的员工加薪
    UPDATE Salaries
       SET salary = salary * 1.2
     WHERE salary >= 250000 AND salary < 280000;
    
     --使用CASE来进行更新
     UPDATE Salaries
       SET salary = CASE WHEN salary >= 300000
       					 THEN salary * 0.9
       					 WHEN salary >= 250000 AND salary < 280000
       					 THEN salary * 1.2
       					 ELSE salary END;
    

    如上面的示例,如果有员工工资高于300000,被降薪后正好处于加薪区间,最后的结果反而是他被加薪了。

    四)、表之间的数据匹配:

    ​ 可以借助BETWEEN、LIKE、<、>、IN等谓词组合增强CASE语句的表达能力。

    五)、在CASE表达式中使用聚合函数:

    ​ 在CASE表达式中使用聚合函数可以增强CASE语句的表达能力。

    小结:

    • 新手用HAVING子句进行条件分支,高手用SELECT子句进行条件分支。

    • CASE在SQL中被视为表达式,在执行时会被判定为一个固定值,因此它也可以被写在聚合函数内部。相比较过程式编程语言中的条件判断语句,SQL中的CASE更类似于Lisp、Scheme等函数式语言中的条件表达式。

  • 相关阅读:
    java实现趣味拼算式
    windows下安装docker
    Docker_入门?只要这篇就够了!(纯干货适合0基础小白)
    网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?
    【深度解析】第三方支付的分类、接口与支付流程
    去外包公司的伙伴们小心了!——亲身经历,数数外包公司的坑
    一个tomcat下部署多个项目或一个服务器部署多个tomcat
    tomcat部署web应用的4种方法以及部署多个应用
    datatables增删改查的实现
    基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
  • 原文地址:https://www.cnblogs.com/enmac/p/13069781.html
Copyright © 2011-2022 走看看