MySQL left join、right join以及inner join的区别 ?

LEFT JOIN(左连接)、RIGHT JOIN(右连接)和INNER JOIN(内连接)是SQL中用于连接两个或多个表以检索数据的重要操作。它们之间的主要区别在于如何处理那些在连接条件下没有匹配的行。下面通过具体的例子来说明这三种连接的区别。

1. LEFT JOIN(左连接)

定义:LEFT JOIN 返回左表(主表)中的所有记录,以及右表(从表)中匹配的行。如果右表中没有匹配的行,则结果中这些记录的右表部分将以NULL值填充。

示例

假设有两个表,一个是员工表(Employees),另一个是部门表(Departments)。员工表有员工ID、姓名和部门ID等字段,部门表有部门ID和部门名称等字段。现在我们想列出所有员工及其所属的部门名称,即使某些员工尚未分配到部门。

SELECT Employees.Name, Departments.DepartmentName  
FROM Employees  
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

在这个例子中,LEFT JOIN确保了员工表中的所有员工都被列出。对于那些尚未分配到部门的员工,其部门名称将显示为NULL。

2. RIGHT JOIN(右连接)

定义:RIGHT JOIN 返回右表(主表)中的所有记录,以及左表(从表)中匹配的行。如果左表中没有匹配的行,则结果中这些记录的左表部分将以NULL值填充。

注意:在实际应用中,RIGHT JOIN的使用相对较少,因为大多数情况下,我们更倾向于从左到右的逻辑顺序(即,从用户更关心的表开始)。然而,了解它的工作原理仍然很重要。

示例(继续使用员工和部门表的例子,但假设我们想要从部门的角度出发):

SELECT Employees.Name, Departments.DepartmentName  
FROM Employees  
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

在这个例子中,RIGHT JOIN确保了部门表中的所有部门都被列出。对于那些没有员工的部门,其员工姓名将显示为NULL。

3. INNER JOIN(内连接)

定义:INNER JOIN 只返回两个表中匹配连接条件的记录。如果左表中的记录在右表中没有匹配项,或者右表中的记录在左表中没有匹配项,那么这些记录将不会出现在查询结果中。

示例

继续使用员工和部门表的例子,如果我们只关心那些已经分配到部门的员工及其所属部门:

SELECT Employees.Name, Departments.DepartmentName  
FROM Employees  
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

在这个例子中,INNER JOIN仅返回了那些在员工表和部门表中都有匹配项的记录,即那些已经分配到部门的员工及其所属部门。

总结

连接类型 描述 示例中的表现
LEFT JOIN 返回左表中的所有记录以及右表中匹配的行。右表中未匹配的行以NULL填充。 列出了所有员工,包括未分配部门的员工(部门名称为NULL)。
RIGHT JOIN 返回右表中的所有记录以及左表中匹配的行。左表中未匹配的行以NULL填充。 列出了所有部门,包括没有员工的部门(员工姓名为NULL)。
INNER JOIN 只返回两个表中匹配连接条件的记录。 只列出了已经分配到部门的员工及其所属部门。

这三种连接类型各有其适用场景,正确选择它们对于高效地进行数据库查询至关重要。

相关推荐

  1. vue与angular以及react区别

    2024-07-17 14:04:01       44 阅读
  2. Pull和Push关系以及区别

    2024-07-17 14:04:01       32 阅读
  3. Hbase、hive以及ClickHouse区别

    2024-07-17 14:04:01       25 阅读
  4. js数组合并方法,以及各方法区别

    2024-07-17 14:04:01       51 阅读
  5. mybatis中$和#区别以及各自使用场景

    2024-07-17 14:04:01       34 阅读
  6. rabbitmq交换机类型以及他们区别

    2024-07-17 14:04:01       28 阅读
  7. MVVM和MVC原理以及它们区别

    2024-07-17 14:04:01       25 阅读
  8. Vue3reactive、ref、toRef、toRefs用法以及区别

    2024-07-17 14:04:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 14:04:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 14:04:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 14:04:01       58 阅读
  4. Python语言-面向对象

    2024-07-17 14:04:01       69 阅读

热门阅读

  1. 网络安全-网络安全及其防护措施5

    2024-07-17 14:04:01       20 阅读
  2. 数据结构课程设计:客房信息管理系统 基于c

    2024-07-17 14:04:01       21 阅读
  3. 微信小程序:声明式导航、刷新节流

    2024-07-17 14:04:01       21 阅读
  4. 苹果HEIC 数据转 PNG

    2024-07-17 14:04:01       22 阅读
  5. uniapp使用 web-view 与网页互相通信

    2024-07-17 14:04:01       20 阅读
  6. Arrays的用法(附10道练习题)

    2024-07-17 14:04:01       23 阅读
  7. Hadoop之/etc目录下各配置文件的作用详解

    2024-07-17 14:04:01       17 阅读
  8. 前端学习常用技术栈

    2024-07-17 14:04:01       22 阅读