MySQL LIMIT:限制查詢結果的記錄條數

2020-07-16 10:04:44
在使用 MySQL SELECT 語句時往往返回的是所有匹配的行,有些時候我們僅需要返回第一行或者前幾行,這時候就需要用到 MySQL LIMT 子句。

基本的語法格式如下:

<LIMIT> [<位置偏移量>,] <行數>

LIMIT 接受一個或兩個數位引數。引數必須是一個整數常數。如果給定兩個引數,第一個引數指定第一個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。

第一個引數“位置偏移量”指示 MySQL 從哪一行開始顯示,是一個可選引數,如果不指定“位置偏移量”,將會從表中的第一條記錄開始(第一條記錄的位置偏移量是 0,第二條記錄的位置偏移量是 1,以此類推);第二個引數“行數”指示返回的記錄條數。

【範例 1】顯示 tb_students_info 表查詢結果的前 4 行,輸入的 SQL 語句和執行結果如下所示。
mysql> SELECT * FROM tb_students_info LIMIT 4;
+----+-------+---------+------+------+--------+------------+
| id | name  | dept_id | age  | sex  | height | login_date |
+----+-------+---------+------+------+--------+------------+
|  1 | Dany  |       1 |   25 | F    |    160 | 2015-09-10 |
|  2 | Green |       3 |   23 | F    |    158 | 2016-10-22 |
|  3 | Henry |       2 |   23 | M    |    185 | 2015-05-31 |
|  4 | Jane  |       1 |   22 | F    |    162 | 2016-12-20 |
+----+-------+---------+------+------+--------+------------+
4 rows in set (0.00 sec)
由結果可以看到,該語句沒有指定返回記錄的“位置偏移量”引數,顯示結果從第一行開始,“行數”引數為 4,因此返回的結果為表中的前 4 行記錄。

若指定返回記錄的開始位置,則返回結果為從“位置偏移量”引數開始的指定行數,“行數”引數指定返回的記錄條數。

【範例 2】在 tb_students_info 表中,使用 LIMIT 子句返回從第 4 條記錄開始的行數為 5 的記錄,輸入的 SQL 語句和執行結果如下所示。
mysql> SELECT * FROM tb_students_info LIMIT 3,5;
+----+-------+---------+------+------+--------+------------+
| id | name  | dept_id | age  | sex  | height | login_date |
+----+-------+---------+------+------+--------+------------+
|  4 | Jane  |       1 |   22 | F    |    162 | 2016-12-20 |
|  5 | Jim   |       1 |   24 | M    |    175 | 2016-01-15 |
|  6 | John  |       2 |   21 | M    |    172 | 2015-11-11 |
|  7 | Lily  |       6 |   22 | F    |    165 | 2016-02-26 |
|  8 | Susan |       4 |   23 | F    |    170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
5 rows in set (0.00 sec)
由結果可以看到,該語句指示 MySQL 返回從第 4 條記錄行開始的之後的 5 條記錄,第一個數位“3”表示從第 4 行開始(位置偏移量從 0 開始,第 4 行的位置偏移量為 3),第二個數位 5 表示返回的行數。

所以,帶一個引數的 LIMIT 指定從查詢結果的首行開始,唯一的參數列示返回的行數,即“LIMIT n”與“LIMIT 0,n”等價。帶兩個引數的 LIMIT 可返回從任何位置開始的指定行數的資料。

返回第一行時,位置偏移量是 0。因此,“LIMIT 1,1”返回第 2 行,而不是第 1 行。

注意:MySQL 5.7 中可以使用“LIMIT 4 OFFSET 3”,意思是獲取從第5條記錄開始的後面的3條記錄,和“LIMIT 4,3”返回的結果相同。