目錄
- 資料的排序
- 單列排序
- 多列排序(二級排序)
- 分頁
- 分頁顯示公式
資料的排序
如果沒有使用排序操作,預設情況下查詢傳回的資料是按照添加資料的順序顯示的。
使用 ORDER BY 子句排序
- ASC(ascend): 升序(預設)
- DESC(descend):降序
ORDER BY 子句在SELECT語句的結尾。
單列排序
例如:
# 按照salary從高到低的順序顯示員工資訊
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC;
#按照salary從低到高的順序顯示員工資訊
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary ASC;
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary; # 如果在ORDER BY 後沒有顯式指名排序的方式的話,則預設按照升序排列。
注意:
①我們可以使用列的别名,進行排序。
②列的别名隻能在 ORDER BY 中使用,不能在WHERE中使用。
③強調格式:WHERE 需要聲明在FROM後,ORDER BY之前。
例如:
SELECT employee_id,salary,salary * 12 annual_sal
FROM employees
ORDER BY annual_sal;
#如下操作報錯!
SELECT employee_id,salary,salary * 12 annual_sal
FROM employees
WHERE annual_sal > 81600;
多列排序(二級排序)
- 可以使用不在SELECT清單中的列排序。
- 在對多列進行排序的時候,首先排序的第一列必須有相同的列值,才會對第二列進行排序。如果第一列資料中所有值都是唯一的,将不再對第二列進行排序。
例如:
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
結果:

同樣的三級排序,四級排序,多級排序同理。
分頁
使用背景:
背景1:查詢傳回的記錄太多了,檢視起來很不友善,怎麼樣能夠實作分頁查詢呢?
背景2:表裡有 4 條資料,我們隻想要顯示第 2、3 條資料怎麼辦呢?、
所謂分頁顯示,就是将資料庫中的結果集,一段一段顯示出來需要的條件。
MySQL中使用 LIMIT 實作分頁
注意:LIMIT 子句必須放在整個SELECT語句的最後!
使用分頁的好處:
限制傳回結果的數量可以 減少資料表的網絡傳輸量 ,也可以 提升查詢效率 。如果我們知道傳回結果隻有1 條,就可以使用 LIMIT 1 ,告訴 SELECT 語句隻需要傳回一條記錄即可。這樣的好處就是 SELECT 不需要掃描完整的表,隻需要檢索到一條符合條件的記錄即可傳回。
文法格式:
LIMIT [位置偏移量,] 行數
第一個“位置偏移量”參數訓示MySQL從哪一行開始顯示,是一個可選參數,如果不指定“位置偏移量”,将會從表中的第一條記錄開始(第一條記錄的位置偏移量是0,第二條記錄的位置偏移量是1,以此類推);第二個參數“行數”訓示傳回的記錄條數。
例如:
# 需求1:每頁顯示20條記錄,此時顯示第1頁
SELECT employee_id,last_name
FROM employees
LIMIT 0,20
# 需求2:每頁顯示20條記錄,此時顯示第2頁
SELECT employee_id,last_name
FROM employees
LIMIT 20,20;
# 需求3:每頁顯示20條記錄,此時顯示第3頁
SELECT employee_id,last_name
FROM employees
LIMIT 40,20;
# 需求4:查詢員工表中工資最高的員工資訊
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC
#limit 0,1
LIMIT 1;
# 需求5:表裡有107條資料,我們隻想要顯示第 32、33 條資料
SELECT employee_id,last_name
FROM employees
LIMIT 2 OFFSET 31;
#LIMIT 31,2;
注意:
MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”,意思是擷取從第5條記錄開始後面的3條記錄,和“LIMIT4,3;”傳回的結果相同。
LIMIT 可以使用在MySQL、PGSQL、MariaDB、SQLite 等資料庫中使用,表示分頁。不能使用在SQL Server、DB2、Oracle!