高级查询
- 关联查询(连接查询)
- 查询多张表或者结果集
- 内连接:
- 语法:
- select * from emp,dept where emp.deptno = dept.deptno;
- select * from emp inner join dept on emp.deptno = dept.deptno;
- select * from emp inner join dept using(deptno);
- 特点:
- 多张关联表共有的数据记录才能出现在结果集。
- 内连接结果与连接顺序无关。
- 语法:
- 外连接:
- 特点
- 与连接顺序有关
- 有主从表之分,依次遍历主表中的每条记录与关联表记录进行匹配,如果匹配到则关联并展示到结果集,否则以null填充。
- 左外连接: left [outer] join ... on...
- 右外连接: right [outer] join ... on...
- 特点
- 自然连接(自然连接都是等值连接,等值连接不一定是自然连接)
- select * from emp NATURAL join dept;
- 子查询(嵌套查询)
- 将一个查询结果作为另一个查询的条件或者组成继续进行检索
- 分类
- 单行子查询:子查询返回结果是一条记录
- select * from dept where deptno = (select deptno from emp where empno =7788);
- 多行子查询:子查询返回多条记录
- select * from dept where deptno in (select distinct deptno from emp where sal > 2000);
- any/all
- =any: 相当于in >any:大于最小值 <any:小于最大值
- >all:大于最大值 <all:小于最小值
- in和exists的区别
- in先执行子查询,exists先执行主查询
- in需要关注子查询返回值的字段信息;exists不需要关系返回字段
- exists将主查询的记录依次在子查询匹配,如果匹配返回true并展示
- 单行子查询:子查询返回结果是一条记录
- 联合查询(合并结果集)
- union:联合结果集并去重
- union all:不去重