天涯论坛

 找回密码
 立即注册
搜索
查看: 55|回复: 2

MySQL各样连接详解(自然连接,内连接,外连接的区别join)

[复制链接]

2835

主题

316

回帖

9191万

积分

论坛元老

Rank: 8Rank: 8

积分
91919712
发表于 2024-8-4 12:05:08 | 显示全部楼层 |阅读模式

在MySQL中,多表连接的语法格式如下:

SELECT <查找列表>FROM <表名1> [连接类型] JOIN <表名2> ON <连接要求>WHERE <查找要求>

其中连接类型有四种:

内连接(inner join)

自然连接(nature join)

交叉连接(cross join)

外连接(outer join)

多表连接常常经过表之间的理学外键(规律外键)进行相关查找

接下来就分别介绍一下这几个连接的详细用法和区别。

表数据准备

table1:

CREATE TABLE `table1`(`a` VARCHAR(20),`b` VARCHAR(20) NOT NULL DEFAULT ,`c` VARCHAR(20) NOT NULL DEFAULT ,`g` VARCHAR(20) NOT NULL DEFAULT ,PRIMARY KEY(`a`));insert into table1 values(1 , 2 , 3,3);insert into table1 values(2 , 3 , 4,4);insert into table1 values(5 , 6 , 7,4);insert into table1 values(8 , 9 , 10,5);

table2:

CREATE TABLE `table2`(`c` VARCHAR(20),`d` VARCHAR(20) NOT NULL DEFAULT ,`e` VARCHAR(20) NOT NULL DEFAULT ,`g` VARCHAR(20) NOT NULL DEFAULT );insert into table2 values(3 , 4 , 5,3);insert into table2 values(4 , 5 , 6,4);insert into table2 values(8 , 9 , 1,5);insert into table2 values(10 , 11 , 12,6);

内连接:

在数据库多表相关查找中,内连接是最常用的连接类型了,当然是默认的连接类型。能够在FROM子句中运用INNER JOIN(INNER关键字能够省略)来实现内连接

如上图inner join便是取A和B的交集

select * from table1 e inner join table2 f on e.c=f.c;

自然连接:

自然连接是一种特殊的等值连接,他需求两个关系表中进行比较的必要是相同的属性列,无须添加连接要求,并且在结果中消除重复的属性列

Select * from table1 natural join table2;

注:去除重复是按照表table1和表table2中都有的列组合起来(c+g)

交叉连接:

MySQL cross join是mysql中的一种连接方式,区别于内连接和外连接,针对cross join连接来讲,其实运用便是笛卡尔连接

Select * from table1 CROSS join table2;

外连接:

运用外连接时,以主表中每行的数据去匹配从表中的数据行,倘若符合连接要求则返回到结果集中;倘若找到匹配行,则主表的行仍然保存,并且返回到结果集中,相应的从表中的数据行被填上NULL值后返回到结果集中。

外连接有3种类型,分别是:

左外连接(LEFT OUTER JOIN)

右外连接(RIGHT OUTER JOIN)

全外连接(FULL OUTER JOIN)

然则,在MySQL中,是不支持全外连接的。这一点要重视

外链接-左外连接

左外连接的结果集中包括左表(JOIN关键字左边的表)中所有的记录,倘若右表中满足连接要求的记录,则结果集中右表中的相应行数据填充为NULL

select * from table1 e left join table2 f on e.c = f.c;

外链接-右外连接

右外连接的结果集中,包括满足连接要求的所有数据,另外包含右表(JOIN关键字右边的表)中不满足要求的数据,此时左表中的相应行数据为NULL

select * from table1 e right OUTER join table2 f on e.c = f.c;

外连接-全外连接

左表和右表都不做限制,所有的记录都表示,两表不足的地区用null 填充;便是

左外连接 = 左表所有记录 + 关联联结果

右外连接 = 右表所有记录 + 关联联结果

全外连接 = 左表所有记录 + 右表所有记录 + 关联联结果 = 左外连接 + 右外连接 - 关联联结果(即去重复)

select * from table1 e left OUTER jointable2 fon e.c = f.cunionselect * from table1 e right OUTER join table2 f on e.c = f.c;





上一篇:MySQL中内连接,外连接等的区别
下一篇:【62期】解释一下MySQL中内连接,外连接等的区别(MySQL面试第五弹)
回复

使用道具 举报

2986

主题

3万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569168
发表于 2024-10-20 02:48:05 | 显示全部楼层
感谢楼主的分享!我学到了很多。
回复

使用道具 举报

3048

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109040
发表于 2024-10-25 00:35:29 | 显示全部楼层
“BS”(鄙视的缩写)‌
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 05:10 , Processed in 0.105538 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.