各种JOIN的区别

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 各种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 × ×

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 存储 算法
Clickhouse中支持的Join类型
此为Join探索系列的第一篇
|
Kubernetes Shell 网络安全
ansible的安装和简单的块使用
Ansible是一种自动化工具,用于配置管理、应用程序部署和协调云部署。它是一个开源工具,使用Python编写,通过SSH协议与远程主机通信。
433 2
ansible的安装和简单的块使用
|
4天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
7280 17
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
PCIe锁定事务(Locked Transactions)介绍
PCIe锁定事务(Locked Transactions)介绍
1222 0
PCIe锁定事务(Locked Transactions)介绍
|
21天前
|
SQL 数据库
多表关联查询入门:LEFT JOIN、INNER JOIN一文搞懂|转行学DB第6天
本文通俗易懂地讲解了数据库多表查询的三种JOIN操作:INNER JOIN(内连接)只返回两表匹配的数据,适用于查询交集数据;LEFT JOIN(左连接)保留左表所有记录并匹配右表数据,适用于查询主表完整信息;RIGHT JOIN(右连接)则保留右表所有记录。
|
10月前
|
SQL 算法 关系型数据库
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
|
4月前
|
SQL 关系型数据库 MySQL
MySQL 复盘多表关联(1对1、1对多、多对多) 帮你打通任督二脉
本文详解数据库中1对1、1对多、多对多关系。通过用户与身份证、班级与学生、学生与课程等实例,结合SQL建表与查询语句,深入讲解外键、唯一约束、中间表等关键概念,帮助理解数据表间的关联机制及实际应用。
461 0
MySQL 复盘多表关联(1对1、1对多、多对多) 帮你打通任督二脉
|
存储 边缘计算 物联网
揭秘边缘计算:定义、优势、挑战与未来趋势
揭秘边缘计算:定义、优势、挑战与未来趋势
|
SQL 存储 大数据
Flink 基础详解:大数据处理的强大引擎
Apache Flink 是一个分布式流批一体化的开源平台,专为大规模数据处理设计。它支持实时流处理和批处理,具有高吞吐量、低延迟特性。Flink 提供统一的编程抽象,简化大数据应用开发,并在流处理方面表现卓越,广泛应用于实时监控、金融交易分析等场景。其架构包括 JobManager、TaskManager 和 Client,支持并行度、水位线、时间语义等基础属性。Flink 还提供了丰富的算子、状态管理和容错机制,如检查点和 Savepoint,确保作业的可靠性和一致性。此外,Flink 支持 SQL 查询和 CDC 功能,实现实时数据捕获与同步,广泛应用于数据仓库和实时数据分析领域。
10932 42