ORACLE-SQL微妙之处

本文总结一下平时经常使用的SQL语句以及一些ORACLE函数的微妙之处。欢迎大家多多补充平时最常用的SQL语句,供大家学习参考。


SQL> select * from temp2;

NAME            SORCE

---------- ----------

1                  43

2                  23

3                  42

4                  87

5                  12

<span style="font-size: 14px;"><strong><span style="color: #ff0000;">1、数据累加</span></strong></span>

SQL> SELECT NAME, sum(sorce) OVER(ORDER BY NAME)

2    FROM temp2

3   ORDER BY NAME;

NAME       SUM(SORCE)OVER(ORDERBYNAME)

---------- ---------------------------

1                                   43

2                                   66

3                                  108

4                                  195

5                                  207

<span style="font-size: 14px;"><strong><span style="color: #ff0000;">2、去掉最大值和最小值</span></strong></span>

SQL> SELECT NAME,

2         sorce,

3         LAG(sorce) over(order by sorce)  Lag_List,

4         LEAD(sorce) over(order by sorce)  Lead_List

5    FROM temp2;

NAME            SORCE        Lag       Lead

---------- ---------- ---------- ----------

5                  12                    23

2                  23         12         42

3                  42         23         43

1                  43         42         87

4                  87         43

  1、著名分析函数--排序


SQL> SELECT name,

2         value,

3         RANK() OVER(order by value) RANK_SORT,

4         DENSE_RANK() OVER(order by value) DENSE_SORT,

5         ROW_NUMBER() OVER(order by value) ROW_SORT

6    FROM sorce;

NAME       VALUE       RANK_SORT DENSE_SORT ROW_SORT

---------- ------ ---------- ---------- ----------

wu          21          1          1          1

zhang       60          2          2          2

Li          70          3          3          3

xue         119         5          5          5

<span style="color: #ff0000;">wang        130         6          6          6

chen        130         6          6          7

sun         175         8          7          8</span>

zhao        285         9          8          9

su          359         10         9          10

Li          480         11         10         11<br>

可见三者的区别:<br>RANK()OVER():如果值相同,则两者顺序号相同,随机一个在另外一个的上边,而且顺序号会有间断,不是连续的;<br>DENSE_RANK():如果值相同,则两者顺序号相同,随机一个在另外一个的上边,而且顺序号仍然是连续的,不存在断层的现象;<br>ROW_NUMBER():如果值相同,则两种顺序号不同,安装顺序号依次排开,而且顺序号是连续的。

  2、TRANSLATE()函数

  translate函数与replace类似,但是又与replace不同,translate指定字符串string中出现的from_str,将from_str中各个字符替换成to_str中位置顺序与其相同的to_str中的字符。

  SQL Reference中给的例子:SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL;

  巧用:

  (1)判断一个字符串是数字

  SELECT TRANSLATE('ABC123','#1234567890.','#') FROM DUAL;

  (2)统计字符E出现的次数

  SELECT LENGTHB(TRANSLATE('ABCDEFGEFGDBE','E'||'ABCDEFGEFGDBE','E')) FROM DUAL;

  3、ROUND()函数

  我们平时用得最多的是第一种,用ROUND()函数作为数据四舍五入运算,其实ROUND函数还有第二种形式,对日期进行格式化操作,与TRUNC()函数类似。

  如:SELECT ROUND(SYSDATE,'yyyy') FROM DUAL;

  SELECT ROUND(SYSDATE,'MM') FROM DUAL;

  SELECT ROUND(SYSDATE,'HH24') FROM DUAL;

  4、NVL相关函数

  NVL相关的函数有:NVL(expr1,expr2),NVL2(expr1,expr2,expr3),NULLIF(expr1,expr2),DECODE(expr1,expr2,value1,expr3,value2...,default)

  (1) NVL(expr1,expr2) :如果expr1为空,则用expr2来替换。

  (2) NVL2(expr1,expr2,expr3) :如果expr1非空,则返回expr2,否则返回expr3。

  (3) NULLIF(expr1,expr2):将expr1和expr2做比较,如果想等,则返回null,否则返回expr1。

  (3) DECODE(expr1,expr2,value1,expr3,value2...,default):如果expr1与expr2相等,则返回value1,如果expr1与expr3相等,则返回value2,...否则,返回default。

  5、收集表的统计信息

  收集表的统计信息方法有很多种: (1) ANALYZE  (2) DBMS_STATS

  看起来很繁琐,其实用起来挺简单的。

  如对某张表进行分析:

  ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS;

  目前,ORACLE官方推荐第二种方法。在DBMS_STATS包里有很多过程和方法,对SCHEMA、TABLE和INDEX进行收集统计信息相关的操作。

  EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'SCOTT',TABNAME=>'EMP',DEGREE=>4,CASCADE=>'TRUE');

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-03 02:15:02

ORACLE-SQL微妙之处的相关文章

Oracle SQL tuning 数据库优化步骤图文教程

  SQL Turning 是Quest公司出品的Quest Central软件中的一个工具.Quest Central是一款集成化.图形化.跨平台的数据库管理解决方案,可以同时管理 Oracle.DB2 和 SQL server 数据库. 一.SQL Tuning for SQL Server简介 SQL语句的优化对发挥数据库的最佳性能非常关键.然而不幸的是,应用优化通常由于时间和资源的因素而被忽略.SQL Tuning (SQL优化)模块可以对比和评测特定应用中SQL语句的运行性能,提出智能

过滤两个字段-关于oracle sql查询同一个表,根据不同字段过滤去重的问题

问题描述 关于oracle sql查询同一个表,根据不同字段过滤去重的问题 select j.xmbhid,j.xmmc,j.scjd,j.xmzt from jhxx_new j where j.xxdm='4111010001' and j.lrjh in (209,210,244) order by xmbhid,scjd,xmzt 重复记录中所处阶段三个状态(0,2,3),项目状态(xmzt)两个状态(0,1) 先要查看所处阶段最大值,并且项目状态是1,即第二个图片的显示效果,求大神们帮

Oracle SQL tuning 数据库优化步骤分享(图文教程)_oracle

SQL Turning 是Quest公司出品的Quest Central软件中的一个工具.Quest Central是一款集成化.图形化.跨平台的数据库管理解决方案,可以同时管理 Oracle.DB2 和 SQL server 数据库. 一.SQL Tuning for SQL Server简介 SQL语句的优化对发挥数据库的最佳性能非常关键.然而不幸的是,应用优化通常由于时间和资源的因素而被忽略.SQL Tuning (SQL优化)模块可以对比和评测特定应用中SQL语句的运行性能,提出智能化的

《Oracle SQL疑难解析》——1.8 在一个语句中修改多个字段值

1.8 在一个语句中修改多个字段值 Oracle SQL疑难解析 1.8.1 要解决的问题 需要在一个表中修改一行或多行的多个字段值. 1.8.2 解决方法 UPDATE语句可以让我们轻松地修改一行或多行的数据,我们也可以在UPDATE语句中用多个"column=value"子句来修改多个字段的值.例如,我们可以用下面的单个UPDATE语句来修改James Marlow(其EMPLOYEE_ID为131)的电话号码.工作角色和薪水: update hr.employees set jo

【SQL】Oracle SQL monitor

[SQL]Oracle SQL monitor 第一章 被埋没的SQL优化利器--Oracle SQL monitor DBAplus社群 | 2015-11-26 07:00 转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). 据说,在Oracle企业版数据库中有一个免费的工具,乃SQL优化之利器,那就是Oracle SQL monitor.下面,由DBA+社群原创专家周俊,给大家科普一下这一被埋没的神器. 周俊 D

Oracle SQL语句处理过程

oracle|过程|语句 07年开始,换了一家公司,数据库使用的是ORACLE10G,以前一直使用的是INFORMIX和MSSERVER,感觉ORACLE功能还真强大,比Informi和msserver都好用多啦,体系结构和管理方式都有了许多变化,但使用两个月下来,其实数据库的基本原理是一样的,现结合以前的工作经验和学习的资料,总结ORACLE数据库的一些知识,今天先写Oracle SQL语句处理过程:            一般来说,数据库处理SQL都会经过三个过程:分析.执行.返回结果,比如

Oracle SQL依然无可替代--《Mastering Oracle SQL》

oracle  天寒地冻,呆在家里又读完了<Mastering Oracle SQL>2nd,发现Oracle的功能还是很强悍,光函数就有两百个,HSQL是很难比拟的.接下来的硬骨头,看来要么冒险用Hibernate3.0的SQL Mapping功能,要么就自己跑JDBC组装VO了.       1.报表合计专用的Rollup函数         销售报表  广州     1月      2000元  广州     2月      2500元  广州                 4500元

Oracle SQL*Loader 使用指南(转载)

oracle SQL*Loader是Oracle数据库导入外部数据的一个工具.它和DB2的Load工具相似,但有更多的选择,它支持变化的加载模式,可选的加载及多表加载. 如何使用 SQL*Loader 工具 我们可以用Oracle的sqlldr工具来导入数据.例如: sqlldr scott/tiger control=loader.ctl 控制文件(loader.ctl) 将加载一个外部数据文件(含分隔符). loader.ctl如下: load data infile 'c:\data\my

学习oracle sql loader 的使用

oracle 学习oracle sql loader 的使用 一:sql loader 的特点oracle自己带了很多的工具可以用来进行数据的迁移.备份和恢复等工作.但是每个工具都有自己的特点. 比如说exp和imp可以对数据库中的数据进行导出和导出的工作,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面.有着速度快,使用简单,快捷的优点:同时也有一些缺点,比如在不同版本数据库之间的导出.导入的过程之中,总会出现这样或者那样的问题,这个也许是oracle公司自己产品的兼容