【MySQL】排序與分頁


https://www.flickr.com/photos/8058098@N07/2718571627/

如果資料表中有許多資料,則我們無法很快找到某個欄位值的最高或最低幾筆。此外,當我們只需要排序結果中的前幾筆資料,那麼將資料通通查詢回來,是耗費效能的舉動,也會佔用不少記憶體。

本文將說明如何針對查詢結果,進行排序與分頁。

此篇內容轉載自本人在 iThome 的文章


一、測試資料

首先認識一下員工資料表的設計。

而以下是測試資料。


二、排序

以下指令是根據到職日遞增排序。

可使用 ORDER BY 語法來排序。而 ASC 代表遞增,遞減為 DESC。若未提供排序方向,則預設為遞增。

以下指令是根據薪水遞減排序。

我們也可透過多個欄位來排序。以下指令是先依據薪水遞減排序,薪水相同者,再依照名字遞增。

值得一提的是,依據文字欄位排序時,MySQL 是不分英文大小寫的。


三、分頁

資料經過排序後,便會有所謂的第 1 筆、第 2 筆、第 7 筆等順序。分頁就是幫助我們取得像第 1 ~ 5 筆、第 6 ~ 10 筆、第 13 ~ 15 筆這種不同區段的資料。

在程式開發的領域中,分頁有兩種操作方式。

第一種是「每頁有 m 筆,我要取第 n 頁」。假設全部有 23 筆資料,且我們事先規定每頁有 5 筆。那麼取第 1 頁會得到第 1 ~ 5 筆,取第 5 頁會得到第 21 ~ 23 筆。

第二種是「先跳過 m 筆,再取接下來的 n 筆」。MySQL 的語法是採用這種概念。

以下指令是取得薪水最高的 3 位員工。會使用 LIMIT 語法。

以下指令是根據到職日遞增排序。定義每頁有 3 筆資料,當我們要取第 2 頁,那就是取第 4 ~ 6 筆。

此處 LIMIT 的參數值有兩個,第一個是跳過的資料數量,第二個是取得的數量。

然而這樣的可讀性不太好,因此也能改用以下的寫法。

使用 OFFSET 語法,可以跳過前面幾筆資料,再用 LIMIT 取得接下來的幾筆。

前面筆者提到分頁有兩種操作方式,它們之間是可以換算的。

假設頁數叫做 page、每頁的資料數量叫做 size,則 offset = size * (page - 1)


上一篇:【MySQL】資料的增刪改查與條件撰寫

下一篇:【MySQL】排序與分頁

留言