mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

时间:2024-03-17 11:49:09

首先我们先从自然连接和等值连接说起:

R
A B C

1

2 3
2 1 4
3 4 5
4 6 7
C
A B C
2 1 4
4 6 7
6 8 9

一、自然连接,要有相同的属性列才能进行,即等值连接之后要去除相同的属性列,不需要人为指定连接字段,自然会自动找同名字段进行连接,会删除连接后的重复列。 关键字 natural

两张表具有相同属性列

CREATE TABLE R (A INT, B INT, C INT);
CREATE TABLE C (A INT, B INT, C INT);
INSERT INTO R values ('1','2','3'),('2','1','4'),('3','4','5'),('4','6','7');
INSERT INTO C values ('2','1','4'),('4','6','7'),('6','8','9');

select * from R natural join C

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

两张表具有部分相同的属性列

create table p (

   sysid serial  , 

   pid varchar(20) primary key, 

   pname varchar(50) 

)

insert into p (pid, pname) values 

('P001', '不锈钢F201'), 

('P002', '不锈钢F202'), 

('P004', '不锈钢F202') ; 

create table s (

sysid serial,

thedate varchar(10),

pid varchar(20),

thequantity integer

)

insert into s (thedate,pid,thequantity) values 

('2012/08/01', 'P001', 100),

('2012/08/02', 'P002', 200),

('2012/08/03', 'P003', 300) ; 

select * from p natural join s

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

可以清晰的发现使用自然连接,两个表必须有相同的属性列,而且不需要指定连接字段,相同的属性名合并。

二、全连接返回左右数据表的所有行.关键字 full join

全连接类似做了一个笛卡尔积(不会百度去)形成新的表,新表行等于两个表行的乘积,列等于两个表列的和,不需要人为指定连接字段

以上面表为例

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

三、内连接

内连接和外连接,一般都需要和指定条件一起联合使用,但是不是必须的,mysql一般默认使用内连接, 关键字:inner,类似于以共同的相同属性值将两张表连接一起,属于水平拼接,不合并相同的属性名。

SELECT * FROM r INNER JOIN c ON r.A=c.A

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

SELECT * FROM p INNER JOIN s ON p.pid = s.pid

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

四、外部连接

包括左连接和右连接,关键词是:outer, 必须和 left 和 right 联合同时使用,但是如果有了left和right 关键字,outer可以省略。也就是说left/right outer jon 和left/right join 是一样的效果。但是左连接和右连接主要区别在于以哪个表为主

(一)左连接

SELECT * FROM p left JOIN s ON p.pid = s.pid

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

(二)右连接

mysql数据库中内连接、外连接、左连接、右连接、全连接、自然连接区别

重点看 left/right join的左右两边表,切记不要以为是on后边的条件左右。