【mysql 的内连接、左连接、右连接有什么区别和示例?】

概要

MySQL 中的内连接(INNER JOIN)、左连接(LEFT JOIN 或 LEFT OUTER JOIN)和右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)是处理多个表之间关系的重要工具。这些连接类型决定了如何从相关表中检索数据以及如何处理不匹配的行。以下是它们之间的区别和示例:

区别及示例

1. 内连接(INNER JOIN)

  • 定义:返回两个表中都存在匹配行的结果集。如果某行在其中一个表中没有匹配的行,则不会出现在结果集中。
  • 示例:假设我们有两个表 employees 和 departments。

employees 表:

idnamedepartment_id
1Alice1
2Bob2
3Carol3

departments 表:

idname
1HR
2Engineering

使用内连接查询所有有对应部门的员工:

SELECT employees.name, departments.name AS department_name  
FROM employees  
INNER JOIN departments ON employees.department_id = departments.id;
  • 结果:
namedepartment_name
AliceHR
BobEngineering

注意:Carol 没有出现在结果集中,因为她的 department_id 在 departments 表中没有对应的行。

2. 左连接(LEFT JOIN 或 LEFT OUTER JOIN)

  • 定义:返回左表中的所有行,以及右表中匹配的行。如果左表中的某行在右表中没有匹配的行,则结果集中右表的部分将包含 NULL 值。
  • 示例:使用左连接查询所有员工及其对应的部门(包括没有部门的员工):
SELECT employees.name, departments.name AS department_name  
FROM employees  
LEFT JOIN departments ON employees.department_id = departments.id;
  • 结果:
namedepartment_name
AliceHR
BobEngineering
CarolNULL

注意:Carol 出现在结果集中,但她的 department_name 是 NULL,因为她的 department_id 在 departments 表中没有对应的行。

3. 右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)

  • 定义:与左连接相反,返回右表中的所有行,以及左表中匹配的行。如果右表中的某行在左表中没有匹配的行,则结果集中左表的部分将包含 NULL 值。
  • 示例:虽然右连接在 SQL 中不常用(因为可以通过交换表和连接类型来实现相同的结果),但以下是一个示例:
SELECT employees.name, departments.name AS department_name  
FROM departments  
RIGHT JOIN employees ON employees.department_id = departments.id;
  • 结果 :与前面的左连接示例相同,但逻辑上是从 departments 表开始的。

注意:尽管右连接在某些数据库系统中存在,但许多开发人员和数据库管理员更倾向于使用左连接,因为它更符合从左到右的阅读习惯,并且可以通过简单地交换表和连接类型来实现相同的结果。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值