資料庫學習之MySQL (八)——排序查詢 ORDER BY ASC DSC
文章目錄
排序查詢 ASC DESC
先來玩個例子:
USE data1; SELECT `commission_pct`,CONCAT( `last_name`,',`first_name`,IFNULL(`manager_id`,0),IFNULL(`job_id`,IFNULL(`email`,IFNULL(`commission_pct`,0) ) 職工基本情況,`salary` FROM employees WHERE `commission_pct` <=> NULL ORDER BY salary ASC;
這裡其實就多了一句ORDER BY salary ASC;
然後salary就能升序排列了,猜得出來,salary是控制的欄目,ASC應該是升序有關的指令。那麼把ASC
改成DASC
呢?
明顯變成降序了。如果不寫ASC
也ok,預設升序排列。
這裡我們順便學兩個六級單詞得了(別想了,六級逃不掉的 )
單詞 | 音標 | 含義 | 縮寫 | 巧記 | 字首 |
---|---|---|---|---|---|
ascend | 英[əˈsend] | 升高; 爬上坡 | ASC | a-scend | a字首 往上 增多 |
descend | 英[dɪˈsend] | 下降; 走下坡 | DESC | de-scend | de字首 往下 否定 下降 |
另外,為啥我滑鼠一點就能解決的事情還需要敲程式碼搞定?
你可以嘗試,跟老闆或者客戶說:“誒boss,用的時候記得開啟SQLyog點一下哈”。
其實這裡我們已經發現,學的都是SELECT語句附加的一個個成分:
FROM 縮小搜尋範圍到具體哪張表
WHERE 篩選 需要具體哪些資料 (之前我們提到的 行-類的例項 列-類的屬性)
對屬性的組合進行排序
有沒有想過,我們目前能針對什麼專案進行排序?就是表的欄目
如果把每一行看做類的例項,那列就是類的屬性,而在表中,屬性就是變數,比如salary是一個整形變數。
既然變數可以排序,那含有變數的表示式也可以咯?沒錯!
案例 我們想對中產階級 也就是表中工資在4000~8000的人,進行年終獎的計算,並且還要降序排序一波再輸出。
提示:沒有年終獎的人,commission_pct為NULL
程式碼:
USE data1;
SELECT
CONCAT(
`last_name`,'-',`first_name`
) AS 姓名,`salary` * (1+IFNULL(`commission_pct`,0)) AS 年終工資
FROM
employees
WHERE
salary BETWEEN 4000 AND 8000
ORDER BY 年終工資 DESC;
這裡有兩個槽點:
1 不僅salary能夠排序,salary
* (1+IFNULL(commission_pct
,0)),也能夠排序
2 可以用別名(AS,而且支援中文!)當做一個組合變數排序。這樣程式碼更加簡潔直觀
3 別名也就是這裡能用 別的還是不行 如下,試著把上面程式碼的where部分改成下面的樣子:
WHERE
年終工資 BETWEEN 4000 AND 8000
所以正確寫法還是挺苟且的:
對函式輸出排序
案例
嘗試利用獲取字串長度的LENGTH()函式 輸出的結果進行篩選+排序
last_name 字母數在1~5之間,並且升序輸出:
USE data1;
SELECT
last_name,0)) AS 年終工資
FROM
employees
WHERE
LENGTH(last_name) BETWEEN 1 AND 5
ORDER BY LENGTH(last_name) ASC;
多個排序規則
之前在ORDER BY後面新增的就是一個排序的規則
案例都是2500的工資,其順序咋確定呢?
我們可以再加一個排序規則
程式碼:ORDER BY 年終工資 ASC,LENGTH(last_name) DESC;
這樣,年終工資升序,如果同樣工資,按次級排序順序,即,last_name字串長度的降序
注意:第一個排序規則(年終工資 ASC
)是老大,後面跟著的(LENGTH(last_name) DESC
)都是小弟,次級的,作為補充的