Oracle总结03多表-6外连接

实例:按部门统计员工人数,要求显示:部门号,部门名称,人数

分析:涉及到2张表,部门表(部门号,部门名称),员工表(员工表);

错误语句:

select d.deptno,d.dname,count(e.empno)

from emp e,dept d

where e.deptno = d.deptno

group by d.deptno,d.dname;

注意:d.deptno,d.dname不在组函数count(e.empno)参数中,所以要加上group by 子句

Oracle总结03多表-6外连接_第1张图片

验证部门信息:

Oracle总结03多表-6外连接_第2张图片

发现DEPTNO为40的部门信息没显示,因为emp员工表中deptno为40的员工不存在。

查询发现没有数据。

所以where的条件需要修改

外连接:通过外连接,把对于连接条件不成立的记录,任然包含在最后的结果中。

左外连接:当连接条件不成立的时候,等号左边的表任然被包含。

右外连接:当连接条件不成立的时候,等号右边的表任然被包含。

where e.deptno(+) = d.deptno 因为本实例需要显示的是部门deptno表中的部门号和部门名称右外连接,把+号放在等号左边。

select d.deptno,d.dname,count(e.empno)

from emp e,dept d

where e.deptno(+) = d.deptno

group by d.deptno,d.dname;

这里要注意等号的左右位置。

用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在左表,右表就是全部显示,所以是右连接

最终结果:

Oracle总结03多表-6外连接_第3张图片

你可能感兴趣的:(数据库)