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ǔ)句相同。
輸出:
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à)格,然后按名稱排序
輸出:

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)行排序。
輸出:


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)品(最貴的排在最前面)
輸出:

輸入: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)用到直接位于其前面的列名。
輸出:


請(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/