各种JOIN的区别

简介: 各种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协议与远程主机通信。
481 2
ansible的安装和简单的块使用
PCIe锁定事务(Locked Transactions)介绍
PCIe锁定事务(Locked Transactions)介绍
1333 0
PCIe锁定事务(Locked Transactions)介绍
|
12月前
|
SQL 算法 关系型数据库
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
|
10月前
|
人工智能 机器人
超越基础问答:用RAG技术打造“有据可循”的智能助手
超越基础问答:用RAG技术打造“有据可循”的智能助手
557 99
|
存储 边缘计算 物联网
揭秘边缘计算:定义、优势、挑战与未来趋势
揭秘边缘计算:定义、优势、挑战与未来趋势
|
12月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
1062 2