【MySQL】查询语句之inner、left、right、full join 的区别

前言:

INNER JOIN 和 OUTER JOIN 是SQL中常用的两种连接方式,用于从两表活多表中提取相关的数据。两者区别主要在于返回的 结果集 如何处理 匹配 与 不匹配 的行。

目录

[1、INNER JOIN](#1、INNER JOIN)

[2、OUTER JOIN](#2、OUTER JOIN)

3、总结


1、INNER JOIN

称为内连接 ,只有查询的几张表中的列值相等时,才会返回这些行数据。如果某行其中一个表没有对应的匹配,那么则不会返回改行数据。

举个例子:有两张表,分别是a、b表。

a表数据 b表数据

SQL语句:

sql 复制代码
SELECT a.`name`, b.age
FROM a
INNER JOIN b ON a.id = b.id;

执行结果:

在这个例子中,id=3 的sr没有匹配的age,因此不会出现在结果中。

2、OUTER JOIN

outer join可以细分为三种:left join、right join、full join

①left join: 返回左表 (这是我们的第一个表)的所有行,即使右表(第二个表)中没有匹配的行,依旧以显示所查询到的字段,只不过输出的结果为null。如下:

SQL语句:

sql 复制代码
SELECT a.name, b.age
FROM a
LEFT JOIN b ON a.id= b.id;

执行结果:


②right join: 返回右表 (第二个表)的所有行,即使左表(第一个表)中没有匹配的行,依旧可以显示所查询到的字段,输出也是为null。如下:

SQL语句:

sql 复制代码
SELECT a.name, b.age
FROM a
RIGHT JOIN b ON a.id = b.id;

执行结果:


**③full join:**返回两个表(或多个表)中的所有行,包括没有匹配上的行,在另一张表显示为null。如下:

*SQL语句:*因为MySQL不支持 full join,我们可以结合left join 与 right join 来模拟 full join(像PostgreSQL、SQL Server、Oracle、IBM Db2 都支持 full join)

sql 复制代码
SELECT
	* 
FROM
	a
	LEFT JOIN b ON a.id = b.id UNION ALL
SELECT
	* 
FROM
	a
	RIGHT JOIN b ON a.id = b.id 
WHERE
	a.id IS NULL;

执行结果:

3、总结

1、inner join:仅返回两表(多表)匹配的行。

2、left join:返回左表所有行与右表匹配行,右表未匹配上显示null。

3、right join:返回右表所有行与左表匹配行,左表未匹配上显示null。

4、null join:返回两表(多表)所有行,无论是否有匹配的行,未匹配的都像是为null。

相关推荐
Tongpao_SSDHDD25 分钟前
希捷酷鹰ST6000VX008实测解析:中小安防监控高性价比存储方案
大数据·数据库·人工智能
蓝鸟197439 分钟前
Oracle超大DMP备份文件瘦身、日志精简、磁盘空间优化实战方案日志
数据库·oracle·数据库运维·生产运维实战·oracle避坑·磁盘空间优化·oracle日志清理
梦想的旅途21 小时前
企业微信外部群主动调用:RPA 接口与官方 API 的技术边界
网络·mysql·自动化·企业微信·rpa
金融支付架构实战指南1 小时前
CQRS + 命令模式 + 事件驱动 + 数据库持久化
数据库·ddd·命令模式·领域驱动模型
sevenll071 小时前
DocKit agentic MongoDB GUI 客户端 - 用自然语言和你的数据对话
数据库·mongodb·nosql·agent·桌面客户端
团象科技1 小时前
从一线实操案例拆解不同出海团队落地海外VPS运维独立站的路径细节
大数据·数据库·人工智能
小马爱打代码2 小时前
框架 - 组件 - 中间件:生产级参数配置指引
数据库·中间件
asdfg12589632 小时前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc
点灯小铭2 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
小陈phd2 小时前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习