第二章 : 连接、子查询、函数


- -使用 case表达式
- -SQL语句中有两种方法被用来实现条件
- -处理(IF - THEN - ELSE 逻辑) : CASE表达式和DECODE函数。
- -注意: CASE表达式和ANSI SQL一致。
- -DECODE函数是特有的Oracle语法

- - case表达式有两种形式: simple case和searched case

- - 1simple case:简单 case
- -语法:
case 列名
    when1 then 返回值 1
   [ when2 then 返回值 2
    when 值n then 返回值n
    else 返回值]    - -返回值用“”
end

- -将某个列值和值 1比较,如果相等则返回“返回值 1”;
- -如果不等则将列值和值 2比较,如果相等则返回“返回值 2”;
- -以此类推。如果列值和值 1、值 2、。。。值n都不等,则
- -返回 else后的值。

- -要求所有的返回值必须是同一个数据类型。

select last_name,job_id,salary,
        case job_id
          when 'IT_PROG' then 1. 10 *salary
          when 'ST_CLERK' then 1. 15 *salary
          when 'SA_REP' then 1. 20 *salary
          else salary end "revised_salary"
    from employees;



- - 1)searched case:搜索式 case
- -语法:
case 
    when 列名 =1 then 返回值 1
   [ when 列名 =2 then 返回值 2
    when 列名 =值n then 返回值n
    else 返回值] 
end   

- -以搜索式 case改写上例
select last_name,job_id,salary,
        case 
          when job_id = 'IT_PROG' then 1. 10 *salary
          when job_id = 'ST_CLERK' then 1. 15 *salary
          when job_id = 'SA_REP' then 1. 20 *salary
          else salary end "revised_salary"
    from employees;

- -decode函数实现和 case表达式一样的功能
select last_name,job_id,salary,
       decode(job_id
              , 'IT_PROG' , 1. 10 *salary
              , 'ST_CLERK' , 1. 15 *salary
              , 'SA_REP' , 1. 20 *salary
              , salary ) "revised_salary"
    from employees;

- -使用组函数(聚集函数)
- -组函数对一组一行进行操作并返回一个值。
- -所有的组函数默认情况下会忽略 null

- - 5个组函数:
- - avgmaxminsumcount

- -查询所有销售代表的平均月薪、最低月薪、最高月薪和月薪总和
select avg(salary), min(salary),
        max(salary), sum(salary)
   from employees
   where job_id like '%REP%';

- -注意:上面的查询对返回的结果集中的行没有明确地进行分组,
- -那么结果集中的所有行自动形成一个组。然后对该组行应用
- -组函数进行计算,最终返回的结果集中只有一行(因为只有一组)

- -对日期和字符串都可以求最大和最小
- -查询雇员的最早和最晚的入职日期
select min(hire_date), max(hire_date)
   from employees;

select min(last_name), max(last_name)
   from employees;  


- - count函数:返回表中满足条件的行的数量
- -常见 3种写法:
- - COUNT( *
- - COUNT(expr)
- - COUNT( DISTINCT expr)

- - 1COUNT( *):返回表中满足 where条件的行的数量 
- -查询部门 50的雇员的数量
select count( *)
   from employees
   where department_id = 50;

- -查询雇员的总数量
select count( *)
   from employees;


- - 2COUNT(列):返回表中列值非空的行的数量  
- -查询拿佣金的雇员的数量
select count(commission_pct)
   from employees;

- - 3COUNT( distinct 列):返回表中列值非空的并且列值不重复的行的数量   
- -查询所有雇员分布的部门的数量
select count( distinct department_id)
   from employees;

- -组函数和
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值