《SQL必知必會(huì)》第3課 排序檢索數(shù)據(jù)

3.1 排序數(shù)據(jù)

3.2 按多個(gè)列排序

3.3 按列位置排序

3.4 指定排序方向

3.5 code

3.6 挑戰(zhàn)題

這一課講授如何使用 SELECT 語(yǔ)句的

ORDER BY 子句,根據(jù)需要排序檢索出的數(shù)據(jù)。

3.1 排序數(shù)據(jù)

輸入SELECT prod_name

?????????? FROM Products

?????????? ORDER BY prod_name;

分析:除了指示 DBMS 軟件對(duì)prod_name列以字母順序排序數(shù)據(jù)的 ORDER BY子句外,這條語(yǔ)句 與前面的語(yǔ)句相同。

輸出:

排序結(jié)果
概念1
注意

3.2 按多個(gè)列排序

經(jīng)常需要按不止一個(gè)列進(jìn)行數(shù)據(jù)排序。例如,如果要顯示雇員名單,可能希望按姓和名排序(首先按姓排序,然后在每個(gè)姓中再按名排序)。如果多個(gè)雇員有相同的姓,這樣做很有用。

要按多個(gè)列排序,只須指定這些列名,列名之間用逗號(hào)分開(kāi)即可(就像選擇多個(gè)列時(shí)那樣)。

輸入:SELECT prod_id, prod_price, prod_name

?????????? FROM Products

?????????? ORDER BY prod_price, prod_name;

分析:代碼檢索 3 個(gè)列,并按其中兩個(gè)列對(duì)結(jié)果進(jìn)行排序——首先按價(jià)格,然后按名稱排序

輸出:

按多個(gè)排序結(jié)果

3.3 按列位置排序

輸入:SELECT prod_id, prod_price, prod_name

?????????? FROM Products

?????????? ORDER BY 2, 3;

分析:可以看到,這里的輸出與上面的查詢相同,不同之處在于 ORDER BY 子句。SELECT 清單中指定的是選擇列的相對(duì)位置而不是列名。ORDER BY 2表示按 SELECT 清單中的第二個(gè)列 prod_price 進(jìn)行排序。ORDER BY 2,3 表示先按 prod_price,再按 prod_name 進(jìn)行排序。

輸出:

結(jié)果
提示

3.4 指定排序方向

數(shù)據(jù)排序不限于升序排序(從 A 到 Z),這只是默認(rèn)的排序順序。還可以使用 ORDER BY 子句進(jìn)行降序(從 Z 到 A)排序。為了進(jìn)行降序排序,必須指定 DESC 關(guān)鍵字。

輸入:SELECT prod_id, prod_price, prod_name

?????????? FROM Products

?????????? ORDER BY prod_price DESC;

分析:以價(jià)格降序來(lái)排序產(chǎn)品(最貴的排在最前面)

輸出:

按prod_price降序輸出結(jié)果


輸入:SELECT prod_id, prod_price, prod_name

?????????? FROM Products

?????????? ORDER BY prod_price DESC,prod_name;

分析:先以降序排列prod_price,再按升序排列prod_name。DESC關(guān)鍵字只應(yīng)用到直接位于其前面的列名。

輸出:

多列排序結(jié)果


請(qǐng)注意,DESC 是 DESCENDING的縮寫(xiě),這兩個(gè)關(guān)鍵字都可以使用。與 DESC相對(duì)的是 ASC(或ASCENDING),在升序排序時(shí)可以指定它。但實(shí)際上,ASC 沒(méi)有多大用處,因?yàn)樯蚴悄J(rèn)的(如果既不指定 ASC 也不指定DESC,則假定為 ASC)。

3.5 code

這一課學(xué)習(xí)了如何用 SELECT 語(yǔ)句的 ORDER BY 子句對(duì)檢索出的數(shù)據(jù)進(jìn)行排序。這個(gè)子句必須是 SELECT 語(yǔ)句中的最后一條子句。根據(jù)需要,可以利用它在一個(gè)或多個(gè)列上對(duì)數(shù)據(jù)進(jìn)行排序

-- --------第3課--------

#3.1 排序數(shù)據(jù)

SELECT prod_name

FROM Products

ORDER BY prod_name;

#3.2 按多個(gè)列排序

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY prod_price, prod_name;

#3.3 按列位置排序

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY 2, 3;

#3.4 指定排序方向(升or降)

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY prod_price DESC;

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY prod_price DESC,prod_name;

3.6 挑戰(zhàn)題

1. 編寫(xiě) SQL 語(yǔ)句,從 Customers 中檢索所有的顧客名稱(cust_name),并按從 Z 到 A 的順序顯示結(jié)果。
SELECT cust_name

FROM Customers

ORDER BY cust_name DESC;

2. 編寫(xiě) SQL 語(yǔ)句,從 Orders 表中檢索顧客 ID(cust_id)和訂單號(hào)(order_num),并先按顧客 ID 對(duì)結(jié)果進(jìn)行排序,再按訂單日期倒序排列。
SELECT cust_id,order_num

FROM Orders

ORDER BY cust_id,order_date DESC;

3. 顯然,我們的虛擬商店更喜歡出售比較貴的物品,而且這類物品有很多。編寫(xiě) SQL 語(yǔ)句,顯示 OrderItems 表中的數(shù)量和價(jià)格(item_price),并按數(shù)量由多到少、價(jià)格由高到低排序。
SELECT quantity,item_price

FROM Orderitems

ORDER BY quantity DESC,item_price DESC

4. 下面的 SQL 語(yǔ)句有問(wèn)題嗎?(嘗試在不運(yùn)行的情況下指出。)

SELECT vend_name,

FROM Vendors

ORDER vend_name DESC;

改正:

SELECT vend_name

FROM Vendors

ORDER BY vend_name DESC;

參考:https://forta.com/books/0135182794/challenges/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容