0 写在前面
记得之前写过一个分页查询的例子,用的方法就是limit限定条目数。
如果对于数据太多,把所有数据放在一个屏幕上显得很乱,如果限定一下一个屏幕显示几条数据,分成n页就显得很干净利索。
1 语法格式
格式1:[NOT] LIMIT N
返回 N 条记录
格式2:[NOT] LIMIT N,M
从第 N 条记录开始, 返回 M 条记录
2 SQL准备
SQL:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user_wages_information
-- ----------------------------
DROP TABLE IF EXISTS `user_wages_information`;
CREATE TABLE `user_wages_information` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_wager_information_uuid` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户工资表主键',
`user_information_uuid` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户信息主键',
`year` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '年份',
`month` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '月份',
`base_salary` double UNSIGNED NULL DEFAULT NULL COMMENT '基本工资',
`bonus` double NULL DEFAULT NULL COMMENT '奖金',
`punish` double NULL DEFAULT NULL COMMENT '扣除',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户工资信息表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_wages_information
-- ----------------------------
INSERT INTO `user_wages_information` VALUES (1, '92b639cf-c2ca-4fff-9fd8-4c8074e8109c', 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '2022', '10', 3000, 1500, 100, '4400');
INSERT INTO `user_wages_information` VALUES (2, '4dcf10bd-2706-49c4-a505-41da5667cd08', 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '2022', '9', 3000, 1500, 0, '4500');
INSERT INTO `user_wages_information` VALUES (3, '2a560bbf-c98e-4bd4-b8ed-4068d1c261ab', '197410ca-9dde-4850-9ff7-5153786db821', '2022', '10', 9000, 4000, 0, '13000');
INSERT INTO `user_wages_information` VALUES (4, '7eb42aa0-dbc3-4d88-a636-d3044ec6efdf', 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '2022', '8', 3000, 1000, 500, '3500');
INSERT INTO `user_wages_information` VALUES (5, '37cb6240-a958-44db-8276-2f2af2156a32', '197410ca-9dde-4850-9ff7-5153786db821', '2022', '9', 8000, 3000, 0, '11000');
INSERT INTO `user_wages_information` VALUES (6, 'f2009698-8152-4045-b7a8-927994993af9', '01198488-a0b6-46ba-9311-9e64ba1d41ef', '2022', '10', 5000, 0, 0, '5000');
INSERT INTO `user_wages_information` VALUES (7, 'e3e45ce4-1db1-40ff-8efe-f7a0685972e2', '01198488-a0b6-46ba-9311-9e64ba1d41ef', '2022', '9', 5000, 0, 0, '5000');
SET FOREIGN_KEY_CHECKS = 1;
3 举例说明
3.1 格式1: [NOT] LIMIT N
此功能是查询表中前N条数据,TIPS(N必须是正整数)
查询表中前三条数据:
SELECT
FROM
`user_wages_information`
LIMIT 3
结果:
3.2格式1: [NOT] LIMIT N,M
此功能是查询表中第N条开始,M条数据TIPS(N,M必须是正整数)N从0开始
查询第4,5,6条数据,那就是从3开始,3条数据。
SELECT
FROM
`user_wages_information`
LIMIT 3,3
结果:
结果都是正确的。
4 小技巧--分页公式
设定:
页码:curPage
一页多少条数:pageSize
则他的公式为(伪代码):[NOT] LIMIT (curPage-1)*pageSize,pageSize
如果我一页是三条:
第一页:LIMIT (1-1)3,3 -----> LIMIT 0,3
第二页:LIMIT (2-1)3,3 -----> LIMIT 3,3
e`
如果我一页是三条:
第一页:LIMIT (1-1)3,3 -----> LIMIT 0,3
第二页:LIMIT (2-1)3,3 -----> LIMIT 3,3
这个已经验证过了,可以直接拿来用。