Oracle知识点(五)--多表连接

时间:2025-02-06 10:46:54

一、什么是多表连接

1.定义
在多个表中通过一定的连接条件,使表之间发生关联,在多张表中获取数据。

2.语法

select A.column, B.column
from A, B
where A.column1 = B.column2;

二、为什么需要多表连接

三、笛卡尔积

1.定义
第一张表中的所有行和第二张表中的所有行都发生连接。

2.产生条件
①连接条件被省略
②连接条件无效

3.后果

4.解决方法
在where子句中包含一个有效的连接条件。

四、如何多表连接

1.写法
①分析要查询的数据来自哪些表,构成【from】子句。
②分析【关联关系】,存在直接关联关系的,使用" = "直接关联。不存在直接关联关系的,通过另外一个中间表关联。注意要在from子句中添加关联表。
③在【where】子句中补充表之间的关联关系,通常n个表连接需要n-1个关联关系。

--两张表连接
where A.cc = B.cc;
--三张表连接
--需要连接A、E表,A表与B表有直接关联,B表和E表有直接关联
where A.c1 = B.c1 and B.c2 = E.c2;

2.连接类型

按连接条件 按其他连接方法
等值连接 外部链接
非等值连接 内部连接

前提:连接的表的列名和数据相同。

3.等值连接

①只有两张表需要关联时。
例:设A表中有name(姓名)和id(编号)列,B表中有id(编号)和location(家庭地址)列,查询所有人的编号、姓名和家庭地址信息。

select A.name, A.id, B.location 
from A, B
where A.id = B.id;

②当出现三张表及以上时,需要多添加一个表之间的关联条件。
例:设A表中有name(姓名)和id(编号)列,B表中有id(编号)和location(家庭地址)列,C表中有class(班级)和location(家庭地址)列,查询所有人的编号、姓名、班级和家庭地址信息。

select A.name, A.id, B.location, C.class
from A, B, C
where A.id = B.id and B.location = C.location;

4.非等值连接

5.外部链接
在多表连接时,可以使用外部连接查看哪些数据按照连接条件没有被匹配上。
外部连接的符号为(+)。

6.自身连接