You are on page 1of 12

Oracle SQL Query Tuning Hints WHERE Clause

Try to avoid operations on database objects referenced in the WHERE clause. Given Query SELECT ename, hiredate, sal FROM emp WHERE SUBSTR(ename,1,3) = 'SCO'; VARIABLE name VARCHAR2(2 ! e"e# name $% &SCOTT& SELECT ename, hiredate, sal FROM emp WHERE ename = NVL (:name, ename); SELECT ename, hiredate, sal FROM emp WHERE TRUNC (hire a!e) % TR'(C (S)S*ATE!+ SELECT ename, hiredate, sal FROM emp WHERE ename )) em*n+ % &SCOTT,,--&+ SELECT ename, hiredate, sal FROM emp WHERE .a/ & 3000 . / + SELECT ename, hiredate, sal FROM emp WHERE sal 3= 0;

Alterna

SELECT ename, hiredate, sal FROM emp WHERE ename LIKE 'SCO%'; VARIABLE name VARCHAR2(2 ! e"e# name $% &SCOTT&

SELECT ename, hiredate, sal FROM emp WHERE ename LIKE NVL (:name

SELECT ename, hiredate, sal FROM emp WHERE hiredate BET"EEN TRUN %N$ TRUNC (S#S$%TE) & '((

SELECT ename, hiredate, sal FROM emp WHERE ename = 'SCOTT %N$ em*n+ = ,,--;

SELECT ename, hiredate, sal FROM emp WHERE .a/ 1 2000;

SELECT ename, hiredate, sal FROM emp WHERE sal 4 0;

HAVING Clause

The HAVING clause filters selected ro s only after all ro s have been fetched. !sin" a WHERE clause h su$$in"# etc. HAVING clauses should only be used hen colu$ns ith su$$ary operations applied to clause. Given Query SELECT d0dname, AV1 (e0sal! FROM emp e, dept d WHERE e0deptn2 % d0deptn2 1RO'3 B) d0dname 5%VIN6 dname 4% &RESEAECH& A(* dname 4% &SALES&+

Alternati SELECT d0dname, AV1 (e0sal! FROM emp e, dept d "5ERE e0deptn2 % d0deptn2 A(* dname 4% &RESEAECH& A(* dname 4% &SALES& 1RO'3 B) d0dname+

Com ine! Su "ueries

%ini$i&e the nu$ber of table loo'ups (sub)uery bloc's* in )ueries# particularly if your state$ents includ

$ulticolu$n !./ATEs. Se#arate Su "ueries SELECT ename FROM emp WHERE sal % (SELECT MA5 (sal! FROM l2267p! A(* #2mm % (SELECT MA5 (#2mm! FROM l2267p!+

Com ine! Su "u

SELECT ename FROM emp WHERE (sal,#2mm! % (SELECT MA5 (sal MA5(#2mm FROM l2267p!+

E$ISTS% NOT IN% Ta le &oins


-onsider the alternatives E0I+T+# IN and table joins depends on your data. SELECT ename FROM emp E WHERE E7ISTS (SELECT FROM WHERE A(*

hen doin" $ultiple table joins. None of the

&5& dept deptn2 % E0deptn2 dname % &ACCO'(TI(1&!+

SELECT ename FROM emp E WHERE deptn2 IN (SELECT deptn2 FROM dept WHERE deptn2 % E0deptn2 A(* dname % &ACCO'(TI(1&!+ SELECT ename FROM dept *, emp E WHERE E0deptn2 % *0deptn2 A(* *0dname % &ACCO'(TI(1&+

'ISTINCT

Avoid joins that re)uire the /I+TIN-T )ualifier on the +E,E-T list in )ueries hich are used to de end of a one2to2$any relationship. The /I+TIN-T operator causes 3racle to fetch all ro s satisf and filter out duplicate values. E0I+T+ is a faster alternative# because the 3racle opti$i&er reali& satisfied once# there is no need to proceed further and the ne4t $atchin" ro can be fetched. Given Query SELECT $ISTINCT ' e*!n+, ' name FROM dept *, emp E WHERE *0deptn2 % E0deptn2+ Alternative

SELECT ' e*!n+, ' name FROM dept * WHERE E7ISTS (SELECT &5& FROM emp E WHERE E0deptn2 % *0d

ION ALL

-onsider hether a !NI3N A,, ill suffice in place of a !NI3N. The !NI3N clause forces all ro s !NI3N to be sorted and $er"ed and duplicates to be filtered before the first ro is returned. A

includin" duplicates and does not have to perfor$ any sort# $er"e or filter. If your tables are $ duplicate records*# or you don5t care if duplicates are returned# the !NI3N A,, is $uch $ore effi (NION SELECT a##t, 8alan#e FROM de8it WHERE trandate % &9:;*EC;</& UNION SELECT a##t, 8alan#e FROM #redit WHERE trandate % &9:;*EC;</&+

(NION A

SELECT a##t, 8alan#e FROM de8it WHERE trandate % &9:;*EC;</& UNION ALL SELECT a##t, 8alan#e FROM #redit WHERE trandate % &9:;*EC;</&+

'ECO'E

-onsider usin" /E-3/E to avoid havin" to scan the sa$e ro s repetitively or join the sa$e tabl not necessarily faster as it depends on your data and the co$ple4ity of the resultin" )uery. Also# chan"e your code hen ne values are allo ed in the field. SELECT CO'(T(=! FROM emp WHERE stat7s % &)& A(* ename LI>E &SMITH?&+ ;;;;;;;;;; SELECT CO'(T(=! FROM emp WHERE stat7s % &(& A(* ename LI>E &SMITH?&+ SELECT CO'(T($ECO$E(stat7s, &)&, &5&, ('LL!! )@#27nt, CO'(T($ECO$E(stat7s, &(&, &5&, ('LL!! (@#27nt FROM emp WHERE ename LI>E &SMITH?&+

Anti &oins
An anti2join is used to return ro s fro$ a table that that are present in another table. It $i"ht be used E%. to return only those ro s in /E.T that didn5t join to anythin" in E%.1 SELECT = FROM dept WHERE deptn2 NOT IN (SELECT deptn2 FROM EM3!+ SELECT FROM WHERE %N$ dept0= dept, emp dept0deptn2 % emp0deptn2 (A! em*'RO"I$ IS NULL;

SELECT = FROM dept WHERE (OT E7ISTS (SELECT NULL FROM emp WHERE emp0deptn2 % dept0deptn2!+

Outer &oins

Nor$ally# an outer join of table A to table 6 ould return every record in table A# and if it had a $ate in as ell. Every ro in table A ould be output# but so$e ro s of table 6 $i"ht not appear in the result s ebery ro in table A# as ell as every ro in table 6. The synta4 for a full outer join is ne in 3racle 7i# it is possible to produce full outer joins sets usin" conventional +8,. 7pdate emp set deptn2 % < Bhere deptn2 % : + #2mmit+ Conventional SQL SELECT empn2, ename, dept0deptn2, dname FROM emp, dept WHERE emp0deptn2(A! % dept0deptn2 '(IO( ALL SELECT empn2, ename, emp0deptn2, ('LL FROM emp, dept WHERE emp0deptn2 % dept0deptn2(A! A(* dept0deptn2 IS ('LL OR*ER B) :,2,9,C+ EM3(O ;;;;;;;;;; ,9D< ,C<< ,/2: ,/DD ,D/C ,D<,,-2 ,,-,-9< ,-CC ,-,D ,< ,< 2 ,<9C E(AME *E3T(O *(AME ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;;;;;; SMITH 2 RESEARCH ALLE( 9 SALES WAR* 9 SALES EO(ES 2 RESEARCH MARTI( 9 SALES BLA>E 9 SALES CLAR> < SCOTT 2 RESEARCH >I(1 < T'R(ER 9 SALES A*AMS 2 RESEARCH EAMES 9 SALES FOR* 2 RESEARCH MILLER < : ACCO'(TI(1 C O3ERATIO(S Ne) Synta* SELECT empn2, ename, (VL(dept0deptn2,emp0deptn2! FROM emp F'LL O'TER EOI( dept O( (emp0deptn2 % dept0deptn2! OR*ER B) :,2,9,C+

EM3(O ;;;;;;;;;; ,9D< ,C<< ,/2: ,/DD ,D/C ,D<,,-2 ,,-,-9< ,-CC ,-,D ,< ,< 2 ,<9C

E(AME *E3T(O *( ;;;;;;;;;; ;;;;;;;;;; ;; SMITH 2 RE ALLE( 9 SA WAR* 9 SA EO(ES 2 RE MARTI( 9 SA BLA>E 9 SA CLAR> < SCOTT 2 RE >I(1 < T'R(ER 9 SA A*AMS 2 RE EAMES 9 SA FOR* 2 RE MILLER < : AC C O3

VIEWS
The inline vie is a construct in 3racle +8, here you can place a )uery in the +8, 9R3%# clause# just

3:# so hy use the co$plicated select in the first place; Why not just create the vie ; Well# one "ood "ives you another database object to $aintain# and adds $ore co$ple4ity to your syste$. 6y placin" t you have all of the code needed to support the )uery in one place.

T+e ,o)er o- Inline Vie)s

Overvie)
The inline vie is a construct in 3racle +8, here you can place a )uery in the +8, 9R3%# clause# just

3:# so hy use the co$plicated select in the first place; Why not just create the vie ; Well# one "ood "ives you another database object to $aintain# and adds $ore co$ple4ity to your syste$. 6y placin" t you have all of the code needed to support the )uery in one place. If you have a )uery as the follo in" ... SELECT 8RO9 "5ERE %N$ a !a:/e i = :i : = (SELECT 9%7 (:) 8RO9 !a:/e "5ERE i = :i ) orth to chec' if an inline vie # instead of the sub)uery ill be faster.

... it can be

E*am#le . /Re#lace Su "uery -or 0A$1


Wit+ Su "uery
CREATE TABLE test (id I(T, heiFht I(T, a##@date *ATE!+ I(SERT I(TO test (id, heiFht, a##@date! SELECT MO*(ROW('M,: !, *BMS@RA(*OM0RA(*OM, S)S*ATE;: A*BMS@RA(*OM0VAL'E( ,: ! FROM all@28Ge#ts+ D9/, r2Bs #reated0 COMMIT+ CREATE I(*E5 test@id" 2n test (id, a##@date, heiFht!+ Inde" #reated0 A(AL)HE FOR FOR FOR TABLE test COM3'TE STATISTICS TABLE ALL I(*E5ES ALL I(*E5E* COL'M(S+

Ta8le analIJed0 a/!er .e..i+n .e! !ime ;.!a!i.!i<.=!r=e; a/!er .e..i+n .e! .>/;!ra<e=!r=e; V%RI%BLE :1 NU9BER e?e< ::1 := 10

%LTER SESSION SET TI9E$;ST%TISTICS=TRUE; %LTER SESSION SET S@L;TR%CE=TRUE; SELECT Br+m "5ERE %N$ ma?(heiAh!) !e.! i = ::1 a<<; a!e = (SELECT 9%7(a<<; a!e) 8RO9 !e.! "5ERE i = ::1);

MA5(HEI1HT! ;;;;;;;;;;; :C- D 9/9 Elapsed$ $ $ 0:2

E"e#7ti2n 3lan ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SELECT STATEME(T OptimiJer%CHOOSE (C2st%2 Card%: BItes%:,! : SORT (A11RE1ATE! 2 : I(*E5 (RA(1E SCA(! OF &TEST@I*5& ((O(;'(IK'E! (C2st%2 Card%: BItes%:,! 9 2 SORT (A11RE1ATE! C 9 FIRST ROW (C2st%2 Card%D BItes%D ! / C I(*E5 (RA(1E SCA( (MI(LMA5!! OF &TEST@I*5& ((O(;'(IK'E! (C2st%2 Car !C*r+B AeC1;+ra;1DE20'!r< AeC1;+ra;1DE20'+=! e?*/ain=.<+!!F!iAer .+r!=e?ee/a .G.=n+ #all #27nt ;;;;;;; ;;;;;; 3arse : E"e#7te : Fet#h 2 ;;;;;;; ;;;;;; t2tal C #p7 elapsed dis6 M7erI #7rrent ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 0 0 0 2 0 0 2 ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 0 C r2Bs ;;;;;;;;;; : ;;;;;;;;;; :

Wit+ Inline Vie)


V%RI%BLE :1 NU9BER e?e< ::1 := 10 SELECT heiAh! 8RO9 (SELECT 8RO9 "5ERE OR$ER B# "5ERE RO"NU9 = HEI1HT ;;;;;;;;;; :C- D 9/9 E"e#7ti2n 3lan ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SELECT STATEME(T OptimiJer%CHOOSE (C2st%2 Card%: BItes%:9! heiAh! !e.! i = ::1 i $ESC, a<<; a!e $ESC, heiAh! $ESC) 1;

: 2 9

: 2

CO'(T (STO3>E)! VIEW (C2st%2 Card%D BItes%,-! I(*E5 (RA(1E SCA( *ESCE(*I(1! OF &TEST@I*5& ((O(;'(IK'E! (C2st%2 Card%D

!C*r+B AeC1;+ra;1DE21'!r< AeC1;+ra;1DE21'+=! e?*/ain=.<+!!F!iAer .+r!=e?ee/a .G.=n+ #all #27nt ;;;;;;; ;;;;;; 3arse : E"e#7te : Fet#h 2 ;;;;;;; ;;;;;; t2tal C #p7 elapsed dis6 M7erI #7rrent ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 9 0 D 2 C: 0 0 0 0 2 ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 9 0 D 2 C9 r2Bs ;;;;;;;;;; : ;;;;;;;;;; :

E*am#le 2 /Re#lace Su "uery -or 0A$1


3ri"inal 8uery fro$ a trace session= SELECT sBit#h@time,rat@id FROM tariNN WHERE eNNdate % (SELECT MA5(eNNdate! FROM tariNN WHERE eNNdate .% TR'(C($8:! A(* Bee6daI % $82 A(* t@id % $89! A(* TO@CHAR(sBit#h@time,&HH2C$MI&! .% TO@CHAR($8:,&HH2C$MI&! A(* Bee6daI % $82 A(* t@id % $89 OR*ER B) TO@CHAR(sBit#h@time,&HH2C$MI&! *ESC

Wit+ Su "uery
alter sessi2n set timed@statisti#s%tr7e+ sele#t Oal7e Nr2m OPparameter Bhere name % &7ser@d7mp@dest&+ alter sessi2n set sMl@tra#e%tr7e+ V%RI%BLE :1 V%RC5%R2(1() e?e< ::1 := '0,'0H'1(((:13:30:31' V%RI%BLE :2 NU9BER e?e< ::2 := 2 V%RI%BLE :3 NU9BER e?e< ::3 := 31,

SELECT .Ii!<h;!ime, ra!;i 8RO9 !ariBB "5ERE eBB a!e = (SELECT 9%7(eBB a!e) 8RO9 !ariBB "5ERE eBB a!e 1= TRUNC(TO;$%TE(::1,'$$'99'####:552H:9I:SS')) %N$ IeeC aG = ::2 %N$ T;I$ = ::3) %N$ TO;C5%R(.Ii!<h;!ime,'552H:9I') 1= TO;C5%R(TO;$%TE(::1,'$$'99'####:552H:9I:SS'),'

%N$ IeeC aG = ::2 %N$ !;i = ::3 OR$ER B# TO;C5%R(.Ii!<h;!ime,'552H:9I') $ESC; SWITCH@TI RAT@I* ;;;;;;;;; ;;;;;;;;;; :;EA(;<9 :;EA(;<:

E"e#7ti2n 3lan ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SELECT STATEME(T OptimiJer%CHOOSE (C2st%C Card%: BItes%2:! : SORT (OR*ER B)! (C2st%C Card%: BItes%2:! 2 : FILTER 9 2 TABLE ACCESS (F'LL! OF &TARIFF& (C2st%2 Card%: BItes%2:! C 9 SORT (A11RE1ATE! / C FILTER D / I(*E5 (RA(1E SCA(! OF &3>@TARIFF& ('(IK'E! (C2st%2 Card%: BItes%: T:.R39= !C*r+B ?GJ'!r< ?GJ'+=! e?*/ain==.erF*I #all #27nt ;;;;;;; ;;;;;; 3arse : E"e#7te : Fet#h 2 ;;;;;;; ;;;;;; t2tal C .+r!=e?ee/a .G.=n+ r2Bs ;;;;;;;;;; C ;;;;;;;;;; C

#p7 elapsed dis6 M7erI #7rrent ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 0 0 0 0 : 0 9;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 : 0 9-

Misses in li8rarI #a#he d7rinF parse$ OptimiJer F2al$ CHOOSE

Wit+ Inline Vie)


V%RI%BLE :1 V%RC5%R2(1() e?e< ::1 := '0,'0H'200E:13:30:31' V%RI%BLE :2 NU9BER e?e< ::2 := 2 V%RI%BLE :3 NU9BER e?e< ::3 := 31,

SELECT .Ii!<h;!ime, ra!;i$ 8RO9 (SELECT .Ii!<h;!ime, ra!;i 8RO9 !ariBB "5ERE eBB a!e 1= TRUNC(TO;$%TE(::1,'$$'99'####:552H:9I:SS')) %N$ IeeC aG = ::2 %N$ !;i = ::3 OR$ER B# eBB a!e $ESC) "5ERE TO;C5%R(.Ii!<h;!ime,'552H:9I') 1= TO;C5%R(TO;$%TE(::1,'$$'99'####:552H:9I:SS'),'

SWITCH@TI RAT@I* ;;;;;;;;; ;;;;;;;;;; :;EA(;<9 :;EA(;<: E"e#7ti2n 3lan ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SELECT STATEME(T OptimiJer%CHOOSE (C2st%C Card%: BItes%22! : VIEW (C2st%C Card%: BItes%22! 2 : SORT (OR*ER B)! (C2st%C Card%: BItes%2:! 9 2 FILTER C 9 TABLE ACCESS (B) I(*E5 ROWI*! OF &TARIFF& (C2st%2 Card%: BItes%2:! / C I(*E5 (RA(1E SCA(! OF &3>@TARIFF& ('(IK'E! (C2st%2 Card%:! T:.R39= !C*r+B ?GJ'!r< ?GJ'+=! e?*/ain==.erF*I #all #27nt ;;;;;;; ;;;;;; 3arse : E"e#7te : Fet#h 2 ;;;;;;; ;;;;;; t2tal C .+r!=e?ee/a .G.=n+ r2Bs ;;;;;;;;;; C ;;;;;;;;;; C

#p7 elapsed dis6 M7erI #7rrent ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 0 0 0 0 0 :< C ;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 0 0 :< C

Misses in li8rarI #a#he d7rinF parse$ OptimiJer F2al$ CHOOSE

E*am#le 3 /cannot +ave 4oin )it+ CONNECT 561

Have you ever tried to join to a hierarchical )uery (a )uery usin" -3NNE-T 6> and .RI3R* only to "et t ORA; :C9,$ #ann2t haOe G2in Bith CO((ECT B)

3ne of the li$itations of hierarchical )ueries is that you cannot join to the$. Ho ever# there are often t the$ any ay. 9or instance# if the hierarchy table only has surro"ate 'eys# and you ould li'e to display ho you can use <Inline Vie s< to join tables to a hierarchical )uery. SELECT leOel, L3A*(& &,2=leOel;2!QQename ename, empn2, mFr, dept0deptn2, dept0dname FROM emp, dept WHERE emp0deptn2 % dept0deptn2 CO((ECT B) 3RIOr empn2 % mFr START WITH empn2 % ,-9<+ ORA; :C9,$ #ann2t haOe G2in Bith CO((ECT B) SELECT E0empleOel, S'BSTR(E0ename,:,:/! RE(AMER, E0empn2, dept0deptn2, dept0dname FROM dept, (SELECT /eKe/ em*/eKe/, LL%$(' ',2M/eKe/N2)))ename ename, em*n+, mAr, 8RO9 em* CONNECT B# LRIOR em*n+ = mAr ST%RT "IT5 em*n+ = ,-3() E

e*

WHERE E0deptn2 % dept0deptn2 L EM3LEVEL E(AME EM3(O *E3T(O *(AME ;;;;;;;;;; ;;;;;;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;;;;;; : >I(1 ,-9< : ACCO'(TI(1 2 CLAR> ,,-2 : ACCO'(TI(1 9 MILLER ,<9C : ACCO'(TI(1 2 EO(ES ,/DD 2 RESEARCH 9 SCOTT ,,-2 RESEARCH C A*AMS ,-,D 2 RESEARCH 9 FOR* ,< 2 2 RESEARCH C SMITH ,9D< 2 RESEARCH 2 BLA>E ,D<9 SALES 9 ALLE( ,C<< 9 SALES 9 WAR* ,/2: 9 SALES 9 MARTI( ,D/C 9 SALES 9 T'R(ER ,-CC 9 SALES 9 EAMES ,< 9 SALES

E*am#le 3 /ROWN(0 . ,ro lem1


A ro nu$ restriction startin" ith ? or's=

R3WN!% does not or' for ran"es that don5t start at ?. A R3WN!% restriction startin" ith ? or's= SELECT ROW('M,ename Nr2m emp WHERE ROW('M BETWEE( 1 an L ROW('M ;;;;;;;;;; : 2 9 E(AME ;;;;;;;;;; SMITH ALLE( WAR* ill not or'. 9or e4a$ple= 3 3

Ho ever# if you try to use a ran"e it

SELECT ROW('M,ename Nr2m emp WHERE ROW('M BETWEE( 2 an L n2 r2Bs sele#ted !sin" an Inline Vie to "et around this li$itation=

SELECT t:0rn, t:0ename FROM (SELECT RO"NU9 rn, ename 8RO9 em*! t: WHERE t:0rn BETWEE( 2 and 9 L The $ain tric' to this )uery is the <internal< select state$ent. This select state$ent in the fro$ clause#

table# then returns the values (alon" ith the psuedo2colu$n R3WN!%* to the <outside< )uery. The ou the results of the internal )uery. In order to access the internal )uery5s colu$ns fro$ the e4ternal )uer )uery an alias (<t?< hi"hli"hted belo *= This allo s you to refer to the colu$ns usin" the <t?< (hi"hli"ht psuedo2colu$n and therefore a reserved ord# you need to alias that colu$n in the internal )uery in or )uery=

E*am#le 7 /ROWN(0 an! OR'ER 56 ,ro lem% TO,8N Queries1


The follo in" )uery for$ is al$ost ron"= FM "RON63 MF

sele#t = Nr2m emp Bhere ROW('M .% / 2rder 8I sal des#+ EM3(O ;;;;;;;;;; ,/DD ,C<< ,/2: ,D/C ,9D< E(AME ;;;;;;;;;; EO(ES ALLE( WAR* MARTI( SMITH

EOB M1R HIRE*ATE SAL COMM *E3T(O ;;;;;;;;; ;;;;;;;;;; ;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; MA(A1ER ,-9< 2;A3R;-: 2<,/ 2 SALESMA( ,D<- 2 ;FEB;-: :D 9 9 SALESMA( ,D<- 22;FEB;-: :2/ / 9 SALESMA( ,D<- 2-;SE3;-: :2/ :C 9 CLER> ,< 2 :,;*EC;2

The users intention as $ost li'ely to "et the the top2five paid people 2 a top2N )uery. What the ill "e five e happen to hit*# sorted by salary. If you use an inline vie ith the 3R/ER 6> inside the inline vi sele#t = Nr2m (.e/e<! M Br+m em* +r er :G .a/ EM3(O ;;;;;;;;;; ,-9< ,,-,< 2 ,/DD ,D<E(AME ;;;;;;;;;; >I(1 SCOTT FOR* EO(ES BLA>E e.<) Bhere r2Bn7m .% /+

EOB M1R HIRE*ATE SAL COMM *E3T(O ;;;;;;;;; ;;;;;;;;;; ;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; 3RESI*E(T :,;(OV;-: / : A(AL)ST ,/DD <;*EC;-2 9 2 A(AL)ST ,/DD 9;*EC;-: 9 2 MA(A1ER ,-9< 2;A3R;-: 2<,/ 2 MA(A1ER ,-9< :;MA);-: 2-/ 9

E*am#le 9 /,agination )it+ ROWN(01


.a"ination

ith R3WN!% can be used to "et ro s N thru % of a result set. The "eneral for$ of this is a

SELECT M 8RO9 (SELECT a'M, RO"NU9 rn 8RO9 (en!er G+=r >=erG here) a "5ERE RO"NU9 1= :9%7;RO") "5ERE rn 4= :9IN;RO"; SELECT M 8RO9 (SELECT a'M, RO"NU9 rn 8RO9 (SELECT M 8RO9 em*) a "5ERE RO"NU9 1= D) "5ERE rn 4= 2;

EM3(O E(AME EOB M1R HIRE*ATE SAL COMM *E3T(O ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;; ;;;;;;;;;; ;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; ;

,C<< ,/2: ,/DD ,D/C ,D<-

ALLE( WAR* EO(ES MARTI( BLA>E

SALESMA( SALESMA( MA(A1ER SALESMA( MA(A1ER

,D<- 2 ;FEB;-: ,D<- 22;FEB;-: ,-9< 2;A3R;-: ,D<- 2-;SE3;-: ,-9< :;MA);-:

:D :2/ 2<,/ :2/ 2-/

9 / :C

9 9 2 9 9

You might also like