子查询概念

什么是子查询?子查询都可以出现在哪里?

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分页相关推荐

  1. SQL 基础-- 子查询

    --========================= --SQL 基础--> 子查询 --========================= /* 一.子查询 子查询就是位于SELECT.UP ...

  2. mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...

  3. mysql子查询中不能使用LIMIT

    mysql子查询中不能使用LIMIT /* 今天遇到个问题,如下: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/ ...

  4. SQL Server子查询

    SQL Server子查询 一. SQL Server子查询. 子查询是一个嵌套在另一个语句(如:[SELECT],[INSERT],[UPDATE]或[DELETE])语句或其他子查询中的查询.任何 ...

  5. mysql用in报错_Mysql子查询IN中使用LIMIT

    学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...

  6. sql 标量子查询_SQL Server 2017:标量子查询简化

    sql 标量子查询 Nowadays a lot of developers use Object-Relational Mapping (ORM) frameworks. ORM is a prog ...

  7. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

    1.    oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的 ...

  8. MySQL连接查询,子查询,union(合并),分页

    连接查询涉及到主键,外键知识,后面讲 建立两种简单的表作为例子:  mysql> select * from student; +----+------+-------+ | id | name ...

  9. Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...

最新文章

  1. “在解决方案中的一个或多个项目由于以下原因未能加载 项目文件或网站已移动或重新命名,或者不在您的计算机上” 的解决办法...
  2. Java编码约定被认为是有害的
  3. 电脑文件夹加密软件_上海靠谱电脑资料加密软件解决方案
  4. 结构力学求解器_结构力学学好这些内容对施工很关键,你都学懂了吗?
  5. 终于把tomcat给搞定了
  6. 安全产品的部署方式及位置
  7. java 替换 ppt内容_Java 替换PPT中的指定文本内容 详细始末
  8. Mac 开发工具汇总
  9. IP地址、网络地址、网关的作用
  10. 时区 夏令时造成的问题
  11. linux驱动更新软件下载,NVIDIA英伟达显卡驱动程序更新下载(32/64位) v384.90 Linux版...
  12. 线段树1——神奇的数据结构
  13. Ozone数据探查服务Recon的启用
  14. PhpSpreadsheet读取excel
  15. 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明
  16. 光耦p621引脚图_常见光电耦合器(光耦)的内部结构及引脚图
  17. C语言数组初始化骚操作
  18. 又一个悲伤的事件!8.25浙江美女滴滴遇害!一而再,难道还要再而三吗?
  19. python代码编译出现SyntaxError: Non-ASCII character ‘\xe8‘ in file问题
  20. 微信dat文件用什么软件打开方式_dat文件怎么打开(微信dat文件用什么软件打开)...

热门文章

  1. linux之多任务的同步与互斥
  2. busybox怎么安装
  3. matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
  4. c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...
  5. 人类历史上最伟大的物理学家
  6. 你的输入法都暴露了些啥?
  7. 如何优雅的当海王……
  8. 你这么爱听歌,一定活得很难过吧 | 今日最佳
  9. 程序员为啥365天都背电脑包?这答案我服!
  10. 学习 Python 编程的 19 个资源