MySql(十五)分页查询

    xiaoxiao2023-10-15  27

    分页查询

    应用场景:当要显示的数据,一页显示不全,此时需要分页提交sql请求

    实现:

    语法:

    SELECT 查询列表

    FROM 表

    [join type] JOIN 表2

    ON 连接条件

    WHERE 筛选条件

    GROUP BY 分组条件

    HAVING 分组后筛选条件

    ORDER BY 排序字段

    LIMIT offset,size;

    注:offset:要显示条目的起始索引(其实索引从0开始)

    ​ size:要显示的条目个数

    案例1:显示前五条员工信息

    SELECT * FROM employees LIMIT 0,5; /**当起始索引为0时可以省略**/ SELECT * FROM employees LIMIT 5;

    案例2:查询第11条到第25条的数据

    分析:起始索引:10

    ​ 要显示的条目行数:25-11+1 = 15

    SELECT * FROM employees LIMIT 10,15;

    案例3:查询有奖金的员工信息,并且显示工资较高的前10名

    查询有奖金的员工信息并按照工资高低排序显示前10名的数据 SELECT * FROM employees WHERE commission_pct IS NOT NULL ORDER BY salary DESC limit 0,10;

    分页查询的特点:

    limit语句放在查询语句的最后

    公式: 要显示的页数:page; 每页的条目数:size

    SELECT 查询列表

    FROM 表

    LIMIT (page-1)*size,size;

    注:这里假设每页的条目数为10

    page(要显示的页数)offset(要显示的起始索引)10210320……n(n-1)*10

    进阶练习

    已知表stuinfo和表grade的结构如下:

    stuinfo

    学号(id)姓名(name)邮箱(email)年级编号(gradeId)性别(sex)年龄(age)John@126.com

    grade

    年级编号(id)年级名称(gradeName)

    案例1.查询所有学员的邮箱的用户名(注:邮箱前面的@字符)

    分析:

    获取学员的邮箱名获取字符@的索引截取字符@ SELECT SUBSTR(email,1,INSTR(email,'@')-1) 用户名 FROM stuinfo;

    注:

    subStr(“要截取的字符”,起始索引,结束索引);//返回截取指定索引的字符串

    inStr(“整个字符串”,“要查寻索引的字符”);//返回指定字符的索引

    案例2:查询男生和女生的个数

    SELECT COUNT(*) 个数,sex FROM stuinfo GROUP BY sex;

    案例3:查询年龄>18岁所有学生的姓名和年级名称

    分析:用到了两张表

    SELECT name,gradeName FROM stuinfo s INNER JOIN grade g ON s.gradeid = g.id WHERE age > 18;

    案例4:查询哪个年级的学生最小年龄大于20岁

    分析:

    查询每个年级的学生的最小年龄筛选出最小年龄大于20岁的年级有哪些 SELECT MIN(age) 最小年龄,gradeId FROM stuinfo s GROUP BY gradeId HAVING 最小年龄 > 20;

    总结:查询语句中涉及到的关键字及其执行顺序

    SELECT 查询列表 /**7**/ FROM 表1 /**1:锁定数据源**/ 连接类型 JOIN 表2 /**2:将两个表进行连接:笛卡尔乘积**/ ON 连接条件 /**3.连接条件**/ WHERE 筛选条件 /**4**/ GROUP BY 分组列表 /**5**/ HAVING 分组后的筛选 /**6**/ ORDER BY 排序列表 /**8:将查询的结果进行排序**/ LIMIT 起始索引,条目数 /**9:将结果分页显示**/
    最新回复(0)