Oracle查詢優化 排序

2021-07-25 01:42:01 字數 2073 閱讀 5661

1

--普通排序

2select

*from emp order

by sal desc;3

--使用列序排序

4select

*from emp orderby6

desc;5

--組合排序

6select

*from emp order

by deptno asc,1

desc;7

--translate函式,引數分別用a、b、c表示

8select ename,translate(ename,'

le','

el') from emp;--

當c=b時,相當於單字元一一對應替換同位置替換,即l-->e,e-->l,範圍是整個a

9select ename,translate(ename,'

le','

ada') from emp;--

當c>b時,多餘字元無效,等長部分替換效果同第8行

10select ename,translate(ename,'

le','

a') from emp;--

當c11

select ename,translate(ename,'

rner

','abcd

') from emp;--

替換位置為從左至右,因此第二個r對應的d不能發揮作用,因為到此處的判斷時,a中的r均已被替換為a了

12select

*from (select ename,translate(ename,'

le','') a from emp)where a is

null;--

如果條件為a='',則無結果集

13select ename,translate(ename,'

le',null) from emp;--

當c為null或''時,返回值為null而不是''

14--

translate 可以用來刪除一些無用資訊,比如名字中有數字一般是不會發生的,如果有,可以使用以下語句剔除

15select translate(ename,'

-1234567890

','-

') from emp;--

參考第三條基本用法,此語句作用是去除數字

16--

處理空值排序nulls first/nulls last

17select

*from emp order

bycomm;

18select

*from emp order

bycomm nulls first;

19select

*from emp order

by comm nulls last;--

可見系統預設是nulls last

20--

根據條件排序case when

21select empno as 編號,ename as

姓名,22

case

when sal >=

1000

and sal<=

2000

then123

else

2end

as級別 ,

24 sal as

工資 25

from

emp

26where deptno=

3027

order

by3,4;28

--case when語句只涉及條件判斷,可以放在order by子句中

29select empno as 編號,ename as

姓名,30 sal as

工資 31

from

emp

32where deptno=

3033

order

bycase

when sal >=

1000

and sal<=

2000

then134

else

2end,3;

oracle查詢優化

1 in 操作符 用 in 寫出來的 sql的優點是比較容易寫及清晰易懂,這比較適合現代軟體開發的風格。但是用 in 的 sql 效能總是比較低的,從 oracle 執行的步驟來分析用 in 的 sql 與不用 in 的 sql有以下區別 oracle 試圖將其轉換成多個表的連線,如果轉換不成功則先...

oracle查詢優化

oracle的執行順序where子句中的條件是總是優先於其他條件的,並且越靠右越優先,包括group by order by等子句。根據執行順序我們可以總結出許多可以優化查詢的規律 1 將能最快篩選出最少條目的條件放在where條件最右側 2 not in 和 not exist的區別 not ex...

ORACLE多表查詢優化

oracle有個高速緩衝的概念,這個高速緩衝就是存放執行過的sql語句,那oracle在執行sql語句的時候要做很多任務作,例如解析sql語句,估算索引利用率,繫結變數,讀取資料塊等等這些操作。假設高速緩衝裡已經儲存了執行過的sql語句,那就直接匹配執行了,少了步驟,自然就快了,但是經過測試會發現高...