Oracle数据库学习教程

多表查询

1.5 学习Oracle-多表查询_外链

仔细看上面的图片

多表操作,首先会生成笛卡尔全集表.多表查询就是按照给定条件(连接条件),从笛卡尔全集中选出正确的结果

根据连接条件的不同可以划分为:​​等值链接、不等值链接、外链接、自连接​

1.等值连接

emp表: 记录了员工姓名,部门ID等,没有部门名

1.5 学习Oracle-多表查询_多表查询_02

dept表: 记录了部门ID,部门名等

1.5 学习Oracle-多表查询_外链_03

多表: 现在需要,员工名和部门名,很明显需要两张表的信息

1.5 学习Oracle-多表查询_多表查询_04

所以需要添加where选出真正需要的数据

1.5 学习Oracle-多表查询_等值连接_05

如果有N张表,至少需要N-1个条件.

2.不等值连接

工资级别表

1.5 学习Oracle-多表查询_多表_06

下面是不等值连接(使用between..and更合适)

1.5 学习Oracle-多表查询_数据_07

3.外连接

统计各部门人数:

1.5 学习Oracle-多表查询_外链_08

也就是包含一些不符合where条件的数据

左外链接:当 where e.deptno=d.deptno 不成立的时候,=左边所表示的信息,仍然被包含。

  • 写法:与叫法相反:where e.deptno=d.deptno(+)

右外链接:当 where e.deptno=d.deptno 不成立的时候,=右边所表示的信息,仍然被包含。

  • 写法:依然与叫法相反:where e.deptno(+)=d.deptno

1.5 学习Oracle-多表查询_多表_09

4.自连接

核心,通过表的别名,将同一张表视为多张表。

​select e.ename || ' 的老板是 ' || nvl(b.ename, '他自己' )from emp e, emp b where e.mgr=b.empno(+)​

1.5 学习Oracle-多表查询_等值连接_10


作者:Ovins