数据库中左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、完全外连接(FULL OUTER JOIN)的定义

在数据库中,外连接(Outer Join) 用于查询两个表中符合条件的数据,同时保留未匹配的行。主要包括 左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、完全外连接(FULL OUTER JOIN)。它们的核心区别在于 保留哪个表的未匹配数据


1. 左外连接(LEFT OUTER JOIN)

  • 作用:返回左表(FROM 后的表)的所有记录,以及右表中匹配的记录。
  • 如果右表无匹配,则右表字段显示为 NULL
  • 语法
    SELECT 列名
    FROM1
    LEFT OUTER JOIN2 ON1.字段 =2.字段;
    
    OUTER 可以省略,直接写 LEFT JOIN

示例

假设有两个表:

  • employees(员工表)

    idnamedepartment_id
    1Alice101
    2Bob102
    3CarolNULL
  • departments(部门表)

    idname
    101HR
    102Finance
    103IT

查询所有员工及其部门(即使员工没有部门)

SELECT employees.name, departments.name AS department
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

结果

namedepartment
AliceHR
BobFinance
CarolNULL

左表 employees 的所有记录都被保留Carol 没有部门,所以 department 显示 NULL


2. 右外连接(RIGHT OUTER JOIN)

  • 作用:返回右表(JOIN 后的表)的所有记录,以及左表中匹配的记录。
  • 如果左表无匹配,则左表字段显示为 NULL
  • 语法
    SELECT 列名
    FROM1
    RIGHT OUTER JOIN2 ON1.字段 =2.字段;
    
    OUTER 可以省略,直接写 RIGHT JOIN

示例

查询所有部门及其员工(即使部门没有员工)

SELECT employees.name, departments.name AS department
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

结果

namedepartment
AliceHR
BobFinance
NULLIT

右表 departments 的所有记录都被保留IT 部门没有员工,所以 name 显示 NULL


3. 完全外连接(FULL OUTER JOIN)

  • 作用:返回左表和右表的所有记录,无论是否匹配
    • 如果左表无匹配,右表字段显示 NULL
    • 如果右表无匹配,左表字段显示 NULL
  • 语法
    SELECT 列名
    FROM1
    FULL OUTER JOIN2 ON1.字段 =2.字段;
    
    OUTER 可以省略,直接写 FULL JOIN

示例

查询所有员工和所有部门(无论是否匹配)

SELECT employees.name, departments.name AS department
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;

结果

namedepartment
AliceHR
BobFinance
CarolNULL
NULLIT

左表 employees 和右表 departments 的所有记录都被保留,未匹配的部分用 NULL 填充。


对比总结

连接类型保留左表未匹配数据保留右表未匹配数据典型应用场景
LEFT JOIN✅ 是❌ 否查询主表数据,附带关联信息(如“所有员工+部门”)
RIGHT JOIN❌ 否✅ 是查询关联表数据,附带主表信息(较少使用)
FULL JOIN✅ 是✅ 是需要完整查看两表数据(如数据比对)

注意事项

  1. MySQL 不支持 FULL JOIN,但可以通过 LEFT JOIN + RIGHT JOIN + UNION 实现:
    SELECT * FROM employees LEFT JOIN departments ON ...
    UNION
    SELECT * FROM employees RIGHT JOIN departments ON ...;
    
  2. 性能:外连接比内连接(INNER JOIN)更耗资源,尽量避免在大表上使用。
  3. NULL 处理:外连接可能产生 NULL,查询时需用 IS NULLCOALESCE() 处理。

总结

  • 左外连接保留左表所有数据(常用)。
  • 右外连接保留右表所有数据(较少用,通常可用左连接替代)。
  • 完全外连接保留两表所有数据(适合数据比对)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值