SQL积累

本文介绍了Oracle数据库中一些实用的SQL技巧,包括如何查询用户下的指定表是否存在、创建和管理同义词、优化分页查询语句、按时间进行分组统计及使用decode函数的方法。
[b]1 oracle 查询用户下的某张表是否存在的sql[/b]

SELECT COUNT(*) as count
FROM all_tables
WHERE table_name= 'tablename'

这个是查询当前登录用户的,count=0说明表不存在

[b]2. oracle同义词[/b]
创建同义词:create synonym table_name for table_name@DB_Link;
例如:CREATE SYNONYM IUNI_ORDER_ACTION FOR GIONEE_DRS.IUNI_ORDER_ACTION@DBLINK_DP_ONLINE;
删除同义词: drop public synonym table_name;
查看所有同义词:select * from dba_synonyms;

[b]3. ORALCE分页查询语句优化[/b]
(1) SELECT * FROM (
SELECT T.*,ROWNUM RN FROM(
SELECT * FROM TABLE_NAME
) T WHERE ROWNUN<=40
) WHERE RN>=20;

(2) SELECT * FROM(
SELECT T.*,ROWNUM RN FROM(
SELECT * FROM TABLE_NAME
)T
)WHERE RN BETWEEN 21 AND 40;

对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询 中,以提高内层查询的执行效率。
详见:http://kingsen5.blog.163.com/blog/static/189301290201142591225277/

[b]4. Oracle按时间分组统计的sql[/b]
1.按年份分组
年份:YYYY
月份:YYYY-MM
季度:yyyy-Q
周:yyyy-IW
 select to_char(exportDate,'yyyy'),sum(amount) from table1 group by to_char(exportDate,'yyyy');

2 SQL获取这周第一天和最后一天。
SELECT TRUNC(TO_DATE(sysdate,'YYYY-MM-DD'),'IW') AS STARTDATE FROM DUAL;--本周周一
SELECT TRUNC(TO_DATE(sysdate,'YYYY-MM-DD'),'IW') + 6 AS ENDDATE FROM DUAL;--本周周日
其他对周的更多操作:http://www.2cto.com/database/201407/318501.html

[b]5 Oracle 中 decode 函数用法[/b]
http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值