oracle怎么將查詢結果進行排序

oracle中,可以使用“SELECT”語句和“ORDER BY”子句來進行查詢排序,可按升序或降序對一列或多列的查詢結果集進行排序,語法“SELECT 字段名 FROM 數據表名 ORDER BY 字段名 [ASC|DESC]”。

oracle怎么將查詢結果進行排序

本教程操作環境: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語句中的最后一個子句。

Oracle ORDER BY子句的例子

下面將使用示例數據庫中的customers表進行演示。

oracle怎么將查詢結果進行排序

以下語句從客戶(customers)表中檢索客戶的:name, address 和 credit limit :

SELECT?name,?address,?credit_limit?FROM?customers;

執行上面查詢語句,得到以下結果 –

oracle怎么將查詢結果進行排序

正如截圖中所看到的,行記錄的順序是未指定的。

1、按列排序行示例

要按照字母順序按升序排列客戶名稱,請使用以下語句:

SELECT?name,address,credit_limit FROM?customers ORDER?BY?name?ASC;

執行上面示例代碼,得到以下結果 –

oracle怎么將查詢結果進行排序

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;

執行上面查詢語句,得到以下結果 –

oracle怎么將查詢結果進行排序

2、按多個列排序行示例

要對多列進行排序,可以用逗號分隔ORDER BY子句中的每列。

請參閱示例數據庫中的以下聯系人(contacts)表。

例如,要按first_name進行按升序排序,并按降序對last_name列進行排序,請使用以下語句:

SELECT?first_name,?last_name FROM?contacts ORDER?BY?first_name,?last_name?DESC;

執行上面示例代碼,可以看到如下結果 –

oracle怎么將查詢結果進行排序

從上面截圖中可以看到,contact_id為91和311這兩條記錄的first_name的值相同,last_name的值是以降序來排列的。

在這個例子中,Oracle首先按first_name升序對行進行排序,以創建初始結果集。 然后Oracle按降序對last_name排序初始結果集。

看到類似下面的結果如下:

oracle怎么將查詢結果進行排序

在上面的這個結果中:

  • 首先,按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)表:

oracle怎么將查詢結果進行排序

以下語句按城市(city)和州(state)檢索位置并對其進行排序:

SELECT?country_id,?city,?state FROM?locations? ORDER?BY?state?DESC;

執行上面查詢語句,得到以下結果 –

oracle怎么將查詢結果進行排序

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;

執行上面示例查詢語句,得到以下結果:

oracle怎么將查詢結果進行排序

5、按函數或表達式排序數據

ORDER BY子句可在一列上應用一個函數,例如字符串函數,數學函數等,并按函數的結果對數據進行排序。

例如,以下語句使用ORDER BY子句中的UPPER()函數來區分客戶名稱的大小寫:

SELECT?customer_id,?name FROM?customers ORDER?BY?UPPER(?name?);

執行上面查詢語句,得到以下結果 –

oracle怎么將查詢結果進行排序

推薦教程:《Oracle教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享