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的縮寫谎砾,這兩個(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. 編寫 SQL 語(yǔ)句笛粘,從 Customers 中檢索所有的顧客名稱(cust_name)趁怔,并按從 Z 到 A 的順序顯示結(jié)果。
SELECT cust_name
FROM Customers
ORDER BY cust_name DESC;
2. 編寫 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. 顯然铺浇,我們的虛擬商店更喜歡出售比較貴的物品,而且這類物品有很多例诀。編寫 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/