Oracle多表连接查询Join

Posted Flyyingzi77

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Oracle多表连接查询Join的主要内容,如果未能解决你的问题,请参考以下文章

数据库(学习整理)Oracle多表查询,三种join连接

oracle 多表连接查询

Oracle 多表查询

oracle(sql)基础篇系列——多表连接查询子查询视图

Access的Left join多表联合查询

多表关联查询语法?