
Oracle数据库-SQL
文章平均质量分 62
q3dxdx
IT男性民工
展开
-
数据库范式
数据库范式范式,是用来规定数据冗余程度的,一般越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)第二范式(2NF)第三范式(3NF)巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般只用前三种范式,后三种基本没使用。一般说来,数据库只需满足第三范式(3NF)就转载 2015-10-18 20:46:48 · 286 阅读 · 0 评论 -
幻影读以及如何避免
这同样是上次的培训材料,下面在这里共享出来,直接上材料的截图:如何避免呢? select for update要注意,应用代码里嵌入for update时一定要注意,要准确使用这个功能。原创 2015-10-08 21:45:37 · 1112 阅读 · 0 评论 -
【SQL优化】四月份培训的一个sql优化案例3
下面的语句同样是生产环境的慢sql,通过我对大家的培训,把部分慢sql给当场干掉,成功阻止了双节点cpu偶尔过高的问题:直接上当时的材料:原始sql语句:select sum(aaa.acceptid) from (select count(c.accept_id) as acceptid from cct_log_eomsintf_201503 c,原创 2015-10-08 21:35:52 · 326 阅读 · 0 评论 -
【SQL优化】四月份培训的一个sql优化案例2
优化前:select count(*) from (select distinct k.accept_id as num from cct_log_eomsintf_201504 k where k.op_type in (4, 6) and k.id = (select max(id)原创 2015-10-08 21:32:11 · 255 阅读 · 0 评论 -
【SQL】10g字符串处理函数regexp_count
在10g之前,要计算如下字符串:SCKF100,CDKF200,MSKF300,ZYKF400,GYKF500中‘KF’子字符串出现的次数,很困难。结合translate函数可以完成,但是很麻烦:select length(translate(str1, 'KF' || str1, 'KF')) / length('KF') from (select 'SCKF100,CDKF2原创 2015-10-13 21:03:55 · 2999 阅读 · 1 评论 -
【SQL】通配符及转义符
sql中,在like操作符里,%代表一个或多个字符,而_代表一个(仅仅一个)字符。SQL> create table qt1(name varchar2(10));表已创建。SQL> insert into qt1 values('ABCD');已创建 1 行。SQL> insert into qt1 values('_BCDE');原创 2015-10-09 22:26:46 · 1003 阅读 · 0 评论 -
SQL集合操作符笔记
借助老婆的电脑,简单地对sql的四个集合操作符做个笔记。Oracle SQL里实现了四个和集合运算相关操作符:UNION,UNION ALL,INTERSECT,MINUS除了UNION ALL之外,其他三个操作符都要对结果集进行去重和排序,而UNION ALL既不去重也不排序。UNION,可以理解为合并,就是合并两个结果集,并去重和排序。UNION ALL,则可以理解为不去重也不原创 2015-09-28 20:12:43 · 348 阅读 · 0 评论 -
【SQL优化】字符串拼接concat与||
SQL> select concat('ABC','DEF') from dual;CONCAT------ABCDEFSQL> select 'ABC'||'DEF' from dual;'ABC'|------ABCDEFSQL> select 'ABC'||'DEF'||'GHI' from dual;'ABC'||原创 2015-10-09 21:06:25 · 2173 阅读 · 0 评论 -
【SQL】10g字符串处理函数regexp_substr的用法示例
在我们生产系统里,有这么一个配置表,他记录的工单派单的接收人员的排班表。程序会读取这个表,然后将工作任务单派发给当班的那些人员(工号),表配置基本如下:SQL> select * from v1;DT1 STR1-------- ---------------------------------------20151001 SCKF100,CDKF200,MSKF300,Z原创 2015-10-13 20:51:25 · 613 阅读 · 0 评论 -
截断表truncate操作为什么需要97秒
昨晚,在生产库truncate了一个68gb的超大日志表。根据各种资料显示,截断表操作只是降低segment的hwm,理应在瞬间完成。 那为什么我的truncate操作要花这么久的时间? 原因应该是这样的,由于系统是实时生产系统,并且这个表insert操作很频繁,据估计至少10条/s。所以在data buffer cache中缓存有大量需要dbwn写入数据文件的“脏数据”。原创 2015-09-25 09:17:57 · 788 阅读 · 0 评论 -
【SQL】求得工资在部门平均工资之上得员工
记得在考ocp的051考题,有道题目是说,根据员工表,求得工资在部门平均工资之上得员工,需要进行多表关联查询。先要按部门求平均工资:SQL> select deptno,avg(sal) as avg_sal_dpt from emp_copy group by deptno;DEPTNO AVG_SAL_DPT------ ----------- 30 1566.666666原创 2015-10-18 12:05:12 · 2642 阅读 · 0 评论 -
【SQL优化】一个生产线上剔重SQL的优化
在我们生产上有个表,记录的是工单派发的中间状态,派单程序各个模块之间会根据这个状态表分别对工作单执行不同的派法任务。很明显在这个表中,根据工作任务单不允许重复。但是很多时候,开发侧在设计的时候都不加主键(原因是害怕应用代码上报错,我去),所以我们需要定时去描述这个表,把重复的记录给删除。而之前的删除代码是这样写的:delete aiadmin.cct_trans_eomsi原创 2015-10-15 09:23:34 · 563 阅读 · 0 评论 -
【SQL优化】B树索引位图转换及OR到UNION(ALL)的改写
在11g中,or操作符如果发生在索引列上,数据库则会启用BITMAP CONVERSION(B树索引位图转换),如:SQL> select * from emp where empno=7788 or ename='SCOTT';执行计划----------------------------------------------------------Plan hash val转载 2015-10-11 09:34:04 · 447 阅读 · 0 评论 -
【SQL】按每5分钟生成全天的时间列表
select to_char((daybegin + (level - 1) * 5 / 1440), 'yyyy-mm-dd hh24:mi:ss') as newdaybegin from (select (trunc(sysdate, 'dd')) as daybegin from dual)connect by level <= 288后面话单报表开发要用到,记录一下。原创 2015-10-23 09:22:29 · 4811 阅读 · 0 评论 -
【SQL优化】不要使用not in
准备测试数据:SQL> create table tmp01 as select object_id,object_name from dba_objects;表已创建。已用时间: 00: 00: 03.35SQL> create table tmp02 as select object_id,object_name from dba_objects where原创 2015-10-09 16:27:40 · 648 阅读 · 0 评论 -
【SQL优化】null的运算
null只能进行如下类型的运算:1. is null判断;2. is not null判断;3. 函数运算(如nvl等)。另外,在oracle中null有时可以用''(就是两个单引号,之间什么都没有)来替代,但是不是完全等价的。SQL> select * from dual where null is null;D-XSQL> selec原创 2015-10-09 20:34:57 · 803 阅读 · 0 评论 -
【SQL】10g字符串处理函数regexp_substr的用法示例2
在网站访问日志表中,通常有一列表示客户端的ip地址(虽然ip地址通常不是真实用户地址)。我们有时在做报表统计时,需要根据ip地址前段,统计出访问量,比如:SQL> select * from v1;IPSTR-------------10.105.239.810.105.239.910.105.239.1010.105.3.10510.105.3.10610原创 2015-10-13 21:22:52 · 1125 阅读 · 0 评论 -
【SQL优化】子查询展开
下面是很早之前的优化例子,一直保存在本地笔记中,今天分享出来:交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。xxx网友 19:06:29哪位大哥大姐帮我优化一下SQl 我数据记录太多 加载不了啊我 19:07:43可以贴上来研究哈xxx网友 19:07:57select (select org_name from o_org where org_原创 2015-10-09 15:12:06 · 970 阅读 · 0 评论 -
【SQL优化】四月份培训的一个sql优化案例1
2015年4月,在对项目组里进行sql优化培训的时候,提到过一个生产环境的sql优化,下面搬过来记录在这里。下面是当时的培训材料:请问大家:在accept_id列上建立有普通索引,然后使用如下三种形式的like操作符,哪些会不走索引?1,where accept_id like '%0419%' ---查询04月19日的工单;2,where accept_id li原创 2015-10-08 21:23:36 · 291 阅读 · 0 评论 -
【SQL】求两个日期值之间的工作天数
读书:《Oracle查询优化改写》后有感。以emp表为例,我们需要求得hiredate的最大值与最小值之间的工作天数。首先,我们需要求出max和min的hiredate:SQL> select max(t.hiredate) as maxdate, min(t.hiredate) as mindate from emp t;MAXDATE MINDATE----------- --原创 2015-10-18 13:31:55 · 2685 阅读 · 0 评论 -
【SQL】分组再聚合&ratio_to_report函数
如下表记录:select empno, ename, deptno, sal from emp_copy order by deptno asc;结果如下:我们可以很轻松地,使用sum()函数求出薪水的总和,再结合group by按部门进行分组:SQL> select deptno, sum(sal) from emp_copy group by deptno;DE原创 2015-10-18 11:28:38 · 1901 阅读 · 0 评论 -
【SQL】update关联更新
是这样的,我们系统里有个员工表CCT_SYS_STAFF,里面有个字段是保存的员工的密码。一般情况下,这个密码员工是不记得的,因为应用登录时是通过另外一套认证系统来做鉴权,然后跳转到我们系统。但是如果那套鉴权系统出现问题,那么就需要员工从我们这个表里做身份鉴权,此时大部分员工忘记了自己的密码,那么我们需要为其设置统一密码。在应急登录之后,我们又需要将原来的密码给还原。所以我们在重置统一原创 2015-10-15 16:18:26 · 1401 阅读 · 0 评论 -
【SQL优化】中文是合法的
SQL> create table zw(标示 int, 名称 varchar2(10));表已创建。SQL> desc zw; 名称 是否为空? 类型 ----------------------------原创 2015-10-09 20:47:37 · 250 阅读 · 0 评论 -
【SQL】null对聚合函数的影响
我们比较常用的聚合函数,如 max,min,sum,avg,count等,都会忽略null值。而我们在处理max以及sum时,没有考虑null值,但在处理avg和coun以及mint时就要注意了:SQL> select max(comm), max(coalesce(comm, 0)) from emp; MAX(COMM) MAX(COALESCE(COMM,0))---原创 2015-10-15 21:30:20 · 3462 阅读 · 0 评论 -
【SQL】删除表中重复数据
已emp表为基础,复制创建一张表,用于试验:select * from emp;create table emp_copy as select * from emp;insert into emp_copy select * from emp;insert into emp_copy select * from emp;很明显,emp_copy中比原来emp中每条记录重原创 2015-10-14 22:08:44 · 602 阅读 · 0 评论 -
【SQL】今天的一个sql面试题(分层函数使用)
以hr用户的employees表为例,要实现如下查询结果:fuck,原来可以直接粘贴!!!红色部分的结果就是分层查询。第1条记录为例,他表示Bloom的经理是Cambrault,Cambrault的经理是King。这在人事系统里面,是绝对要使用的查询方法。怎么实现?其实我也知道是分层查询,也知道要有level和connect by。但是tmd这个语句也有些复原创 2015-10-10 22:01:10 · 1234 阅读 · 0 评论 -
【SQL】NULLS FIRST的作用
在按列排序的时候,我们常常忽略空值(null)的影响。如,我们需要提取奖金最少的前3个员工,将其奖金增加1000,很可能开发人员是这样写的sql:SQL> select empno,ename,comm,comm+1000 as new_comm from (select empno,ename,comm from emp order by comm asc) where rownum原创 2015-10-10 21:12:52 · 1022 阅读 · 0 评论 -
记录是按照插入的顺序而返回吗,如何将返回记录随机排序
很多人以为,记录是按照插入的时间顺序返回的,比如:SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- ----原创 2015-10-09 21:39:15 · 381 阅读 · 0 评论 -
【SQL优化】条件逻辑判断“case when then”
SQL> select dummy from dual;D-XSQL>看下面的case when语句:select case when dummy = 'X' then '1' when dummy '2' else '0'原创 2015-10-09 21:18:35 · 4025 阅读 · 0 评论 -
【SQL】9i数据库level层次深度的限制
在将话单转为每5分钟的报表时,需要先生成当天的每5分钟的一个时间列表,列表长度是1440/5=288行。我们数据库是9i,发现在生成level深度时,超过100就不显示了。查了哈,原来是9i的限制,10g+无该限制。如:select level from dual connect by level 以上语句在10g+中执行有288行记录返回,但是在9i数据库执行居然只返回100行。原创 2015-10-23 09:08:47 · 332 阅读 · 0 评论