博客
关于我
MySQL学习-子查询及limit分页
阅读量:792 次
发布时间:2023-02-12

本文共 1965 字,大约阅读时间需要 6 分钟。

子查询及limit分页

子查询

子查询的定义

子查询是指在一个SELECT语句内嵌套另一个SELECT语句,被嵌套的SELECT称为子查询。子查询可以出现在SELECT、FROM、WHERE等多个位置。

子查询的应用场景

  • SELECT语句
    select (select empname from emp where deptno = 10) as name from emp;
  • FROM语句
    select e.ename, d.dname from emp e join dept d on e.deptno = d.deptno;
  • WHERE语句
    select * from emp where salary > (select avg(salary) from emp);

案例:找出高于平均薪资的员工信息

  • 第一步:找出平均薪资
    select avg(salary) from emp;
  • 第二步:过滤高于平均薪资的员工
    select * from emp where salary > 2073.214286;
  • 合并查询
    select * from emp where salary > (select avg(salary) from emp);
  • 案例:找出每个部门平均薪水的等级

  • 第一步:找出每个部门的平均薪水
    select deptno, avg(salary) as avgsal from emp group by deptno;
  • 第二步:与薪水等级表关联
    select t.*, s.grade from (select deptno, avg(salary) as avgsal from emp group by deptno) t join salgrade s on t.avgsal between s.losal and s.hisal;
  • 案例:找出每个员工的部门名称

    select e.ename, (select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;

    UNION的用法

    案例:找出工作岗位是SALESMAN和MANAGER的员工

  • 第一种方法
    select ename, job from emp where job = 'MANAGER' or job = 'SALESMAN';
  • 第二种方法
    select ename, job from emp where job in ('MANAGER', 'SALESMAN');
  • 第三种方法
    select ename, job from emp where job = 'MANAGER'unionselect ename, job from emp where job = 'SALESMAN';
  • 案例:两张不相干表的数据拼接

    select ename from empunionselect dname from dept;

    注意事项

    • 列数必须一致:确保两个SELECT语句返回的列数相同。
    • 数据类型一致:确保返回的数据类型一致,否则会导致错误。

    LIMIT及通用分页SQL

    LIMIT的作用

    LIMIT用于限制返回的结果集数量,是MySQL特有的功能。它的语法为:

    limit [offset,] count
    • offset:表示起始位置,从0开始,0表示第一条数据。
    • count:表示要取的数据数量。

    案例:取出工资前5名的员工

  • 降序排序后取前5名
    select ename, salary from emp order by salary desc limit 5;
  • 直接取前5名
    select ename, salary from emp order by salary desc limit 5;
  • 案例:找出工资排名在第4到第9名的员工

    select ename, salary from emp order by salary desc limit 4,5;

    通用分页SQL

    • 每页显示3条记录
      select * from emp order by salary desc limit 0,3;
      select * from emp order by salary desc limit 3,3;
    • 每页显示10条记录
      select * from emp order by salary desc limit (pageNo - 1) * 10, 10;

    注意事项

    • 页码pageNo表示当前显示的页数。
    • 每页显示的记录数pageSize表示每页显示的记录数。

    通过以上方法,可以方便地对数据进行分页查询,满足不同场景的需求。

    转载地址:http://mrbfk.baihongyu.com/

    你可能感兴趣的文章
    Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据
    查看>>
    MYSQL搜索引擎
    查看>>
    mysql操作数据表的命令_MySQL数据表操作命令
    查看>>
    mysql操作日志记录查询_如何使用SpringBoot AOP 记录操作日志、异常日志?
    查看>>
    MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
    查看>>
    mysql支持表情
    查看>>
    MySQL支撑百万级流量高并发的网站部署详解
    查看>>
    MySQL改动rootpassword的多种方法
    查看>>
    mysql数据分组索引_MYSQL之索引配置方法分类
    查看>>
    mysql数据取差,mysql屏蔽主外键关联关系
    查看>>
    MySQL数据和Redis缓存一致性方案详解
    查看>>
    MySQL数据和Redis缓存一致性方案详解
    查看>>
    Mysql数据库 InnoDB存储引擎中Master Thread的执行流程
    查看>>
    MySQL数据库 范式
    查看>>
    Mysql数据库B-Tree索引
    查看>>
    mysql数据库io空闲_mysql数据库磁盘io高的排查
    查看>>
    mysql数据库root密码忘记,查看或修改的解决方法
    查看>>
    MySQL数据库SQL注入靶场sqli通关实战(附靶场安装包)
    查看>>
    MYSQL数据库下载安装(Windows版本)
    查看>>
    MySQL数据库与Informix:能否创建同名表?
    查看>>