SQL LEFT JOIN与LEFT OUTER JOIN详解
SQL LEFT JOIN与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