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語句,那就直接匹配執行了,少了步驟,自然就快了,但是經過測試會發現高...