在查詢資料時,如果沒有使用排序操作,預設情況下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
後面加逗號,來實現三級、四級&hellip ;排序。
以上是MySQL怎麼對資料進行排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!