SQL 之 排列數據

關鍵字:ORDER, ASC, DESC


1.  ORDER BY子句

SELECT columnlist

FROM tablelist

ORDER BY columnlist

 

強調:ORDER BY子句總在FROM子句後面, FROM子句總在關鍵字SELECT後面。

columnlist可以是任意多的列,包括單個的列,或者複雜的表達式。SELECT後面和ORDER BY後面的列可以完全不同。

 

示例:表Customers

CustomerID      FirstName         LastName

------------------------------------------------------------

1                  William              Smith

2                  Janet                Smith

3                  Natalie              Lopez

4                  Brenda              Harper

 

a. 升序排序:

SELECT

FirstName,LastName

FROM Customers

ORDER BY LastName

 

結果

FirstName        LastName

------------------------------------------

Brenda              Harper

Natalie              Lopez

William              Smith

Janet                Smith

有兩個人的LastName相同,所以這種情況下結果誰先誰後是無法預料的。

 

ASC關鍵字:ascending,表示升序,其實默認升序所以多數沒必要

SELECT

FirstName,LastName

FROM Customers

ORDER BY LastName ASC

 

b. 降序排序

 使用關鍵字DESCdescending

SELECT

FirstName,LastName

FROM Customers

ORDER BY LastName DESC

結果

FirstName        LastName

------------------------------------------

Janet                Smith

William              Smith

Natalie              Lopez

Brenda              Harper

 

c. 根據多列來排序

如示例,有兩個人的LastName都是Smith,可以添加一個列來排序:

SELECT

FirstName,LastName

FROM Customers

ORDER BY LastName, FirstName

 

ORDER BY子句的列名先後順序很重要:先按照LastName排序,遇到LastName相同的,再按照FirstName排序,以此類推。

結果:

FirstName        LastName

------------------------------------------

Brenda              Harper

Natalie              Lopez

Janet                Smith

William              Smith

 

d. 根據計算字段來排序

SELECT

LastName +, + FirstName ASName

FROM Customers

ORDER BY Name

 

結果:

 Name        

--------------------------

Harper, Brenda              

Lopez, Natalie 

Smith,Janet                

Smith, William        

 

連接後 Smith,Janet 的字典序是比Smith, William 要小的。

 

計算字段也可以放在ORDER BY子句中:

SELECT

FirstName,LastName

FROM Customers

ORDER BY LastName + FirstName

結果:

FirstName        LastName      

-------------------------------------------

Harper           Brenda              

Lopez            Natalie 

Smith            Janet                

Smith            William 

 

強調:這些升降序排序都沒有考慮大小寫,也就是dog可能排在DOG前面,也可能在後面。

e. 排列序列的更多內容

數據庫允許用戶指定或定製排序規則設置,設置一般遵循3個原則:

(1)升序排序時,NULL值的數據最先出現。NULL ->數字 -> 字符;降序時,字符-> 數字->NULL

(2)字符數據:大小寫不區分

(3)字符數據:字典序

        與SQL ServerMySQL不同,OracleNULL值在最後。可以添加關鍵字NULLS FIRSTNULL在升序中最先出現。用在降序排序中NULL值和通常一樣,還是在最後。此外,Oracle不同的是會區分大小寫。升序中,大寫先於小寫。

 

示例:表Customers

TableID      CharacterData         NumericData

------------------------------------------------------------

1                  23                   23

2                  5                     5

3                  Dog                  NULL

4                  NULL                 -6

CharacterData定義爲字符列(比如VARCHAR型,可變長度數據類型)NumericData定義爲數值列(如INT型,整數),沒有數據:NULL

 

SELECT

NumericData

FROM tablename

            ORDER BYNumericData

結果:

NumericData

-------------------

NULL

-6

5

23

 

如果用戶希望把代表沒有數據的NULL表示爲0,那麼

SELECT

ISNULL (NumericData, 0)

FROM tablename

ORDER BY ISNULL (NumericData, 0)

注意如果沒有用別名,在ORDER BY子句也要用同樣的ISNULL轉換類型

或者

SELECT

ISNULL (NumericData, 0) ASNumeric

FROM tablename

            ORDER BYISNULL Numeric

結果:

NumericData

-------------------

-6

0

5

23

 

如果使用CharacterData排序:

SELECT

CharacterData

FROM tablename

ORDER BY CharacterData DESC

 

結果

 

NumericData

-------------------

Dog

5

23

NULL

 

PS 5排在23前面是因爲它們是字符列,按照字典序(按照單個字符從左到右比較),523“大”,故降序排列在前。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章