在oracle中,可以使用「SELECT」語句和「ORDER BY」子句來進行查詢排序,可按升序或降序對一列或多列的查詢結果集進行排序,語法「SELECT 欄位名 FROM 資料表名 ORDER BY 欄位名 [ASC|DESC]」。
本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。
在oracle中,可以使用「SELECT」語句和「ORDER BY」子句來進行查詢排序。
在Oracle中,表中是以非指定順序儲存行資料記錄的,它不管行插入資料庫的順序如何。要按列以升序或降序查詢行記錄,必須明確指示Oracle資料庫要如何去排序。
例如,您可能希望按名稱的字母順序列出所有客戶,或者按照從最低到最高信用限額的順序顯示所有客戶。
要對查詢的資料進行排序,請按如下方式將ORDER BY
子句新增到SELECT語句中。
ORDER BY
子句可以按升序或降序對一列或多列的結果集進行排序。
語法:
SELECT 欄位名, FROM table_name ORDER BY 欄位名 [ASC | DESC] [NULLS FIRST | NULLS LAST]
要按列排序結果集,可以在ORDER BY子句之後列出該列。
按照列名是一個排序順序,可以是:
ASC
表示按升序排序
DESC
表示按降序排序
預設情況下,無論是否指定ASC
,ORDER BY
子句都按升序對行進行排序。如果要按降序對行進行排序,請明確使用DESC
。
NULLS FIRST
在非NULL
值之前放置NULL
值,NULLS LAST
在非NULL
值之後放置NULL
值。
ORDER BY
子句可以按多列對資料進行排序,每列可能有不同的排序順序。
請注意,ORDER BY
子句總是SELECT
語句中的最後一個子句。
下面將使用範例資料庫中的customers
表進行演示。
以下語句從客戶(customers
)表中檢索客戶的:name
, address
和 credit limit
:
SELECT name, address, credit_limit FROM customers;
執行上面查詢語句,得到以下結果 -
正如截圖中所看到的,行記錄的順序是未指定的。
1、按列排序行範例
要按照字母順序按升序排列客戶名稱,請使用以下語句:
SELECT name,address,credit_limit FROM customers ORDER BY name ASC;
執行上面範例程式碼,得到以下結果 -
ASC
指示Oracle按升序對行進行排序。但是ASC
是可選的,如果省略,則在預設情況下,ORDER BY
子句按指定的列按升序對行進行排序。
因此,下面的表示式:
ORDER BY name ASC
等效於 -
ORDER BY name
要按字母順序降序排列客戶名稱,請在ORDER BY
子句中的列名之後顯式使用DESC
,如下所示:
SELECT name, address, credit_limit FROM customers ORDER BY name DESC;
執行上面查詢語句,得到以下結果 -
2、按多個列排序行範例
要對多列進行排序,可以用逗號分隔ORDER BY
子句中的每列。
請參閱範例資料庫中的以下聯絡人(contacts
)表。
例如,要按first_name
進行按升序排序,並按降序對last_name
列進行排序,請使用以下語句:
SELECT first_name, last_name FROM contacts ORDER BY first_name, last_name DESC;
執行上面範例程式碼,可以看到如下結果 -
從上面截圖中可以看到,contact_id
為91
和311
這兩條記錄的first_name
的值相同,last_name
的值是以降序來排列的。
在這個例子中,Oracle首先按first_name
升序對行進行排序,以建立初始結果集。 然後Oracle按降序對last_name
排序初始結果集。
看到類似下面的結果如下:
在上面的這個結果中:
first_name
升序排序。last_name
降序排列,如Daniel Glass
和Daniel Costner
,Dianne Sen
和Dianne Derek
,Doretha Tyler
和Dorotha Wong
。3、按列位置排序行範例
不需要指定用於排序資料的列名稱。如果您願意,可以使用ORDER BY
子句中列的位置。
請參考下語句 -
SELECT name, credit_limit,address FROM customers ORDER BY 2 DESC, 1;
在這個例子中,name
列的位置是1
,credit_limit
列的位置是2
。相當於以下查詢語句 -
SELECT name, credit_limit,address FROM customers ORDER BY credit_limit DESC, name;
在ORDER BY
子句中,使用這些列位置來指示Oracle對行進行排序。
4、用NULL值排序行的範例
請參閱範例資料庫中的以下地區(locations
)表:
以下語句按城市(city
)和州(state
)檢索位置並對其進行排序:
SELECT country_id, city, state FROM locations ORDER BY state DESC;
執行上面查詢語句,得到以下結果 -
state
列有NULL
值,這意味著state
資料與某些城市(例如:Beijing
, Hiroshima
和 London
)無關。
當使用非NULL
值對混合NULL
進行排序時,Oracle允許指定哪個應該首先出現。
例如,以下語句按升序對state
列進行排序,並首先將NULL
值放置在前面。
SELECT country_id, city, state FROM locations ORDER BY state ASC NULLS FIRST;
要放置NULL
值在後面,可以使用NULLS LAST
,如下面的語句所示:
SELECT country_id, city, state FROM locations ORDER BY state ASC NULLS LAST;
執行上面範例查詢語句,得到以下結果:
5、按函數或表示式排序資料
ORDER BY
子句可在一列上應用一個函數,例如字串函數,數學函數等,並按函數的結果對資料進行排序。
例如,以下語句使用ORDER BY
子句中的UPPER()
函數來區分客戶名稱的大小寫:
SELECT customer_id, name FROM customers ORDER BY UPPER( name );
執行上面查詢語句,得到以下結果 -
以上就是oracle怎麼將查詢結果進行排序的詳細內容,更多請關注TW511.COM其它相關文章!