一、什么是多表连接
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.自身连接