Oracle 多表查询和分组统计查询
数据表的多表查询
内连接(等值连接)
所有满足条件的数据都会被显示出来
只有相等的条件满足之后,才会显示;如果为空或不等,则不显示
insert into emp(empno,ename,job) values(8888,'张三','cleck');
select e.empno,e,ename,e.job,d.deptno,d.loc from emp e,dept d where e.deptno=d.deptno
这里只显示14行,新增加的张三不会显示,因为8888与dept表中的数据不等
###外连接
控制坐表和外表的数据是否全部显示
- 左外连接:字段 = 字段(+)
select e.empno,e.ename,e.job,d.deptno,d.loc from emp e,dept d where e.deptno=d.deptno(+);
- 右外连接:字段(+)= 字段
select e.empno,e.ename,e.job,d.deptno,d.loc from emp e,dept d where e.deptno(+)=d.deptno;
- 全外连接:几乎不用
数据的集合操作
- UNION:重复数据不显示
- UNIONALL:重复数据显示
- INTERSECT:返回相同部分
- MINUS:由前一个查询,减去第二个查询,返回差集
##分组统计查询
###常见统计函数
- COUNT():统计个数
- COUNT(*):明确返回表中的数据个数,是最准确的
- COUNT(字段):不统计为null的数据个数
- COUNT(DISTINCT 字段):统计消除重复数据之后的数据个数
- MAX():返回最大值,日期或数字
- MIN():返回最小资,日期或数字
- SUM():返回和,数字字段
- AVG():返回平均子,数字字段
分组统计查询
GROUP BY 分组字段,分组字段…
有重复数据才可以分组
三个限制:
- 没有使用group by 语句的时候,select后面,只能出现统计函数,不能出现字段
- 在使用了group by 之后,select 后面出现的字段,只能是group by 用来分组的字段
- 统计函数嵌套之后,select后面不能出现任何字段