oracle with as merge,oracle笔记整理7——with as、case when、merge into、分析函数over()

1) with as

a) WITH AS短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句所用到。

b) 当查询中多次用到某一部分时,可以用Oracle with语句创建一个公共临时表。因为子查询在内存临时表中,避免了重复解析,所以执行效率会提高不少。临时表在一次查询结束自动清除。

c) 应用:需多次调用;union all中;

d) 示例

with

sql1 as (select s_name from test_tempa), sql2 as (select s_name from test_tempb where not exists (select s_name from sql1)) select * from sql1 union all select * from sql2 union all select 'no records' from dual where not exists (select s_name from sql1 where) and not exists (select s_name from sql2);

2) case when

a) 简单case语句

select case to_char(sysdate,’d’) when ‘1’then ‘周日’ when ‘2’ then ‘周一’ else ‘不知道’ end from dual;

b) 搜索case语句

SELECT count(col3), sum(CASE WHEN col3 = 1 THEN 1 ELSE 0 END) , sum(CASE WHEN col3 = 2 THEN 1 ELSE 0 END) FROM table_name;

c) where case when 用法

SELECT T2.*, T1.* FROM T1, T2 WHERE (CASE WHEN T2.col2 = 'A' AND T1.col3 = 'B' THEN 1 WHEN T2.col2 != 'A' AND T1.col3 != 'B' THEN 1 ELSE 0 END) = 1

d) group by case when 用法

SELECT CASE WHEN col2 = '05' THEN '1' WHEN col2 = '23' THEN '2' ELSE NULL END "类别", COUNT(*) FROM table_name GROUP BY CASE WHEN col2 = '05' THEN '1' WHEN col2 = '23' THEN '2' ELSE NULL END;

3) merge into

在oracle 11g中有如下特点

a) update和insert子句时可选的。

b) update和insert子句可以加where子句

merge into table_a a using table_b b on (a.id = b.id) when matched then update set a.name = b.name where …… when not matched then insert values (a.id,a.name) where ……

4) 分析函数over()

a) ROW_NUMBER(),不允许并列名次、相同值名次不重复,结果如123456……

b) RANK(),跳跃排序,允许并列名次、复制名次自动空缺,结果如12245558……

c) DENSE_RANK(),允许并列名次、名次不间断,结果如122344456……

d) 例子:

select * from ( selelct row_number() over(partition by xxx2 order by xxx3 ) rw from dual)tt where tt.rw = ?;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值