MySQL如何對數據進行排序圖文詳解
一、 排序的基本使用
- 在查詢數據時,如果沒有使用排序操作,默認情況下SQL會按元組添加的順序來排列查詢結果。
- 在SQL中,使用關鍵字 ORDER BY… 來進行排序操作。在此關鍵字後面可以添加關鍵字 ASC (ascend) 表示升序排列 (從小到大) ,DESC (descend) 表示降序排列 (從大到小) 。
- 如果在 ORDER BY… 關鍵字後沒有添加 ASC 或 DESC 來指明升序還是降序排列,SQL會默認按照升序 ASC 排列。如下代碼所示:
SELECT employee_id, last_name, salary FROM employees ORDER BY salary;
查詢結果:
【例子1】查詢員工表 employees
中的員工的 employee_id
、last_name
、salary
和 department_id
信息。並按 salary
從大到小 (降序) 進行排列。
SELECT employee_id, last_name, salary FROM employees ORDER BY salary DESC;
查詢結果:
二、 使用列的別名來排序
在SQL中,可以使用字段 (列) 的別名來進行排序。因為有時我們需要計算表中沒有的字段 (如年薪 annual_salary
) ,或者有些字段名字實在是太長瞭,使用簡短的別名可以提高我們編程的效率。如下例子所示:
【例子】查詢員工表 employees
中的員工的 employee_id
、last_name
、月薪 salary
和 年薪 annual_salary
信息。並按 annual_salary
從大到小 (降序) 進行排列。
SELECT employee_id, last_name, salary, salary * (1 + IFNULL(commission_pct, 0) * 12) AS "annual_salary" FROM employees ORDER BY annual_salary DESC;
查詢結果:
【註意】
- 格式要求,
WHERE
必須聲明在FROM
後。 - 列的別名隻能在
ORDER BY...
中使用,不能在WHERE
中使用。**如果在WHERE
中使用列的別名,SQL會報錯。那為什麼MySQL中列的別名不能在WHERE
中使用呢?原因如下:
【原因】
SELECT employee_id, last_name, department_id FROM employees WHERE department_id IN(50, 60, 70) ORDER BY department_id DESC;
- 在SQL中,查詢語句不是按照上述代碼從第1行到第4行從上往下執行的。而是首先執行第2行 FROM… ,先去找要查詢的表。
- 再執行第3行 WHERE… ,去篩選符合條件的元組。
- 然後執行第1行 SELECT… ,顯示你要查詢的字段。在這一步才會生成列的別名,自然無法提供給上一步的 WHERE 來使用。但是可以提供給下一步的 ORDER BY 來使用。
- 最後才是第4行 ORDER BY… ,按某列排序。這個時候可以使用列的別名來進行排序。
查詢結果:
三、 二級排序
在現實生活中,我們有時候希望先按某個字段排序,再按另一個字段排序。在SQL中我們可以使用二級排序來實現。使用方法請看下面例子:
【例子1】查詢員工表 employees
中的員工的員工ID employee_id
、名字 last_name
、月薪 salary
和部門ID department_id
。並先按部門ID department_id
降序排列,再按 salary
從大到小 (降序) 進行排列。
SELECT employee_id, last_name, salary, department_id FROM employees ORDER BY department_id DESC, salary DESC;
查詢結果:
依次類推,可以在 ORDER BY
後面加逗號,來實現三級、四級…排序。
總結
到此這篇關於MySQL如何對數據進行排序的文章就介紹到這瞭,更多相關MySQL數據排序內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SQL實現LeetCode(185.系裡前三高薪水)
- MySQL子查詢的使用詳解下篇
- MySQL中實現分頁操作的實戰指南
- MySQL子查詢的使用詳解上篇
- MySQL必備基礎之分組函數 聚合函數 分組查詢詳解