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

posted @ 2019-03-06 14:21  Flyyingzi77  阅读(5515)  评论(0编辑  收藏  举报