博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle SQL中的 IF ELSE
阅读量:4050 次
发布时间:2019-05-25

本文共 2031 字,大约阅读时间需要 6 分钟。

-- Start

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

CREATE TABLE USER_INFO(    NAME        VARCHAR2(20) NOT NULL,  ---姓名    GENDER      NUMBER(1,0),            ---性别(1、男	2、女)    BIRTHDAY    DATE                    ---生日);INSERT INTO USER_INFO VALUES ('张三', 1, DATE '2014-12-27');INSERT INTO USER_INFO VALUES ('李四', 2, DATE '2014-12-27');

CASE使用案例 1

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

SELECT 	NAME,	CASE GENDER		WHEN 1 THEN '男'		ELSE '女'	END AS GENDER,	BIRTHDAYFROM USER_INFO;

CASE使用案例 2

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

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

UPDATE USER_INFO SET GENDER=3 WHERE GENDER=2;UPDATE USER_INFO SET GENDER=1 WHERE GENDER=3;UPDATE USER_INFO SET GENDER=2 WHERE GENDER=1;
方法2:使用CASE语句

UPDATE USER_INFO SET GENDER=(  CASE GENDER    WHEN 1 THEN 2    WHEN 2 THEN 1    ELSE GENDER  END);
细心的朋友可能已经发现了,上面的方法1 的三条语句的执行顺序有问题,没错,是我故意那些写的,仅仅是把1变成2,把2变成1就那么麻烦,而且很容易出错,想象一下,如果有很多这样的值需要变换,那是一种什么样的情况。还好,我们有CASE语句,有好多这样的值需要变换,CASE语句也不会存在问题。

CASE使用案例 3

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

UPDATE USER_INFO SET BIRTHDAY = DATE '1949-10-1' WHERE NAME = '张三';UPDATE USER_INFO SET BIRTHDAY = DATE '1997-7-1' WHERE NAME = '李四';
当 USER_INFO 表的数据量非常大,而 NAME 字段上又没有索引时,每条语句都要进行全表扫描,如果这样的语句有很多,效率会非常差,这时候我们可以用 CASE 语句,如下:

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

CASE 语句的形式

事实上,CASE 语句有两种形式。

SELECT	-- 简单 CASE 语句(Simple CASE)    CASE GENDER          WHEN 1 THEN '男'          ELSE '女'      END AS GENDER,	-- 查询 CASE 语句(Searched CASE)    CASE           WHEN GENDER = 1 THEN '男'          ELSE '女'      END AS GENDER	FROM USER_INFO;

DECODE 函数

此外, Oracle 还提供了一个函数来达到和 CASE 语句相同的效果。

SELECT DECODE(GENDER, 1, '男', 2, '女', '未知') FROM USER_INFO;

-- 更多参见:

-- 声明:转载请注明出处

-- Last Edited on 2015-01-26

-- Created by ShangBo on 2014-12-17

-- End

你可能感兴趣的文章
关于系统崩溃后的Oracle恢复
查看>>
遭遇蚊子的獠牙,想起一种叫黄鸡婆的小虫子
查看>>
使用批处理命令给客户更新oracle数据库
查看>>
回首考研路:那年,那月,还有那条孤独的考研狗
查看>>
GCD小结
查看>>
IOS 第三方库介绍
查看>>
iPhone架构xmpp聊天工具 -xmpp协议初识《一》
查看>>
iOS提交后申请加急审核
查看>>
iOS7单元测试
查看>>
ios framework 通用库的制作
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
GitHub详细教程
查看>>