搜尋
首頁資料庫Oracle一起聊聊ORACLE中ORDER BY的多種排序

本篇文章為大家帶來了關於Oracle的相關知識,其中主要介紹了關於ORDER BY多種排序的相關問題,包括了按單一欄位排序、按多個欄位排序、按子字串排序等等,希望對大家有幫助。

一起聊聊ORACLE中ORDER BY的多種排序

推薦教學:《Oracle學習教學

1. 依單一欄位排序

#:ORDER BY ASC(預設)

降序:ORDER BY DESC

以指定的次序返回查詢結果實際提取資料或產生報表時,一般都要根據一定的順序查看,比如,想查看單位所僱員工的資料。

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY hiredate ASC;

給查詢結果排序這種語句很多人都會寫,但除了“ORDER BY hiredate ASC”這種寫法外,還可以寫成“ ORDER BY 3 ASC” ,意思是按第三列排序。

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY 3 ASC;

當取值不定時,用這種方法就很方便,需要注意的是,

用資料來取代列位置只能用於order by子句中,其他地方都不能用

2. 按多個欄位排序

如果按多列排序且有升有降怎麼辦?如:依部門編號升序,並依薪資降序排列排序時有兩個關鍵字:ASC表示升序、DESC表示降序所以我們在 order by後面加兩列,並分別標明ASC、DESC。

SELECT empno, deptno, sal, ename, job FROM emp ORDER BY 2 ASC, 3 DESC;

下面以圖的形式進行介紹,如下圖所示,多列排序時,若前面的列有重複值(如deptno = 10有3行數據),後面的排序才有用。相當於是透過前面的列把資料分成了幾組,然後每組的資料再按後面的列進行排序。

 3. 按子字串排序

按子字串排序有一種速査法就是按顧客電話號碼尾號的順序記錄,這樣在尋找的時候就可以快速縮小査詢範圍,增強顧客的認可度。如果要按這種方法排序,該怎麼做呢?透過函數取出後面幾位所需的資訊即可。

SELECT last_name AS 名称,
       phone_number AS 号码,
       salary as 工资,
       substr(phone_number, -4) AS 尾号
  FROM hr.employees
 WHERE rownum <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/6df7db13e602f27c62ef940d1b15201d-3.png?x-oss-process=image/resize,p_40" class="lazy" alt=""    style="max-width:90%"  style="max-width:90%"></p><p> 由此可見:只要能將資料査詢出來,就能依照對應的資訊排序。 </p><h2 id="TRANSLATE">4. TRANSLATE</h2><blockquote><p>語法格式:TRANSLATE(expr, from_string, to_string)</p></blockquote><p>範例如下:</p><pre class="brush:php;toolbar:false">SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '1234567' ) AS NEW_STR FROM DUAL;

#from_string與to_string以字元為單位,對應字元一一替換。

如果to_string為空,則傳回空值 

SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '' ) AS NEW_STR FROM DUAL;

如果to_string對應的位置沒有字符,刪除from_string中所列的字元將會被消掉。

SELECT TRANSLATE( 'ab 你好 bcadefg', '1abcdefg', '1' ) AS NEW_STR FROM DUAL;

 

#5. 依數字和字母混合字串中的字母排序

首先創建VIEW如下:

CREATE OR REPLACE VIEW V 
as 
SELECT empno || ' ' || ename AS data FROM emp;
select * from V;

 這個需求就難一點了,看到裡面的字母(也就是原來的列ename)嗎?要求按其中的字母(列 ename)排序。

那麼就要先取出其中的字母才行,我們可以用translate的替換功能,把數字與空格都替換為空:

SELECt data, translate (data, '- 0123456789', '-' )AS ename
  FROM v
 ORDER BY 2;

6. 處理排序空值

Oracle預設排序空值在後面,如果想把空值(如emp.comm)顯示在前面怎麼辦,用NVL(comm,-1)嗎?

SELECT ename, sal, comm, nvl(comm, - 1) order_col FROM emp ORDER BY 4;

 

##

也许很多人都是用的这种方法,但这种方法需要对列类型及其中保存的数据有所了解才行,而且保存的数据如果有变化,该语句就要重新维护。
其实可以用关键字 NULLS FIRST和 NULLS LAST。

空值在前

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS FIRST;

 空值在后

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS LAST;

 是不是要方便得多?

7. 根据条件取不同列中的值来排序

有时排序的要求会比较复杂,比如:领导对工资在1000到2000元之间的员工更感兴趣,于是要求工资在这个范围的员工要排在前面,以便优先査看。
对于这种需求,我们可以在查询中新生成一列,用多列排序的方法处理:

SELECT empno AS 编码,
       ename AS 姓名,
       CASE
         WHEN sal > 1000 AND sal <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/f6525214b6205d8e3e4c4cd75819a680-14.png?x-oss-process=image/resize,p_40" class="lazy" alt=""    style="max-width:90%"  style="max-width:90%"> </p><p> </p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/f6525214b6205d8e3e4c4cd75819a680-15.png?x-oss-process=image/resize,p_40" class="lazy" alt=""    style="max-width:90%"  style="max-width:90%"></p><p>可以看到,950与2850都排在了后面,也可以不显示级别,直接把 case when放在order by中</p><pre class="brush:php;toolbar:false">SELECT empno AS 编码, ename AS 姓名, sal AS工资
  FROM emp
 WHERE deptno = 30
 ORDER BY CASE
            WHEN sal >= 1000 AND sal <p> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/f6525214b6205d8e3e4c4cd75819a680-16.png?x-oss-process=image/resize,p_40" class="lazy" alt=""    style="max-width:90%"  style="max-width:90%"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/d778c41f53bfbf6813d884b027f6127c-17.png?x-oss-process=image/resize,p_40" class="lazy" alt=""    style="max-width:90%"  style="max-width:90%"></p><p>推荐教程:《<a href="https://www.php.cn/course/list/52.html" target="_blank">Oracle教程</a>》</p>

以上是一起聊聊ORACLE中ORDER BY的多種排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
Oracle備份和恢復:確保數據完整性和可用性Oracle備份和恢復:確保數據完整性和可用性Apr 10, 2025 am 09:40 AM

Oracle備份與恢復的核心目的是在數據丟失或損壞時,能夠快速恢復數據庫到一致的狀態。 1.備份階段:通過RMAN或其他工具,將數據庫文件複製到備份介質中。 2.恢復階段:當數據庫發生故障時,首先恢復備份數據,然後通過應用重做日誌文件,恢復到故障前的狀態。

Oracle Real應用程序群集(RAC):可伸縮性和高可用性Oracle Real應用程序群集(RAC):可伸縮性和高可用性Apr 09, 2025 am 12:16 AM

OracleRAC通過多節點共享數據庫存儲,實現了高可用性和可擴展性。其工作原理包括負載均衡、故障轉移和動態節點擴展,確保系統的高效運行和數據一致性。

Oracle雲基礎架構(OCI):在雲中部署和管理Oracle數據庫Oracle雲基礎架構(OCI):在雲中部署和管理Oracle數據庫Apr 08, 2025 am 12:09 AM

在OCI中部署和管理Oracle數據庫可以通過以下步驟實現:1.創建數據庫實例,使用OCIPythonSDK設置配置參數;2.配置網絡和存儲資源;3.連接到數據庫並執行SQL查詢;4.進行數據庫備份和恢復操作;5.優化數據庫性能,通過調整資源配置、網絡優化和備份策略。這是一個高度自動化的過程,用戶只需提供必要的配置參數,OCI會處理剩餘的工作。

甲骨文面試問題:破解您的數據庫管理員面試甲骨文面試問題:破解您的數據庫管理員面試Apr 07, 2025 am 12:17 AM

OracleDBA面試準備需要掌握數據庫架構、性能調優和備份恢復等核心知識。 1.了解Oracle數據庫架構,包括實例和數據庫的關係。 2.掌握性能調優方法,如SQL調優和索引優化。 3.熟悉備份與恢復策略,使用RMAN和數據泵工具。通過這些準備,你能在面試中展現專業技能,成功通過面試。

高級Oracle SQL調整:優化專家的查詢性能高級Oracle SQL調整:優化專家的查詢性能Apr 06, 2025 am 12:06 AM

OracleSQL调优可以通过以下步骤提升查询性能:1.创建适当的索引,如为department列创建索引;2.分析执行计划,使用EXPLAINPLAN命令查看并优化;3.进行SQL重写,如使用子查询避免不必要的连接操作。通过这些方法,可以显著提升Oracle数据库的查询效率。

Oracle數據庫安全性:硬化和保護您的數據Oracle數據庫安全性:硬化和保護您的數據Apr 05, 2025 am 12:17 AM

Oracle數據庫的安全性可以通過多種措施實現,包括認證、授權、加密和審計。 1)使用密碼文件進行用戶認證和授權;2)通過透明數據加密(TDE)保護敏感數據;3)使用虛擬專用數據庫(VPD)實現細粒度的訪問控制;這些方法確保了數據的機密性、完整性和可用性。

Oracle Goldengate:實時數據複製與集成Oracle Goldengate:實時數據複製與集成Apr 04, 2025 am 12:12 AM

OracleGoldenGate通過捕獲源數據庫的事務日誌並將變更應用到目標數據庫,實現實時數據複製和集成。 1)捕獲變更:讀取源數據庫的事務日誌,轉換為Trail文件。 2)傳輸變更:通過網絡傳輸到目標系統,使用數據泵進程管理傳輸。 3)應用變更:在目標系統上,複製進程讀取Trail文件並應用變更,確保數據一致性。

Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包Apr 03, 2025 am 12:03 AM

OraclePL/SQL中的過程、函數和包分別用於執行操作、返回值和組織代碼。 1.過程用於執行操作,如輸出問候語。 2.函數用於計算並返回值,如計算兩個數之和。 3.包用於組織相關元素,提高代碼的模塊化和可維護性,如管理庫存的包。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具