一、limit
在SELECT
语句中使用LIMIT
子句来约束结果集中的行数。LIMIT
子句接受一个或两个参数。两个参数的值必须为零或正整数。
1.1两个参数的LIMIT
子句语法:
SELECT
column1,column2,...
FROM
table
LIMIT offsetV , countV;
SQL
我们来查看LIMIT
子句参数:
offset
参数指定要返回的第一行的偏移量。第一行的偏移量为0
,而不是1
。count
指定要返回的最大行数。
另一个写法是带上offset关键字
SELECT
column1,column2,....
FROM
table
LIMIT countV offset offsetV;
当您使用带有一个参数的LIMIT
子句时,此参数将用于确定从结果集的开头返回的最大行数。此方法经常用于获取数据集中的前N行记录
SELECT
column1,column2,...
FROM
table
limit N;
1.2 使用MySQL limit获取最高和最低值
LIMIT
子句经常与ORDER BY子句一起使用。首先,使用ORDER BY
子句根据特定条件对结果集进行排序,然后使用LIMIT
子句来查找最小或最大值。
注意:
ORDER BY
子句按指定字段排序的使用。
请参见示例数据库(yiibaidb)中的以下customers
表,其表结构如下所示 -
mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber | int(11) | NO | PRI | NULL | |
| customerName | varchar(50) | NO | | NULL | |
| contactLastName | varchar(50) | NO | | NULL | |
| contactFirstName | varchar(50) | NO | | NULL | |
| phone | varchar(50) | NO | | NULL | |
| addressLine1 | varchar(50) | NO | | NULL | |
| addressLine2 | varchar(50) | YES | | NULL | |
| city | varchar(50) | NO | | NULL | |
| state | varchar(50) | YES | | NULL | |
| postalCode | varchar(15) | YES | | NULL | |
| country | varchar(50) | NO | | NULL | |
| salesRepEmployeeNumber | int(11) | YES | MUL | NULL | |
| creditLimit | decimal(10,2) | YES | | NULL | |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set
例如,要查询信用额度最高的前五名客户(如果要获取最低的5名客户,则需要将DESC换成ASC),请使用以下查询:
SELECT customernumber, customername, creditlimit
FROM customers
ORDER BY creditlimit DESC
LIMIT 5;
执行上面查询语句,得到以下结果 -
mysql> SELECT customernumber, customername, creditlimit
FROM customers
ORDER BY creditlimit DESC
LIMIT 5;
+----------------+------------------------------+-------------+
| customernumber | customername | creditlimit |
+----------------+------------------------------+-------------+
| 141 | Euro+ Shopping Channel | 227600 |
| 124 | Mini Gifts Distributors Ltd. | 210500 |
| 298 | Vida Sport, Ltd | 141300 |
| 151 | Muscle Machine Inc | 138500 |
| 187 | AV Stores, Co. | 136800 |
+----------------+------------------------------+-------------+
5 rows in set
1.3 通过limit和offset获取第offset高(低)的count个记录
MySQL中最棘手的问题之一是:如何获得结果集中的第n
个最高值,例如查询第二(或第n
)贵的产品是哪个,显然不能使用MAX或MIN这样的函数来查询获得。 但是,我们可以使用MySQL LIMIT
来解决这样的问题。
- 首先,按照降序对结果集进行排序。
- 第二步,使用
LIMIT
子句获得第n
贵的产品。
通用查询如下:
SELECT
column1, column2,...
FROM
table
ORDER BY column1 DESC
LIMIT nth-1, count;
或者
SELECT
column1, column2,...
FROM
table
ORDER BY column1 DESC
LIMIT count offset nth-1;
用上面的customers表举例:
目标:获取customers表中信用额度第三和第四高的客户
SELECT customernumber, customername, creditlimit
FROM customers
ORDER BY creditlimit DESC
LIMIT 2 offset 2;
参考链接
https://www.yiibai.com/mysql/limit.html