Oracle高級(jí)查詢
系統(tǒng)
2044 0
?
使用Oracle特有的查詢語(yǔ)法, 可以達(dá)到事半功倍的效果
1. 樹(shù)查詢
create
?
table
?tree?(
????id?
number
(
10
)?
not
?
null
?
primary
?
key
,
????name?
varchar2
(
100
)?
not
?
null
,
????super?
number
(
10
)?
not
?
null
????????????????
//
?
0
?
is
?root
);
--
?從子到父
select
?
*
?
from
?tree?start?
with
?id?
=
???connect?
by
?id?
=
?prior?super?
--
?從父到子
select
?
*
?
from
?tree?start?
with
?id?
=
???connect?
by
?prior?id?
=
?suepr
--
?整棵樹(shù)
select
?
*
?
from
?tree?start?
with
?super?
=
?
0
?connect?
by
?prior?id?
=
?suepr
2. 分頁(yè)查詢
select
?
*
?
from
?(?
????
select
?my_table.
*
,?rownum??my_rownum?
from
?(?
????????
select
?name,?birthday?
from
?employee?
order
?
by
?birthday
????)?my_table?
where
?rownum?
<
?
120
?
)?
where
?my_rownum?
>=
?
100
;
3.?累加查詢, 以scott.emp為例
select
?empno,?ename,?sal,?
sum
(sal)?
over
(
order
?
by
?empno)?result?
from
?emp;
?
?????EMPNO?ENAME?????????????SAL?????RESULT
--
--------?----------?----------?----------
??????
7369
?SMITH?????????????
800
????????
800
??????
7499
?ALLEN????????????
1600
???????
2400
??????
7521
?WARD?????????????
1250
???????
3650
??????
7566
?JONES????????????
2975
???????
6625
??????
7654
?MARTIN???????????
1250
???????
7875
??????
7698
?BLAKE????????????
2850
??????
10725
??????
7782
?CLARK????????????
2450
??????
13175
??????
7788
?SCOTT????????????
3000
??????
16175
??????
7839
?KING?????????????
5000
??????
21175
??????
7844
?TURNER???????????
1500
??????
22675
??????
7876
?ADAMS????????????
1100
??????
23775
??????
7900
?JAMES?????????????
950
??????
24725
??????
7902
?FORD?????????????
3000
??????
27725
??????
7934
?MILLER???????????
1300
??????
29025
4. 高級(jí)group by
select
?decode(
grouping
(deptno),
1
,
'
all?deptno
'
,deptno)?deptno,
???????decode(
grouping
(job),
1
,
'
all?job
'
,job)?job,
???????
sum
(sal)?sal
from
?emp?
group
?
by
?ROLLUP(deptno,job);
DEPTNO???????????????????????????????????JOB??????????????SAL
--
--------------------------------------?---------?----------
10
???????????????????????????????????????CLERK???????????
1300
10
???????????????????????????????????????MANAGER?????????
2450
10
???????????????????????????????????????PRESIDENT???????
5000
10
???????????????????????????????????????
all
?job?????????
8750
20
???????????????????????????????????????CLERK???????????
1900
20
???????????????????????????????????????ANALYST?????????
6000
20
???????????????????????????????????????MANAGER?????????
2975
20
???????????????????????????????????????
all
?job????????
10875
30
???????????????????????????????????????CLERK????????????
950
30
???????????????????????????????????????MANAGER?????????
2850
30
???????????????????????????????????????SALESMAN????????
5600
30
???????????????????????????????????????
all
?job?????????
9400
all
?deptno???????????????????????????????
all
?job????????
29025
5. use hint
當(dāng)多表連接很慢時(shí),用ORDERED提示試試,也許會(huì)快很多
SELECT
?
/**/
/*
+?ORDERED?
*/
*
?
??
FROM
?a,?b,?c,?d?
?
WHERE
?
?
Oracle高級(jí)查詢
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元