天天看點

排序與分頁

目錄

  • ​​資料的排序​​
  • ​​單列排序​​
  • ​​多列排序(二級排序)​​
  • ​​分頁​​
  • ​​分頁顯示公式​​

資料的排序

如果沒有使用排序操作,預設情況下查詢傳回的資料是按照添加資料的順序顯示的。

使用 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!

分頁顯示公式