SQL(四) - 子查询和union以及limit分页
子查询概念
什么是子查询?子查询都可以出现在哪里?
select语句当中嵌套select语句,被嵌套的select语句是子查询。
子查询可以出现在哪里?
select..(select).
from..(select).
where..(select).
1.where子句中使用子查询
案例:找出高于平均薪资的员工信息。
select * from emp where sal > avg(sal); //错误的写法,where后面不能直接使用分组函数。
错误的写法:where后面不能直接使用分组函数。
第一步:找出平均薪资
select avg(sal) from emp;
第二步:where过滤
select * from emp where sal > 2073.214286;
第一步和第二步合并:
select * from emp where sal > (select avg(sal) from emp);
2.from后面嵌套子查询 (重要)
应用场景:将查询后得到的表,与其他表做连接查询。
案例:找出每个部门平均薪水的等级。
第一步:找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
select deptno,avg(sal) as avgsal from emp group by deptno;
第二步:将以上的查询结果当做临时表t,让t表和salgrade s表连接,
条件是:t.avgsal between s.losal and s.hisal
select t.*,s.grade
from(select deptno,avg(sal) as avgsal from emp group by deptno) t
joinsalgrade s
ont.avgsal between s.losal and s.hisal;
案例:找出每个部门平均的薪水等级(这个案例不需要看作临时表)。
第一步:找出每个员工的薪水等级。
select e.ename,e.sal,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
第二步:基于以上结果,继续按照deptno分组,求grade平均值。
select e.deptno,avg(s.grade)
from emp e
join salgrade s
on e.sal between s.losal and s.hisal
group bye.deptno;
3.在select后面嵌套子查询 (很少用)。
案例:找出每个员工所在的部门名称,要求显示员工名和部门名。
方法一:等值内连接
select e.ename,d.dname
fromemp e
joindept d
one.deptno = d.deptno;
方法二:select后面子嵌套
select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname
from emp e;
4.union (可以将查询结果集相加)
案例:找出工作岗位是SALESMAN和MANAGER的员工?
第一种:select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
第二种:select ename,job from emp where job in('MANAGER','SALESMAN');
第三种:union
select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job = 'SALESMAN';
只能用union的情况:
案例:两张不相干的表中的数据拼接在一起显示?
select ename from emp
union
select dname from dept;
注意:两张表查询结果的列数必须一样
5.limit (重点中的重点,以后分页查询全靠它了。)
limit是mysql特有的,其他数据库中没有,不通用。(Oracle中有一个相同的机制,叫做rownum)
作用:limit取结果集中的部分数据,这是它的作用。
语法机制:
limit startIndex, length
- startIndex表示起始位置,从0开始,0表示第一条数据。
- length表示取几个
1.案例:取出工资前5名的员工(思路:降序取前5个)
select ename,sal from emp order by sal desc;
取前5个:
select ename,sal from emp order by sal desc limit 0, 5;
select ename,sal from emp order by sal desc limit 5; //startIndex省略表示从0开始
注意:limit是sql语句最后执行的一个环节:
select 5...
from 1...
where 2...
group by 3...
having 4...
order by 6...
limit 7...;
2.案例:找出工资排名在第4到第9名的员工?
select ename,sal from emp order by sal desc limit 3,6;
通用的标准分页sql?
每页显示3条记录:
第1页:0, 3
第2页:3, 3
第3页:6, 3
第4页:9, 3
第5页:12, 3
每页显示pageSize条记录:
第pageNo页:(pageNo - 1) * pageSize, pageSize
pageSize:是每页显示多少条记录
pageNo :显示第几页
java代码{int pageNo = 2; // 页码是2int pageSize = 10; // 每页显示10条limit (pageNo - 1) * pageSize, pageSize
}
SQL(四) - 子查询和union以及limit分页相关推荐
- SQL 基础-- 子查询
--========================= --SQL 基础--> 子查询 --========================= /* 一.子查询 子查询就是位于SELECT.UP ...
- mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...
- mysql子查询中不能使用LIMIT
mysql子查询中不能使用LIMIT /* 今天遇到个问题,如下: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/ ...
- SQL Server子查询
SQL Server子查询 一. SQL Server子查询. 子查询是一个嵌套在另一个语句(如:[SELECT],[INSERT],[UPDATE]或[DELETE])语句或其他子查询中的查询.任何 ...
- mysql用in报错_Mysql子查询IN中使用LIMIT
学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...
- sql 标量子查询_SQL Server 2017:标量子查询简化
sql 标量子查询 Nowadays a lot of developers use Object-Relational Mapping (ORM) frameworks. ORM is a prog ...
- 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引
1. oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的 ...
- MySQL连接查询,子查询,union(合并),分页
连接查询涉及到主键,外键知识,后面讲 建立两种简单的表作为例子: mysql> select * from student; +----+------+-------+ | id | name ...
- Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...
最新文章
- “在解决方案中的一个或多个项目由于以下原因未能加载 项目文件或网站已移动或重新命名,或者不在您的计算机上” 的解决办法...
- Java编码约定被认为是有害的
- 电脑文件夹加密软件_上海靠谱电脑资料加密软件解决方案
- 结构力学求解器_结构力学学好这些内容对施工很关键,你都学懂了吗?
- 终于把tomcat给搞定了
- 安全产品的部署方式及位置
- java 替换 ppt内容_Java 替换PPT中的指定文本内容 详细始末
- Mac 开发工具汇总
- IP地址、网络地址、网关的作用
- 时区 夏令时造成的问题
- linux驱动更新软件下载,NVIDIA英伟达显卡驱动程序更新下载(32/64位) v384.90 Linux版...
- 线段树1——神奇的数据结构
- Ozone数据探查服务Recon的启用
- PhpSpreadsheet读取excel
- 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明
- 光耦p621引脚图_常见光电耦合器(光耦)的内部结构及引脚图
- C语言数组初始化骚操作
- 又一个悲伤的事件!8.25浙江美女滴滴遇害!一而再,难道还要再而三吗?
- python代码编译出现SyntaxError: Non-ASCII character ‘\xe8‘ in file问题
- 微信dat文件用什么软件打开方式_dat文件怎么打开(微信dat文件用什么软件打开)...
热门文章
- linux之多任务的同步与互斥
- busybox怎么安装
- matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
- c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...
- 人类历史上最伟大的物理学家
- 你的输入法都暴露了些啥?
- 如何优雅的当海王……
- 你这么爱听歌,一定活得很难过吧 | 今日最佳
- 程序员为啥365天都背电脑包?这答案我服!
- 学习 Python 编程的 19 个资源