首页 > oracle知识 > oracle_SQL >

Oracle多表连接查询Join

作者: 初见博客 分类: oracle_SQL 发布时间: 2021-12-23 10:12

Left join 和right join 为外部连接,inner join 为内部连接

Left join 左侧为主表,右侧为从表,主表会显示出所有数据,从表则只显示关联到的数据,不满足连接条件 的行数据用NULL补全

right join 右侧为主表,左侧为从表,主表会显示出所有数据,从表则只显示关联到的数据,不满足连接条件 的行数据用NULL补全

inner join 则只显示2张表关联条件相匹配的数据

(1)dept(部门表)

381423-20190306140542082-586448888

(2)emp(雇员表)

381423-20190306140511843-1716606120

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 ;

结果:

381423-20190306140703958-1316679302

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

结果:

1036339-20170820230357303-1183944960

当查询中出现过滤条件时:

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查询,再对查询结果按过滤条件查询。

结果:

1036339-20170820231831428-1524767706

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表按过滤条件查询,再对结果执行左连接查询。

结果:

1036339-20170820231932318-1910805255

 

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注