MySQL中的LIMIT子句可以用于限制查询返回结果的数量,从而实现常见的Top-N查询和分页查询等功能。
??在SQL标准中,定义了FETCH子句实现查询结果数量的限制。如果使用Oracle、SQLServer或者PostgreSQL,可能会见到这种语法。
11.1LIMIT子句在查询语句中使用LIMIT子句的语法如下:
SELECTcol1,col2,...FROMtable_name[WHEREconditions][ORDERBY...]LIMIT[off_set,]row_count;
其中,
off_set指定一个行偏移量,从第off_set+1行开始返回数据。默认值为0,表示从第一行开始返回。
row_count指定返回记录的上限数量。
这两个参数都必须是大于等于0的整数。例如,以下查询返回了10位员工的信息:selectemp_name,sexfromemployeelimit10;emp_name
sex
---------
----
刘备
男
关羽
男
张飞
男
诸葛亮
男
黄忠
男
魏延
男
孙尚香
女
孙丫鬟
女
赵云
男
廖化
男
除了以上语法形式的LIMIT子句之外,MySQL也支持以下写法(兼容PostgreSQL):
LIMITrow_countOFFSEToff_set
因此,上面的示例也可以写成:
selectemp_name,sexfromemployeelimit10offset0;
一般而言,LIMIT子句很少单独使用,而是和ORDERBY子句一起返回更有意义的数据。
11.2Top-N查询Top-N查询通常用于返回按照指定规则排序之后的前N条记录,例如销售排行榜。
以下查询用于获取最先入职的前5名员工:
selectemp_name,hire_datefromemployeeorderbyhire_datelimit5;emp_name
hire_date
----------
----------
刘备
-01-01
关羽
-01-01
张飞
-01-01
孙尚香
-08-08
孙丫鬟
-08-08
执行该语句时,先按照hire_date从早到晚进行排序;然后通过LIMIT子句限制返回前5条记录。如果将hire_date降序排序,可以获取到目前为止最后入职的5名员工。
??这种返回Top-N的方式存在一个局限性,就是如果最后有多条记录排名相同,只能随机选择其中一些数据返回。这个问题我们可以利用窗口函数解决,在后续文章中会介绍MySQL8.0新增的窗口函数。
11.3分页查询在应用程序的前端页面中,通常不会直接显示全部数据,而是采用分页显示的方式。下图是我的CSDN博客