Oracle 语法内容
来源:互联网 发布:路易斯 汉密尔顿 知乎 编辑:程序博客网 时间:2024/05/24 03:22
1、case 与decode 语句
1) CASE语句可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE类似,但应该使用CASE,因为它与标准SQL兼容。
CASE有两种形式:
a)简单CASE语句,使用表达式确定返回值。语法:
CASE 表达式
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
...
WHEN 值N THEN 结果N
ELSE 缺省值
END
b)搜索CASE语句,使用条件确定返回值。语法:
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
WHEN 条件N THEN 结果N
ELSE 缺省值
END
2)DECODE函数是ORACLE PL/SQL中功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。语法:
DECODE(条件,值1,翻译值1,值2,翻译值2,...,值n,翻译值n,缺省值)
3)CASE能自动去掉字符右边的空格(左边的空格就去不了,此时得用trim函数),但DECODE不行。
比如:select case 'A ' --在A的右边有一个空格,此时查询结果为'a'
when 'A' then 'a'
end
from dual;
select decode('A ','A','a') --在第一个A的右边有一个空格,此时查询无结果集
from dual;
2、row_number ()、 rank ()和 dense_rank ()
伪列rownum无法实现按分组排序,此时可以使用以下三个函数:
row_number()/ rank()/ dense_rank() over(partition by COL1 order by COL2)
含义:
根据COL1分组,在分组内部根据 COL2排序,从而得到每组内部排序后的顺序编号(各个分组内从1开时排序)。
但三者还是有区别:
row_number():组内连续唯一排序---1,2,3,4
rank(): 组内跳跃排序 ---1,1,3,4
dense_rank(): 组内连续排序 ---1,1,2,3
3、求和sum() over()
sum(col) over():等同于sum(col)
sum(col1) over(order by col2):求累加
sum(col1) over (partition by col2):求各分区的总和
sum(col1) over (partition by col2 order by col3):求各分区的累加
4、自动汇总函数rollup 和cube
rollup是单字段汇总,cube是多字段汇总
--rollup示例
select col1 ,sum(col2)
from table_name
group by rollup(col1);
--cube示例
select col1,col2,sum(co3)
from table_name
group by cube(col1,col2);
- Oracle 语法内容
- oracle语法
- ORACLE 语法
- Oracle 语法
- ES6 语法大概内容
- [oracle] ORACLE触发器语法
- Oracle sql常用语法
- oracle之merge语法
- ORACLE的基本语法
- ORACLE触发器语法
- Oracle Sequence语法
- ORACLE相关语法
- ORACLE UPDATE 语句语法
- ORACLE存储过程语法
- oracle 语法总结
- [Oracle]语法备忘
- Oracle物化视图语法
- oracle 存储过程语法
- Eclipse快捷键大全
- coldfusion调用java的类方法
- JVM分代垃圾回收策略的基础概念
- .net中的Attribute,C#
- 【Trie字典树】ZOJ 3228
- Oracle 语法内容
- errno返回值的对应错误码
- extjs 的 spinner 组件
- 查看ORACLE中正在运行的存储过程
- GNU C库函数参考手册(2)
- 画刷
- php版本比较函数version_compare()
- makefile 小技巧
- zencart安装 wanp