当前位置: 代码迷 >> SQL >> SQL累积
  详细解决方案

SQL累积

热度:48   发布时间:2016-05-05 11:04:16.0
SQL积累
1 oracle 查询用户下的某张表是否存在的sql

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

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

2. oracle同义词
创建同义词:create synonym table_name for [email protected]_Link;
例如:CREATE SYNONYM IUNI_ORDER_ACTION FOR  [email protected]_DP_ONLINE;
删除同义词: drop public synonym table_name;
查看所有同义词:select * from dba_synonyms;

3. ORALCE分页查询语句优化
(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/

4. Oracle按时间分组统计的sql
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

5 Oracle 中 decode 函数用法
http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html
  相关解决方案