各种JOIN的区别

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 各种JOIN的区别

1. Inner Join(Join , 内连接)

功能:

返回两个表中都有的记录信息

也称之为自然连接

inner可以省略,inner join = join

图解:

语法:

SELECT columns
FROM Table_A A
INNER JOIN Table_B B
ON A.column = B.column;


结果:

仅包含两个表中匹配的行。

支持:

JoinType Mysql Oracle Hive
Inner Join

2. Left Outer Join(Left join , 左外连接)

功能:

返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配,则结果中的右表列显示为 NULL。

Outer可以省略,Left Outer join = Left join

图解:

语法:

SELECT columns
FROM Table_A A
LEFT JOIN Table_B B
ON A.column = B.column;

结果:

包含左表的所有行,如果在右表中没有匹配,则相应的右表列为 NULL。

支持:

JoinType Mysql Oracle Hive
Left Join


变种功能

返回左表中那些没有在右表查找到的对应行。

图解

语法:

SELECT columns
FROM Table_A A
LEFT JOIN Table_B B
ON A.column = B.column
WHERE B.column IS NULL;

结果

仅返回A表中不包含B表的记录

举例

假设 Table A 和 Table B中有以下数据:

Table A

PK Value
1 A1
2 A2
3 A3
4 A4
5 A5

Table B

PK Value
2 B2
3 B3
4 B4
6 B6
7 B7

通过

A LEFT JOIN B

ON A.PK = B.PK WHERE B.PK IS NULL

返回结果

A.PK B.PK A.Value B.Value
1 NULL A1 NULL
5 NULL A5 NULL

3. Right Outer Join(Left join , 左外连接)

功能:

返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配,则结果中的左表列显示为 NULL。

Outer可以省略,Right Outer join = Right join

图解:

语法:

SELECT columns
FROM Table_A A
RIGHT JOIN Table_B B
ON A.column = B.column;

结果:

包含右表的所有行,如果在左表中没有匹配,则相应的左表列为 NULL。

支持:

JoinType Mysql Oracle Hive
Right Join

变种功能

返回右表中那些没有在左表查找到的对应行。

图解

语法:

SELECT columns
FROM Table_A A
RIGHT JOIN Table_B B
ON A.column = B.column
WHERE A.column IS NULL;

结果

仅返回B表中不包含A表的记录

举例

假设 Table A 和 Table B中有以下数据:

Table A

PK Value
1 A1
2 A2
3 A3
4 A4
5 A5

Table B

PK Value
2 B2
3 B3
4 B4
6 B6
7 B7

通过

A RIGHT JOIN B

ON A.PK = B.PK WHERE A.PK IS NULL

返回结果

A.PK B.PK A.Value B.Value
NULL 6 NULL B6
NULL 7 NULL B7

4. Full Outer Join(Full Join , 全连接)

功能:

返回左表和右表中的所有记录。如果没有匹配,则对应表的列显示为 NULL。

Outer可以省略,Full Outer Join = Full Join

图解:

语法:

SELECT columns
FROM Table_A A
FULL JOIN Table_B B
ON A.column = B.column;

结果:

包含左表和右表中的所有行。未匹配的行在对应列中显示为 NULL。

支持:

JoinType Mysql Oracle Hive
Full Join ×

变种功能

返回左表和右表中不存在交集的记录。

图解

语法:

SELECT columns
FROM Table_A A
FULL JOIN Table_B B
ON A.column = B.column
WHERE A.column IS NULL OR B.column

结果

仅返回A表和B表的差集

举例

假设 Table A 和 Table B中有以下数据:

Table A

PK Value
1 A1
2 A2
3 A3
4 A4
5 A5

Table B

PK Value
2 B2
3 B3
4 B4
6 B6
7 B7

通过

A FULL JOIN B

ON A.PK = B.PK WHERE A.PK IS NULL OR B.PK IS NULL

返回结果

A.PK B.PK A.Value B.Value
1 NULL A1 NULL
NULL 6 NULL B6
NULL 7 NULL B7

5.Cross Join( 交叉连接 )

功能:

返回两个表的笛卡尔积,即每个左表的行都与右表的每一行结合。

图解:

语法:

SELECT columns
FROM Table_A A
CROSS JOIN Table_B B;

结果:

包含两个表的所有可能行组合。

支持:

JoinType Mysql Oracle Hive
Cross Join

6. Self Join(自连接)

功能:

将表与自身连接。通常用于表中记录的比较。

图解:

语法:

SELECT A.column, B.column
FROM Table A A
JOIN Table A B
ON A.column = B.column;

结果:

返回表中满足条件的行对。

支持:

JoinType Mysql Oracle Hive
Self Join

7.Left Semi Join

功能:

返回左表中所有在右表中有匹配的记录。只返回左表的列。

图解:

语法:

SELECT columns
FROM Table_A A
LEFT SEMI JOIN Table_B B
ON A.column = B.column;

结果:

结果:只包含左表中有匹配的行。

支持:

JoinType Mysql Oracle Hive
Left Semi Join × ×

8.Anti Join(Anti Join,反连接)

功能:

返回左表中所有在右表中没有匹配的记录。

图解:

语法:

(通常通过 LEFT JOIN + WHERE 或 NOT EXISTS 实现)
SELECT columns
FROM Table_A A
LEFT JOIN Table_B B
ON A.column = B.column
WHERE B.column IS NULL;

结果:

只包含左表中没有匹配的行。

支持:

JoinType Mysql Oracle Hive
Anti Join × ×

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
JOIN的用法
【8月更文挑战第2天】JOIN的用法
50 4
|
4月前
|
SQL Oracle 关系型数据库
Oracle查询优化-left join、right join、inner join、full join和逗号的区别
【1月更文挑战第5天】【1月更文挑战第13篇】实际查询时,多表联查是常规操作,但是连接方式有多种。
253 0
|
关系型数据库 MySQL
inner join 、left join、right join,优先使用inner join
inner join 、left join、right join,优先使用inner join
|
SQL 数据库
JOIN用法
在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用SQL语句中的连接(JOIN),在两个或多个数据表中查询数据。
JOIN用法
|
关系型数据库 MySQL
八、inner join 、left join、right join,优先使用inner join
八、inner join 、left join、right join,优先使用inner join
281 0
|
SQL 数据库
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
127 0
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
|
Java
【多线程:join】join再理解
【多线程:join】join再理解
145 0
|
开发者 Python
Join 方法 | 学习笔记
快速学习 Join 方法
|
SQL 关系型数据库 MySQL
Join,left join,right join(1)--连接原理(三十九)
Join,left join,right join(1)--连接原理(三十九)
|
SQL 语音技术 数据库
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
147 0
SQL基础【十五、join、Inner join、Left join、Right join、Full join】