mysql 的内连接、左连接、右连接有什么区别?

在MySQL中,内连接、左连接和右连接是用于从两个或多个表中根据某些条件获取数据的不同方式。它们之间的主要区别在于如何处理那些没有满足连接条件的行。以下是这三种连接类型的详细区别:

一、内连接(INNER JOIN)

  1. 定义:内连接是最常见的连接类型,它只返回两个表中满足连接条件的匹配行。

  2. 行为:只有当两个表中的连接字段值相等时,这些行才会被包含在结果集中。如果没有匹配的行,则这些行不会出现在结果集中。

  3. 语法

    sql 复制代码
    SELECT columns  
    FROM table1  
    INNER JOIN table2  
    ON table1.column = table2.column;
  4. 示例 :假设有两个表employees(员工表)和departments(部门表),你想获取每个员工及其所属部门的信息。

    复制代码
    sql 复制代码
    SELECT employees.name, departments.department_name  
    FROM employees  
    INNER JOIN departments  
    ON employees.department_id = departments.id;

二、左连接(LEFT JOIN 或 LEFT OUTER JOIN)

  1. 定义:左连接返回左表中的所有行,以及右表中满足连接条件的匹配行。如果右表中没有匹配的行,则结果集中会用NULL值来填充右表的相应列。

  2. 行为:左连接保证了左表中的所有行都会出现在结果集中,即使右表中没有与之匹配的行。

  3. 语法

    复制代码
    sql 复制代码
    SELECT columns  
    FROM left_table  
    LEFT JOIN right_table  
    ON left_table.column = right_table.column;
  4. 示例 :假设有两个表customers(客户表)和orders(订单表),你想获取所有客户及其订单信息,包括那些没有订单的客户。

    复制代码
    sql 复制代码
    SELECT customers.name, orders.order_date  
    FROM customers  
    LEFT JOIN orders  
    ON customers.id = orders.customer_id;

三、右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)

  1. 定义:右连接返回右表中的所有行,以及左表中满足连接条件的匹配行。如果左表中没有匹配的行,则结果集中会用NULL值来填充左表的相应列。

  2. 行为:右连接保证了右表中的所有行都会出现在结果集中,即使左表中没有与之匹配的行。

  3. 语法

    复制代码
    sql 复制代码
    SELECT columns  
    FROM left_table  
    RIGHT JOIN right_table  
    ON left_table.column = right_table.column;
  4. 示例 :同样以customersorders两个表为例,但这次你想获取所有订单及其对应的客户信息,包括那些没有客户的订单(虽然在实际业务场景中这种情况很少见,但为了说明右连接的概念,这里仍然使用这个例子)。

    复制代码
    sql 复制代码
    SELECT customers.name, orders.order_date  
    FROM customers  
    RIGHT JOIN orders  
    ON customers.id = orders.customer_id;

总结

  • 内连接:只返回两个表中满足连接条件的匹配行。
  • 左连接:返回左表中的所有行,以及右表中满足连接条件的匹配行;对于右表中没有匹配的行,结果集中用NULL值填充。
  • 右连接:返回右表中的所有行,以及左表中满足连接条件的匹配行;对于左表中没有匹配的行,结果集中用NULL值填充。

在选择使用哪种连接类型时,你应该根据你的查询需求和数据结构来决定。

相关推荐
这个DBA有点耶9 分钟前
数据库迁移灰度验证:从读流量到双写再到全量切换的完整路径
数据库·mysql·架构
Wang's Blog14 分钟前
PostgreSQL笔记16: 索引基础——概念、类型、创建与最佳实践
数据库·笔记·postgresql
用户31693538118323 分钟前
"批量"删除-sql
数据库
瀚高PG实验室1 小时前
SQL优化案例:使用分区表优化SQL查询性能
linux·服务器·数据库·sql·microsoft·postgresql
SelectDB1 小时前
15 分钟搭建 PostgreSQL + Apache Iceberg + Apache Doris 的湖仓分析平台
数据库
SelectDB1 小时前
科大讯飞可观测性底座:从 ES/Loki 到 Apache Doris 的可观测存储分析升级实践
数据库
SelectDB1 小时前
Cisco WebEx 数据平台统一改造:基于 Apache Doris / SelectDB 替换 Trino、Pinot、Iceberg 及 Kyuubi
数据库
数据技术说1 小时前
MySQL 和 PostgreSQL 的 CDC 方案到底有什么区别?
数据库·架构
SelectDB2 小时前
灵犀科技统一数据服务平台:基于 Apache Doris / SelectDB 实现存储降本 60%、计算提效 10 倍
数据库
带多刺的玫瑰2 小时前
Leecode#4刷题之寻找两个正序数组的中位数
java·前端·算法