Oracle Order By用法詳解

Oracle?ORDER?BY子句基本用法

在Oracle中,表中是以非指定順序存儲行數(shù)據(jù)記錄的,它不管行插入數(shù)據(jù)庫的順序如何。要按列以升序或降序查詢行記錄,必須明確指示Oracle數(shù)據(jù)庫要如何去排序。

例如,您可能希望按名稱的字母順序列出所有客戶,或者按照從最低到最高信用限額的順序顯示所有客戶。

要對數(shù)據(jù)進(jìn)行排序,我們可以將ORDER?BY子句添加到SELECT語句中,參考以下語法:

SELECTcolumn_1,? ? column_2,? ? column_3,? ? ...FROMtable_nameORDERBYcolumn_1 [ASC|DESC] [NULLSFIRST|NULLSLAST],? ? column_1 [ASC|DESC] [NULLSFIRST|NULLSLAST],

要按列排序結(jié)果集,可以在ORDER BY子句之后列出該列。

按照列名是一個(gè)排序順序,可以是:

ASC表示按升序排序

DESC表示按降序排序

默認(rèn)情況下,無論是否指定ASC,ORDER?BY子句都按升序?qū)π羞M(jìn)行排序。如果要按降序?qū)π羞M(jìn)行排序,請明確使用DESC。

NULLS?FIRST在非NULL值之前放置NULL值,NULLS?LAST在非NULL值之后放置NULL值。

ORDER?BY子句可以按多列對數(shù)據(jù)進(jìn)行排序,每列可能有不同的排序順序。

請注意,ORDER?BY子句總是SELECT語句中的最后一個(gè)子句。

Oracle?ORDER?BY用法示例:

下面將使用示例數(shù)據(jù)庫中的customers表進(jìn)行演示。

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

SELECTname, address, credit_limitFROMcustomers;

執(zhí)行上面查詢語句,得到以下結(jié)果:

1.?按列排序行示例

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

SELECTname,address,credit_limitFROMcustomersORDERBYnameASC;

執(zhí)行上面示例代碼,得到以下結(jié)果:

ASC指示Oracle按升序?qū)π羞M(jìn)行排序。但是ASC是可選的,如果省略,則在默認(rèn)情況下,ORDER?BY子句按指定的列按升序?qū)π羞M(jìn)行排序。

因此,下面的表達(dá)式:

ORDER BY name ASC

等效于

ORDER BY name

要按字母順序降序排列客戶名稱,請?jiān)贠RDER?BY子句中的列名之后顯式使用DESC,如下所示:

SELECTname, address, credit_limitFROMcustomersORDERBYnameDESC;

執(zhí)行上面查詢語句,得到以下結(jié)果:

2.?按多個(gè)列排序行示例

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

請參閱示例數(shù)據(jù)庫中的以下聯(lián)系人(contacts)表。

例如,要按first_name進(jìn)行按升序排序,并按降序?qū)ast_name列進(jìn)行排序,請使用以下語句:

SELECTfirst_name, last_nameFROMcontactsORDERBYfirst_name, last_nameDESC;

執(zhí)行上面示例代碼,可以看到如下結(jié)果:

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

在這個(gè)例子中,Oracle首先按first_name升序?qū)π羞M(jìn)行排序,以創(chuàng)建初始結(jié)果集。?然后Oracle按降序?qū)ast_name排序初始結(jié)果集。

看到類似下面的結(jié)果如下:

在上面的這個(gè)結(jié)果中:

首先,按first_name升序排序。

其次,如果兩個(gè)名字相同,按last_name降序排列,如Daniel Glass和Daniel Costner,Dianne Sen和Dianne Derek,Doretha Tyler和Dorotha Wong。

3.?按列位置排序行示例

不需要指定用于排序數(shù)據(jù)的列名稱。如果您愿意,可以使用ORDER?BY子句中列的位置。

請參考下語句:

SELECTname, credit_limit,addressFROMcustomersORDERBY2DESC,1;

在這個(gè)例子中,name列的位置是1,credit_limit列的位置是2。相當(dāng)于以下查詢語句:

SELECTname, credit_limit,addressFROMcustomersORDERBYcredit_limitDESC,name;

SQL

在ORDER BY子句中,使用這些列位置來指示Oracle對行進(jìn)行排序。

4.用NULL值排序行的示例

請參閱示例數(shù)據(jù)庫中的以下地區(qū)(locations)表:

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

SELECTcountry_id, city, stateFROMlocationsORDERBYstateDESC;

SQL

執(zhí)行上面查詢語句,得到以下結(jié)果:

state列有NULL值,這意味著state數(shù)據(jù)與某些城市(例如:Beijing,?Hiroshima?和?London)無關(guān)。

當(dāng)使用非NULL值對混合NULL進(jìn)行排序時(shí),Oracle允許指定哪個(gè)應(yīng)該首先出現(xiàn)。

例如,以下語句按升序?qū)tate列進(jìn)行排序,并首先將NULL值放置在前面。

SELECTcountry_id, city, stateFROMlocationsORDERBYstateASCNULLSFIRST;

SQL

要放置NULL值在后面,可以使用NULLS LAST,如下面的語句所示:

SELECTcountry_id, city, stateFROMlocationsORDERBYstateASCNULLSLAST;

SQL

執(zhí)行上面示例查詢語句,得到以下結(jié)果:

5.?按函數(shù)或表達(dá)式排序數(shù)據(jù)

ORDER?BY子句可在一列上應(yīng)用一個(gè)函數(shù),例如字符串函數(shù),數(shù)學(xué)函數(shù)等,并按函數(shù)的結(jié)果對數(shù)據(jù)進(jìn)行排序。

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

SELECTcustomer_id,nameFROMcustomersORDERBYUPPER(name);

SQL

執(zhí)行上面查詢語句,得到以下結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,838評論 5 116
  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,053評論 0 19
  • 表 存儲在表中的數(shù)據(jù)是同一種類型的數(shù)據(jù)或清單。 數(shù)據(jù)庫中的表有為一個(gè)名字來標(biāo)識自己。 表具有一些特性,這些特性定義...
    蛐蛐囍閱讀 1,328評論 0 7
  • SQL語言基礎(chǔ) 本章,我們將會重點(diǎn)探討SQL語言基礎(chǔ),學(xué)習(xí)用SQL進(jìn)行數(shù)據(jù)庫的基本數(shù)據(jù)查詢操作。另外請注意本章的S...
    厲鉚兄閱讀 5,346評論 2 46
  • 每天想你 就像每天都要吃米飯 要學(xué)的事情好多 第一件就是 不想你 我懷著一次次的悸動(dòng) 不再見你 曾經(jīng)的現(xiàn)在的 曾經(jīng)...
    珊瑚的魚閱讀 205評論 0 2