我们拒绝平庸,拒绝随波逐流,拒绝墨守成规,让梦想不再流浪。

oracle语法 续2

上一篇 / 下一篇  2014-05-27 17:30:48 / 个人分类:甲骨文

%N4Ys&}u E5~0 DDL 中使用子查询51Testing软件测试网U'B|PQ.e*DN H*Oz
========================================================51Testing软件测试网r8~k e4?$]w
create table 语句中的子查询51Testing软件测试网%[8B:E-me*E8un*s ut
--------------------------
UH6bPScIj9QT'L0create table dept1 (deptno, dname, loc) as51Testing软件测试网v7^5yW1m&X_q
select deptno, dname, loc from dept;51Testing软件测试网9}(U/CjTaI

pU3t+kU(z0create table emp1 as
+i)f2V.J,g"Rf Z M0select * from emp;51Testing软件测试网 XXME&_ \R2U[k#w
========================================================51Testing软件测试网^D&M(s g0y3xgF
create view 中使用子查询
Qp9j5d([1Qlb%f O0-----------------------51Testing软件测试网7`"UM\6w\ o%g8e1c6_
create or replace view dept_20 as51Testing软件测试网^)B;d%Y!b4Kr$wr4G
select * from emp1 where deptno = 20 order by empno;51Testing软件测试网q0N`6uP H8n|(Y

C8~K/P|!Rj9zS!m0
S f eW(| C*z0========================================================51Testing软件测试网(X7E$]0_ WQ)C
DML 中使用子查询
?h#I.[4T/AS0========================================================
R%G"eR!R"g|K.t0update 语句中使用子查询
/K2e6QG.f0-----------------------51Testing软件测试网zyG-r$P)GpiE
update emp1 set (sal,comm) =
^5B F1pmr V&bR4|0( select sal, comm from emp1 where ename = 'WARD' )
"iK E1hMwe{Au0where job = ( select job from emp1 where ename= 'WARD' )
^ c0L6ae z.[!b0
btq$U#e.N4{{ n)w1b0========================================================
N)k;p d m`JOx ]0delete 语句中使用子查询51Testing软件测试网A8aEO,@
-----------------------51Testing软件测试网Y'T+m!A9h"CF ?
delete from emp151Testing软件测试网_Ykn7s,G$QMU
where deptno = (select deptno from dept1 where dname = 'ACCOUNTING' )51Testing软件测试网:\G R`7nJ$U&ve

@{`+jo0========================================================
-G ~f[5~ e/ZpjS0insert 语句中使用子查询
)T{p)y0wB'O0-----------------------51Testing软件测试网Q4{ON z MH-pZ
insert into emp1
3pZ-l9IAK;K0select * from emp51Testing软件测试网U!Cy9Z7r.[@L _
where deptno = (select deptno from where dname = 'ACCOUNTING')51Testing软件测试网6z*d%eE X,D_ |2|b\

51Testing软件测试网3y9[(r2|;N_U

 51Testing软件测试网`N u![1w0Uk

51Testing软件测试网c"Z^lSj*kq7G/@

     基础查询分类51Testing软件测试网u"T1Zx.f7Bkv;G
============================================================
6X2s&]Q9vu*lK0基本查询 --- 所有列、指定列、where子句、order by子句51Testing软件测试网E:Hr [Zd
---------------------------------------------------
DC [(p'fz'`Z[0分组查询 --- 组处理函数、group by子句、having子句51Testing软件测试网u4p4mN r_#K,{fH#g,D
---------------------------------------------------51Testing软件测试网 oy L9g [bD uV
连接查询 --- 相等连接、不等连接、自我连接
M#c4MwKq$SF V0============================================================51Testing软件测试网cv3A&A+Y

Mubvj$u9Z(Z0============================================================51Testing软件测试网4V u{#_5E!s
合并查询 --- UNION,UNION ALL,INTERSECT,MINUS
'OAQk8M"^y0-----------------------------------------------------51Testing软件测试网h(^ AlK
子查询   --- 单行、多行、相关、标量、多列、DDL中、DML中
t)^$ag@0============================================================
Y/Vq NI0
_P(G!E'hvD{O${#V051Testing软件测试网1v2l&^#P(d0n
============================================================
Z4d`2[6`x0
E.C5He K#j01。order by 子句必须放在最后。51Testing软件测试网@:l@ w T~(Wr^U r

d~3F;I q:R02。组处理函数只能出现在选择列表、order by子句、having子句中,
e ddn#c\QQ0   不能出现在where子句和group by子句中。51Testing软件测试网hBW1SL$g\/x-R"t
51Testing软件测试网G8rWk9gk]
3。在选择列表中包含的列、表达式,则一定要出现在group by子句中。
zQ8@w{x;k051Testing软件测试网eOo#S?&t'?Z
4。where子句中可以使用单行子查询,可以使用单行运算符。51Testing软件测试网@6d!g~_a%w
   ( =,>,<,>=,<=,<> )51Testing软件测试网*vq#O!x7O\^m
51Testing软件测试网l7F#XQ2l.S6E:xbtV
5。where子句中可以使用多行子查询,可以使用多行运算符。
-yr4?-Z To1}0   ( in,not in,exists,not exists,all,any )
9E-|'i-R1cl] O I3}051Testing软件测试网RXl7W9B,hSps G
基本的Sql编写注意事项
6`Rhht9tZ0---------------------51Testing软件测试网XWr}XeE!j
1。尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。
BN"T_ g7r2O2L?;|j051Testing软件测试网y'mC*X!jRl#t
2。不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。51Testing软件测试网Ad:h"z%p4^l7sd#{

9C;}5v7A5yU%tD/^p03。Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。51Testing软件测试网X*U J\]Wle+[
   而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。51Testing软件测试网;`Zc4v g!}P
   NOT EXISTS 比 NOT IN 效率稍高。但具体在选择IN或EXIST操作时,51Testing软件测试网1kDO:T(Uc4b
   要根据主子表数据量大小来具体考虑。51Testing软件测试网Z/^'a:E9^:E P

W'dhM4m [04。不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,
h.yc-Sn6m0   可以用“<” or “>”代替。51Testing软件测试网'F'RSe+{ ]"Z
51Testing软件测试网%I+P!yzZavElr-AZU
5。Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。
Je |y8Y#R*v0   可以考虑在设计表时,对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作。51Testing软件测试网 V7X;|6]'P u'z
51Testing软件测试网&G!hE*~o e;p5Z N+c
6。当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用。
e.pmy(i_)qpM051Testing软件测试网){)I5F%H rz
7。对于有连接的列“||”,最后一个连接列索引会无效。尽量避免连接,51Testing软件测试网4f"B1C4o'i^y
   可以分开连接或者使用不作用在列上的函数替代。
8t]EZ0[/~1J[4{7h0
8{7I!FG[ Zj5a,P g08。如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。
gi.FJZ+j:}X{wb@4`'z051Testing软件测试网a6}3oB v0n5Y
9。Where子句中避免在索引列上使用计算,否则将导致索引失效而进行全表扫描。51Testing软件测试网 m'BHuQ4^)d+F
51Testing软件测试网4z*i Z-^X$B+i:l
10。对数据类型不同的列进行比较时,会使索引失效。
5c(F6}'?tPmY0
d? \ v B T011。用“>=”替代“>”。
\2UH2q%FYH0
l W+B1w9`}dI#EB012。UNION操作符会对结果进行筛选,消除重复,数据量大的情况下可能会引起磁盘排序。51Testing软件测试网'g[%L|&~h1lU k?
    如果不需要删除重复记录,应该使用UNION ALL。
`Zx*K2x GW!ik051Testing软件测试网kQQWAl,D"g
13。Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,
1F1xj']A;aE%A0    可以过滤掉最大数量记录的条件必须写在Where子句的末尾。51Testing软件测试网#e_;u*u%Kgs

R&}Z+b*Z7o014。Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,51Testing软件测试网2WoZOe^ l
    将记录最少的表放在最后。
,nWYT fiy7~051Testing软件测试网5\m0[JQB
15。Order By语句中的非索引列会降低性能,可以通过添加索引的方式处理。51Testing软件测试网-`ar5S/p(L
    严格控制在Order By语句中使用表达式。51Testing软件测试网b U@#L8`W Q
51Testing软件测试网j+|]9mU
16。不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,51Testing软件测试网/IK1M2I)w l
    防止相同的Sql语句被多次分析。51Testing软件测试网C%Y ^+S!~\

V:f,R-I4RD_:?017。当在Sql语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。51Testing软件测试网;BL*W?&S(O,wm
51Testing软件测试网tK1T-d-dS
======================================================================================
(x\,L2n Y*o0我们可以总结一下可能引起全表扫描的操作:
&w7|9o;e,\ @tMq0------------------------------------------
!ltnF9f4E m&[-m"w2x8E01。在索引列上使用NOT或者“<>”;
@5AE'L0wm0
pE ~8jyX ~"TK+s8]02。对索引列使用函数或者计算;
o!otO2r4O,Ae051Testing软件测试网]:nC\iC `(]"W
3。NOT IN操作;51Testing软件测试网LY]v-U&A?$U

D s.d6|sP,V04。通配符位于查询字符串的第一个字符;51Testing软件测试网vGXC#c\&_R

MFED0Pk`9f(?05。IS NULL或者IS NOT NULL;51Testing软件测试网'p#}Y}7dJ^
51Testing软件测试网iCK c!`*^ xf0jR
6。多列索引,但它的第一个列并没有被Where子句引用;51Testing软件测试网\h(mn;u.d/?

BP&QV:@m@w0

C%}+t\G)p/W0

TAG:

 

评分:0

我来说两句

日历

« 2024-04-19  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 109474
  • 日志数: 89
  • 图片数: 1
  • 文件数: 15
  • 建立时间: 2013-03-01
  • 更新时间: 2018-08-23

RSS订阅

Open Toolbar