zoukankan      html  css  js  c++  java
  • SQL中的IF ELSE(CASE语句的使用)(转载)

    大家对IF ELSE语句可能都很熟悉,它是用来对过程进行控制的。在SQL的世界中CASE语句语句有类似的效果。下面简单的介绍CASE语句的用法。考虑下面的情况,假设有个user表,定义如下:

    CREATE TABLE USER   
    (   
    NAME VARCHAR(20) NOT NULL,---姓名   
    SEX INTEGER,---性别(1、男   2、女)   
    BIRTHDAY DATE---生日   
    );  
    CREATE TABLE USER
    (
    NAME VARCHAR(20) NOT NULL,---姓名
    SEX INTEGER,---性别(1、男 2、女)
    BIRTHDAY DATE---生日
    );

    CASE使用场合1:把user表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:

    SELECT    
        NAME,   
        CASE SEX   
            WHEN 1 THEN '男'  
            ELSE '女'  
        END AS SEX,   
        BIRTHDAY   
    FROM USER;  
    SELECT 
     NAME,
     CASE SEX
      WHEN 1 THEN '男'
      ELSE '女'
     END AS SEX,
     BIRTHDAY
    FROM USER;
     

    CASE使用场合2:假设user目前没有值,然后你往user导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?

    方法1:使用三条语句,先把2更新成3,接着把1更新成2,最后把3更新成1,很麻烦,不是吗?

    UPDATE USER SET SEX=3 WHERE SEX=2;   
    UPDATE USER SET SEX=1 WHERE SEX=3;   
    UPDATE USER SET SEX=2 WHERE SEX=1;  
    UPDATE USER SET SEX=3 WHERE SEX=2;
    UPDATE USER SET SEX=1 WHERE SEX=3;
    UPDATE USER SET SEX=2 WHERE SEX=1;

    方法2:使用CASE语句

    UPDATE USER SET SEX=   
    (   
    CASE SEX   
    WHEN 1 THEN 2   
    WHEN 2 THEN 1   
    ELSE SEX   
    END   
    );  
    UPDATE USER SET SEX=
    (
    CASE SEX
    WHEN 1 THEN 2
    WHEN 2 THEN 1
    ELSE SEX
    END
    );

          细心的朋友可能已经发现了,上面的方法1的三条语句的执行顺序有问题,没错,是我故意那些写的,仅仅是把1变成2,把2变成1就那么麻烦,而且很容易出错,想象一下,如果有很多这样的值需要变换,那是一种什么样的情况。还好,我们有CASE语句,有好多这样的值需要变换,CASE语句也不会存在问题。可能有些朋友还是有疑虑,这样做会不会死循环啊?哈哈,想法很好,如果你发现这样做会死循环,一定要告诉IBM,我反正没发现。

    CASE使用场合3:假设让你把张三的生日更新成1949-10-1,李四的生日更新成1997-7-1等,类似这样的更新由很多。该怎么办呢?非常简单,大多数人会这么做。

    update USER set BIRTHDAY='1949-10-1' where NAME='张三';   
    update USER set BIRTHDAY='1997-7-1' where NAME='李四';  
    update USER set BIRTHDAY='1949-10-1' where NAME='张三';
    update USER set BIRTHDAY='1997-7-1' where NAME='李四';

    当USER表的数据量非常大,而NAME字段上又没有索引时,每条语句都要进行全表扫描,如果这样的语句有很多,效率会非常差,这时候我们可以用CASE语句,如下:

    UPDATE USER SET BIRTHDAY=   
    (   
    CASE NAME   
    WHEN '张三' THEN '1949-10-1'  
    WHEN '李四' THEN '1997-7-1'  
    ELSE BIRTHDAY   
    END   
    )   
    where NAME in ('张三','李四');  
    UPDATE USER SET BIRTHDAY=
    (
    CASE NAME
    WHEN '张三' THEN '1949-10-1'
    WHEN '李四' THEN '1997-7-1'
    ELSE BIRTHDAY
    END
    )
    where NAME in ('张三','李四');

    以上语句只进行一次全表扫描,效率非常高。

  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/haw2106/p/6483331.html
Copyright © 2011-2022 走看看