對應的第二章」給查詢結果排序「1.按指定列排序
select ename,comm from emp order
by comm asc;
select ename,comm from emp orderby2
asc;
--按照第二列排序
2.translate函式語法:
translate(string,from_str,to_str)
功能:1. from_str和to_str以字元為單位,對應字元一一替換。
2. translate是replace所提供的功能的乙個超集
3. 如果from_str比to_str長,那麼在from_str中而不在to_str中而外的字元將從string中被刪除,因為它們沒有相應的替換字元.
4. to_str不能為空.oracle把空字串認為是null,並且如果translate中的任何引數為null,那麼結果也是null
3.數字和字母混合字串的字母排序
此時可以使用到上述的 translate函式。
select
'7876 andy'
as aname,translate('7876 andy','- 0123456789','-') as ename from dual
4.空值排序的問題
oracle預設排序空值在後面,如果要把空值顯示在前面,如何實現?
首先想到的是 nal,實現如下:
select ename,comm,nvl(comm,-1) order_col from emp order
by3;
上述的sql的確可以實現這個功能。但是,必須關注排序列的資料型別。
其實,可以使用關鍵字
nulls first 和 nulls last
來控制排序時,空值在前還是在後。
select ename,comm from emp order
by2 nulls first;
5.排序的列有條件限制
條件:領導對工資在1000—2000之間的員工更感興趣,再按工資公升序排列。
select empno as 編碼,ename as 姓名,
case
when sal >=1000
and sal < 2000
then
1else
2end
as 級別,
sal as 工資
from emp where deptno = 30
order
by3,4;
結果如下:
編碼姓名
級別工資
7654
martin
11250
7521
ward
11250
7499
allen
11600
7900
james
2950
7698
blake
22850
也可以不顯示級別,把 case when 放到 order by 中
select empno as 編碼,ename as 姓名,
sal as 工資
from emp where deptno = 30
order
bycase
when sal >=1000
and sal < 2000
then
1else
2end, 3;
結果如下:
編碼姓名
工資7654
martin
1250
7521
ward
1250
7499
allen
1600
7900
james
9507698
blake
2850
Oracle查詢優化改寫 1
對應的第一章 單錶查詢 1.將空值轉換為實際值 和nvl函式相比,coalesce函式更好用,後者支援多個引數。coalesce 語法 coalesce exp1,exp2,exp3,功能 9i新增,依次查詢各引數,遇到非null則返回,各引數或表示式資料型別必須一致,如果都為null則返回null...
Oracle 查詢優化器 改寫查詢語句
start 當我們執行一條查詢語句的時候,我們只告訴 oracle 我們想要哪些資料,至於資料在 怎麼找,那是查詢優化器的事情,優化器需要改寫查詢語句,決定訪問路徑 如 全表掃瞄,快速全索引掃瞄,索引掃瞄 決定表聯接順序等。至於選擇哪種方式,優化器需要根據資料字典做出判斷。那優化器如何改寫查詢語句呢...
Oracle查詢優化改寫 抄書學習02
3.10 聚集和內連線 員工獎金根據type計算,type 1 的為10 type 2 的wei20 以此類推 先把獎金跟員工彙總,在於員工表關聯。select e.deptno sum e.sal as total sal sum e.sal eb2.rate as total bonus fro...