Oracle多表连接查询Join
Left join 和right join 为外部连接,inner join 为内部连接
Left join 左侧为主表,右侧为从表,主表会显示出所有数据,从表则只显示关联到的数据,不满足连接条件 的行数据用NULL补全
right join 右侧为主表,左侧为从表,主表会显示出所有数据,从表则只显示关联到的数据,不满足连接条件 的行数据用NULL补全
inner join 则只显示2张表关联条件相匹配的数据
(1)dept(部门表)
(2)emp(雇员表)
1、inner join
语法:select a.x from a inner join b on a.id=b.id;
inner 可以省略.
实例:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a join scott.dept b on a.deptno = b.deptno ;
结果:
3、left outer join
查询结果除了返回包含连接条件的行,还包含a表中不满足条件的行。其中不满足的条件行中B表的字段将被置空
语法: select a.x form a left outer join a on a.id=b.id outer可以省略
实例:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on a.deptno = b.deptno
结果:
当查询中出现过滤条件时:
1)当连接条件后面有where条件时:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on a.deptno = b.deptno where b.dname like 'SALES'
解释:先根据连接条件a.deptno = b.deptno查询,再对查询结果按过滤条件查询。
结果:
2)当连接条件后面有and条件时:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on (a.deptno = b.deptno and b.dname like 'SALES')
解释:先对b表按过滤条件查询,再对结果执行左连接查询。
结果:
3 、right outer join
查询结果除了返回包含连接条件的行,还包含右表(b)中不满足连接条件的行,
其中不满足连接条件的行中a表的字段值将被置为空。
语法:select a.x from a right join a on a.id=b.id
outer 可以省略.
参考文档:https://www.cnblogs.com/dog2016/p/7402019.html