首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL JOIN类型详解

SQL JOIN类型详解

原创
作者头像
织幻妖
发布2025-12-08 17:02:14
发布2025-12-08 17:02:14
4440
举报

🌟 1. INNER JOIN(内连接)

定义:只返回两个表中匹配的行,也就是两个表的"交集"。

语法

代码语言:sql
复制
SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列

使用场景:当你只想获取有明确关联的数据时,比如"查询所有有订单的客户"。

示例

假设我们有员工表和部门表,用INNER JOIN连接:

代码语言:sql
复制
SELECT 员工表.姓名, 部门表.部门名称
FROM 员工表
INNER JOIN 部门表 ON 员工表.部门ID = 部门表.部门ID

结果:只显示有匹配部门的员工,比如"张三在技术部"、"李四在销售部",但"王五没有部门"和"财务部没人"都不会出现。

💡 小贴士:INNER JOIN是最常用的JOIN类型,90%的查询都用它!

🌟 2. LEFT JOIN(左连接)

定义:返回左表的所有行,右表无匹配时填充NULL。

语法

代码语言:sql
复制
SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.关联列 = 表2.关联列

使用场景:当你想保留左表所有数据,即使右表没有匹配时也显示,比如"显示所有用户及其订单,没有订单的用户也显示"。

示例

代码语言:sql
复制
SELECT 用户表.姓名, 订单表.订单ID
FROM 用户表
LEFT JOIN 订单表 ON 用户表.用户ID = 订单表.用户ID

结果:所有用户都会显示,没有订单的用户订单ID会是NULL,比如"张三在技术部"、"李四在销售部"、"王五没有部门"。

💡 为什么叫"左"连接?因为左表是"主表",数据不会丢失,右表的缺失用NULL表示。

🌟 3. RIGHT JOIN(右连接)

定义:返回右表的所有行,左表无匹配时填充NULL。

语法

代码语言:sql
复制
SELECT 列名
FROM 表1
RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列

使用场景:和LEFT JOIN相反,当你想保留右表所有数据,比如"显示所有订单及关联用户,没有用户的订单也显示"。

示例

代码语言:sql
复制
SELECT 用户表.姓名, 订单表.订单ID
FROM 用户表
RIGHT JOIN 订单表 ON 用户表.用户ID = 订单表.用户ID

结果:所有订单都会显示,没有用户的订单会显示NULL,比如"张三在技术部"、"李四在销售部"、"财务部没人"。

💡 实际应用中,RIGHT JOIN用得比较少,因为LEFT JOIN可以实现相同效果,只是表顺序调换一下。

🌟 4. FULL OUTER JOIN(全外连接)

定义:返回两个表的所有行,无匹配部分填充NULL。

语法

代码语言:sql
复制
SELECT 列名
FROM 表1
FULL OUTER JOIN 表2 ON 表1.关联列 = 表2.关联列

使用场景:当你需要合并两个表的所有数据,无论是否匹配,比如"统计所有用户和所有订单,无论是否关联"。

示例

代码语言:sql
复制
SELECT 用户表.姓名, 订单表.订单ID
FROM 用户表
FULL OUTER JOIN 订单表 ON 用户表.用户ID = 订单表.用户ID

结果:所有用户和所有订单都显示,没有匹配的用NULL填充,比如"张三在技术部"、"李四在销售部"、"王五没有部门"、"财务部没人"。

💡 这个JOIN类型在实际项目中用得不多,因为很多数据库不支持,或者用LEFT JOIN + RIGHT JOIN UNION来实现。

📊 一图看懂四种JOIN的区别

JOIN类型

左表

右表

无匹配时

INNER JOIN

只显示匹配

只显示匹配

不显示

LEFT JOIN

显示所有

匹配的显示

右表为NULL

RIGHT JOIN

匹配的显示

显示所有

左表为NULL

FULL OUTER JOIN

显示所有

显示所有

无匹配的为NULL

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🌟 1. INNER JOIN(内连接)
  • 🌟 2. LEFT JOIN(左连接)
  • 🌟 3. RIGHT JOIN(右连接)
  • 🌟 4. FULL OUTER JOIN(全外连接)
  • 📊 一图看懂四种JOIN的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档