【后端面试总结】mysql的join,left join,right join,full join分别是什么意思

MySQL中的JOIN、LEFT JOIN、RIGHT JOIN与FULL JOIN介绍与对比

在MySQL数据库中,JOIN操作是一种强大的工具,用于将两个或多个表中的数据进行组合,以满足复杂的查询需求。本文将详细介绍MySQL中的四种主要JOIN类型:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN(虽然MySQL不直接支持FULL OUTER JOIN,但可以通过其他方式实现类似效果),并对它们进行对比分析。

一、INNER JOIN(内连接)

定义 :

INNER JOIN返回两个表中满足连接条件的匹配行。只有当两个表中都存在满足连接条件的行时,这些行才会出现在结果集中。

用途 :

INNER JOIN通常用于获取两个表中存在匹配关系的记录。例如,查询某个客户的所有订单信息时,可以使用INNER JOIN将客户表和订单表连接起来。

语法:

sql 复制代码
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.common_column = table2.common_column;

示例 :

假设有两个表:employees(员工表)和departments(部门表),通过department_id字段关联。要查询每个员工及其所在部门的信息,可以使用INNER JOIN:

sql 复制代码
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
二、LEFT JOIN(左连接)

定义 :

LEFT JOIN返回左表中的所有记录,即使右表中没有匹配的记录。对于右表中没有匹配的行,结果集中相应的列将包含NULL值。

用途 :

LEFT JOIN通常用于需要保留左表所有记录,并获取与之匹配的右表记录的场景。例如,查询所有客户及其订单信息(包括没有订单的客户)时,可以使用LEFT JOIN。

语法:

sql 复制代码
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column;

示例 :

继续使用上述的employees和departments表。要查询所有员工及其所在部门的信息(包括没有部门的员工),可以使用LEFT JOIN:

sql 复制代码
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
三、RIGHT JOIN(右连接)

定义 :

RIGHT JOIN返回右表中的所有记录,即使左表中没有匹配的记录。对于左表中没有匹配的行,结果集中相应的列将包含NULL值。

用途 :

RIGHT JOIN通常用于需要保留右表所有记录,并获取与之匹配的左表记录的场景。虽然在实际应用中,LEFT JOIN更为常见,但RIGHT JOIN在某些特定场景下也非常有用。

语法:

sql 复制代码
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;

示例 :

假设我们要查询所有部门及其员工信息(包括没有员工的部门),可以使用RIGHT JOIN(虽然这种场景在实际中可能较少见):

sql 复制代码
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
四、FULL OUTER JOIN(全外连接)

定义 :

FULL OUTER JOIN返回两个表中的所有记录,无论它们是否满足连接条件。如果某个表中的行在另一个表中没有匹配的行,则结果集中相应的列将包含NULL值。

用途 :

FULL OUTER JOIN通常用于需要获取两个表中的所有记录,并查看它们之间匹配关系的场景。然而,MySQL不直接支持FULL OUTER JOIN,但可以通过组合LEFT JOIN和RIGHT JOIN的结果来实现类似效果。

实现方式 :

使用UNION将LEFT JOIN和RIGHT JOIN的结果合并起来:

sql 复制代码
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column
UNION
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;

示例 :

继续使用employees和departments表。要查询所有员工及其所在部门的信息(包括没有部门的员工和没有员工的部门),可以使用上述UNION方法:

sql 复制代码
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
五、JOIN类型对比
JOIN类型 定义 用途 MySQL支持情况
INNER JOIN 返回两个表中满足连接条件的匹配行 获取两个表中存在匹配关系的记录 支持
LEFT JOIN 返回左表中的所有记录,右表中没有匹配的行填充NULL 获取左表中的所有记录以及右表中匹配的记录 支持
RIGHT JOIN 返回右表中的所有记录,左表中没有匹配的行填充NULL 获取右表中的所有记录以及左表中匹配的记录 支持
FULL OUTER JOIN 返回两个表中的所有记录,没有匹配的行用NULL填充 获取两个表中的所有记录,即使它们之间没有匹配关系 不直接支持,可通过UNION模拟
六、总结

MySQL提供了多种类型的JOIN操作,每种JOIN都有其特定的用途和语法。在实际应用中,应根据具体需求选择合适的JOIN类型。同时,考虑到性能问题,应确保对用于连接的列创建索引,并尽量避免不必要的JOIN操作。对于FULL OUTER JOIN这种MySQL不直接支持的操作,可以通过组合LEFT JOIN和RIGHT JOIN的结果来实现类似效果。

相关推荐
Decay__3 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
Yuzhiyuxia7 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
Decay__9 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
考研保研资料分享10 小时前
2025公卫保研清华专硕:三校考核、英文读译与择校复盘
面试
Lichee2014 小时前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试
aiautotools15 小时前
Claude Code MCP 怎么配:命令、scope 与避坑
面试
soft_hub115 小时前
海外会议怎么用录音APP翻译会议内容
面试·职场和发展
考研保研资料分享15 小时前
2025生物信息跨保浙大:四校考核、文献读译与材料准备
面试
怕浪猫16 小时前
K3.1 直追 Astra,先补 13%
前端·javascript·面试
后台模板学习16 小时前
MongoDB 与 MySQL 在 IM 即时聊天场景中该
数据库·mysql·mongodb