问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL LEFT JOIN与LEFT OUTER JOIN详解

创作时间:
作者:
@小白创作中心

SQL LEFT JOIN与LEFT OUTER JOIN详解

引用
1
来源
1.
https://www.analyticsvidhya.com/blog/2025/01/sql-left-join-vs-left-outer-join/

在SQL中,LEFT JOIN和LEFT OUTER JOIN是两个常用的关键字,它们看起来不同,但实际功能完全相同。本文将详细解释LEFT JOIN和LEFT OUTER JOIN的工作原理、语法和使用场景,并通过具体的示例代码和输出结果来说明它们的功能。

什么是LEFT JOIN?

LEFT JOIN是一种SQL连接操作,用于根据相关列将两张表的行组合在一起。LEFT JOIN的关键特性是它返回左表中的所有行以及右表中匹配的行。如果没有匹配项,结果将包含来自右表的NULL值。

语法

SELECT columns
FROM left_table
LEFT JOIN right_table
ON left_table.column_name = right_table.column_name;

在上述语法中:

  • left_table:从中返回所有行的主要表。
  • right_table:从中返回匹配行的辅助表。
  • column_name:用于连接两个表的列。

LEFT JOIN示例

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

此查询检索所有员工及其对应的部门名称。如果员工未分配到任何部门,结果将显示NULL作为部门名称。

什么是LEFT OUTER JOIN?

LEFT OUTER JOIN的工作方式与LEFT JOIN完全相同。它返回左表中的所有行以及右表中匹配的行。如果没有匹配项,它将返回来自右表的NULL值。术语“OUTER”是可选的,不会改变连接的行为。在某些SQL方言中,为了清晰起见,通常会使用它。

语法

SELECT columns
FROM left_table
LEFT OUTER JOIN right_table
ON left_table.column_name = right_table.column_name;

使用与LEFT JOIN相同的示例,我们可以重写查询如下:

SELECT employees.name, departments.department_name
FROM employees
LEFT OUTER JOIN departments
ON employees.department_id = departments.id;

此查询也检索所有员工及其对应的部门名称,与LEFT JOIN相同。如果员工未分配到任何部门,结果将显示NULL作为部门名称。

SQL LEFT JOIN vs. LEFT OUTER JOIN

虽然LEFT JOIN和LEFT OUTER JOIN在术语上可能看起来不同,但它们在SQL中功能完全相同。唯一的区别在于语法:

  • LEFT JOIN:较短且更常用。
  • LEFT OUTER JOIN:包含可选的“OUTER”关键字以增强清晰度。

两个命令返回相同的结果,因此在LEFT JOIN和LEFT OUTER JOIN之间的选择是一个个人或组织偏好的问题。

实用示例:LEFT JOIN和LEFT OUTER JOIN

要创建一个包含员工和部门表的示例数据库,然后使用LEFT JOIN和RIGHT JOIN示例,可以使用以下SQL命令。

第1步:创建数据库

首先,创建一个数据库,其中将驻留表。

CREATE DATABASE company_db;
USE company_db;

第2步:创建表

现在,让我们创建员工和部门表。

-- 创建'departments'表
CREATE TABLE departments (
    id INT PRIMARY KEY,
    department_name VARCHAR(100) NOT NULL
);
-- 创建'employees'表
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

第3步:向表中插入数据

现在,向两个表中插入一些示例数据:

-- 向'departments'表中插入数据
INSERT INTO departments (id, department_name) VALUES
(1, 'HR'),
(2, 'IT'),
(3, 'Finance'),
(4, 'Marketing');

输出:

-- 向'employees'表中插入数据
INSERT INTO employees (id, name, department_id) VALUES
(1, 'Alice', 2),
(2, 'Bob', 3),
(3, 'Charlie', NULL),
(4, 'David', 1);

输出:

第4步:运行查询

现在数据库和表已创建并填充了数据,您可以运行LEFT JOIN和RIGHT JOIN查询。

LEFT JOIN查询

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

输出:

RIGHT JOIN查询

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

输出:

何时使用LEFT JOIN或LEFT OUTER JOIN

  • 数据检索:当您需要左表中的所有记录,即使在右表中没有匹配记录时,使用LEFT JOIN。
  • 报告:适用于生成报告,其中您希望包括所有项目(例如产品、员工)而不考虑它们的关系。
  • 数据分析:有助于识别数据集之间的差距或缺失关系。

结论

总之,LEFT JOIN和LEFT OUTER JOIN在SQL中是同义词,用于相同的目的,即在结果集中组合来自两张表的数据,同时确保包含左表中的所有记录。在LEFT JOIN和LEFT OUTER JOIN之间做出选择通常归结为个人或组织偏好。理解这一点可以提高编写SQL查询的效率,并防止在数据操作任务中产生混淆。

文章来源:Analytics Vidhya

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号