
定义:只返回两个表中匹配的行,也就是两个表的"交集"。
语法:
SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列使用场景:当你只想获取有明确关联的数据时,比如"查询所有有订单的客户"。
示例:
假设我们有员工表和部门表,用INNER JOIN连接:
SELECT 员工表.姓名, 部门表.部门名称
FROM 员工表
INNER JOIN 部门表 ON 员工表.部门ID = 部门表.部门ID结果:只显示有匹配部门的员工,比如"张三在技术部"、"李四在销售部",但"王五没有部门"和"财务部没人"都不会出现。
💡 小贴士:INNER JOIN是最常用的JOIN类型,90%的查询都用它!
定义:返回左表的所有行,右表无匹配时填充NULL。
语法:
SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.关联列 = 表2.关联列使用场景:当你想保留左表所有数据,即使右表没有匹配时也显示,比如"显示所有用户及其订单,没有订单的用户也显示"。
示例:
SELECT 用户表.姓名, 订单表.订单ID
FROM 用户表
LEFT JOIN 订单表 ON 用户表.用户ID = 订单表.用户ID结果:所有用户都会显示,没有订单的用户订单ID会是NULL,比如"张三在技术部"、"李四在销售部"、"王五没有部门"。
💡 为什么叫"左"连接?因为左表是"主表",数据不会丢失,右表的缺失用NULL表示。
定义:返回右表的所有行,左表无匹配时填充NULL。
语法:
SELECT 列名
FROM 表1
RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列使用场景:和LEFT JOIN相反,当你想保留右表所有数据,比如"显示所有订单及关联用户,没有用户的订单也显示"。
示例:
SELECT 用户表.姓名, 订单表.订单ID
FROM 用户表
RIGHT JOIN 订单表 ON 用户表.用户ID = 订单表.用户ID结果:所有订单都会显示,没有用户的订单会显示NULL,比如"张三在技术部"、"李四在销售部"、"财务部没人"。
💡 实际应用中,RIGHT JOIN用得比较少,因为LEFT JOIN可以实现相同效果,只是表顺序调换一下。
定义:返回两个表的所有行,无匹配部分填充NULL。
语法:
SELECT 列名
FROM 表1
FULL OUTER JOIN 表2 ON 表1.关联列 = 表2.关联列使用场景:当你需要合并两个表的所有数据,无论是否匹配,比如"统计所有用户和所有订单,无论是否关联"。
示例:
SELECT 用户表.姓名, 订单表.订单ID
FROM 用户表
FULL OUTER JOIN 订单表 ON 用户表.用户ID = 订单表.用户ID结果:所有用户和所有订单都显示,没有匹配的用NULL填充,比如"张三在技术部"、"李四在销售部"、"王五没有部门"、"财务部没人"。
💡 这个JOIN类型在实际项目中用得不多,因为很多数据库不支持,或者用LEFT JOIN + RIGHT JOIN UNION来实现。
JOIN类型 | 左表 | 右表 | 无匹配时 |
|---|---|---|---|
INNER JOIN | 只显示匹配 | 只显示匹配 | 不显示 |
LEFT JOIN | 显示所有 | 匹配的显示 | 右表为NULL |
RIGHT JOIN | 匹配的显示 | 显示所有 | 左表为NULL |
FULL OUTER JOIN | 显示所有 | 显示所有 | 无匹配的为NULL |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。