Oracle SQL 之条件表达式

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       

前言

在Oracle中,我们有两种方式可以实现 IF-THEN-ELSE  的逻辑:CASE  语句 或者 DECODE 函数
相比较来说DECODE 函数会更加的简洁。

我们在oracle数据库中建立一个user_info表:

CREATE TABLE user_info(user_id NUMBER(2) primary key,        user_name VARCHAR2(14),       user_age NUMBER(4),        user_birthday DATE);
  
  
  • 1
  • 2
  • 3
  • 4

我们可以看到其中有 用户ID主键,用户姓名,用户年龄,以及用户生日。

CASE  语句

[ 第一题 ]
查询所有用户的信息,我们增加一个额外的显示字段age_type,将年龄小于20的设置为A,年龄在20到30之间的设置为B,大于30的设置为C。

SELECT u.user_id,       u.user_name,       CASE          WHEN u.user_age < 20 THEN          'A'         WHEN u.user_age >= 20 AND u.user_age < 30 THEN          'B'         ELSE          'C'       END age_type  FROM user_info u;
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

case查询结果1

[ 第二题 ]
查询员工信息,增加一个额外的字段user_type,如果是张三则显示为主管,如果是李四则显示为经理,其他显示为员工

SELECT u.user_id,       u.user_name,       CASE u.user_name         WHEN '张三' THEN          '主管'         WHEN '李四' THEN          '经理'         ELSE          '员工'       END user_type  FROM user_info u;
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

case查询结果2

DECODE 函数

我们将上面的的两题使用DECODE 函数再写一遍,代码如下:

[ 第一题 ]

SELECT u.user_id,       u.user_name,       u.user_age,       decode(trunc(u.user_age/10),       1, 'A',       2, 'B',        'C') age_type,       u.user_birthday  FROM user_info u;
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

[ 第二题 ]

SELECT u.user_id,       u.user_name,       u.user_age,       decode(u.user_name,       '张三', '主管',       '李四', '经理',        '员工') user_type,       u.user_birthday  FROM user_info u;
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注:如果只是判断两个数的大小,我们可以使用sign()函数

 

sign(n)函数:根据某个值n是0、正数、负数,分别返回0、1、-1

如题:
年龄小于25的设置为A,年龄大于25的设置为B,等于25的设置为 C:

SELECT u.user_id,       u.user_name,       u.user_age,       decode(sign(u.user_age-25),       -1, 'A',       1, 'B',       'C') age_type,       u.user_birthday  FROM user_info u;
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值