各种JOIN的区别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 各种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 × ×

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
2
2
0
42
分享
相关文章
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
90 2
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
125 1
JOIN的用法
【8月更文挑战第2天】JOIN的用法
187 4
JOIN用法
在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用SQL语句中的连接(JOIN),在两个或多个数据表中查询数据。
JOIN用法
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
174 0
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
八、inner join 、left join、right join,优先使用inner join
八、inner join 、left join、right join,优先使用inner join
582 0
【多线程:join】join再理解
【多线程:join】join再理解
168 0
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
199 0
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等