1. 程式人生 > 資料庫 >資料庫學習之MySQL (八)——排序查詢 ORDER BY ASC DSC

資料庫學習之MySQL (八)——排序查詢 ORDER BY ASC DSC

MySQL學習專欄 正在持續更新中:)

文章目錄

排序查詢 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的人,進行年終獎的計算,並且還要降序排序一波再輸出。

年終獎就是(1+commission_pct)*salary — 你懂的
提示:沒有年終獎的人,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)都是小弟,次級的,作為補充的