SQL INNER JOIN 子句详解与实战
SQL INNER JOIN 子句详解与实战
SQL INNER JOIN子句是SQL语言中用于连接多个表的重要工具。本文将通过详细的理论解释和实际示例,帮助读者掌握如何使用INNER JOIN子句从多个表中查询数据。
SQL INNER JOIN 子句介绍
到目前为止,你已了解如何使用SELECT 语句从单个表中查询数据。然而,SELECT语句并不仅限于从单个表查询数据,它还可以将多个表链接在一起。链接表的进程被称为联接。SQL提供了多种联接类型,例如内联接、左连接、右连接、全外连接等。本教程重点介绍内连接。
假设你有两个表 A 和 B。表 A 有四行:(1,2,3,4),表 B 有四行:(3,4,5,6)。当表 A 使用内连接与表 B 连接时,你得到的结果集 (3,4) 是表 A 和 B 的交集。
对于表 A 中的每一行,内联接子句都会在表 B 中查找匹配行。如果找到匹配项,则会将其包含在最终结果集中。假设表 A 和表 B 中的列为 a 和 b。以下语句演示了内联接子句:
SELECT a
FROM A
INNER JOIN B ON b = a;
INNER JOIN 子句出现在 FROM 子句之后。在 ON 关键字之后指定用于在表 A 和 B 之间匹配的条件。此条件称为联接条件,即 B.n = A.n。只要表具有关系(通常是外键关系),INNER JOIN 子句就可以连接三个或更多表。例如,以下语句演示了如何连接三个表:A、B 和 C:
SELECT
A.n
FROM A
INNER JOIN B ON B.n = A.n
INNER JOIN C ON C.n = A.n;
SQL INNER JOIN 示例
让我们来看一些使用 INNER JOIN 子句的实际示例。
1) 使用 SQL INNER JOIN 连接两个表
将使用示例数据库中的 employees 和 departments 表来演示 INNER JOIN 子句如何工作的。
每个员工只属于一个部门,而每个部门可以有多名员工。departments 和 employees 之间的关系是一对多。employees 表中的 department_id 列是将 employees 链接到 departments 表的外键列。
若要获取部门 ID 1、2 和 3 的信息,请使用以下语句:
SELECT
department_id,
department_name
FROM
departments
WHERE
department_id IN (1, 2, 3);
若要获取在部门 ID 1、2 和 3 中工作的员工的信息,请使用以下查询:
SELECT
first_name,
last_name,
department_id
FROM
employees
WHERE
department_id IN (1, 2, 3)
ORDER BY
department_id;
若要组合这两个表的中的数据,请使用内联接子句,如下所示:
SELECT
first_name,
last_name,
employees.department_id,
departments.department_id,
department_name
FROM
employees
INNER JOIN
departments ON departments.department_id = employees.department_id
WHERE
employees.department_id IN (1 , 2, 3);
对于 employees 表中的每一行,语句都会检查 department_id 列的值是否等于 departments 表中 department_id 列的值。如果条件 employees.department_id = departments.department_id 满足,则包含两个表 employees 和 departments 行中数据的组合行将包括在结果集中。请注意,表 employees 和 departments 具有相同的列名 department_id,因此我们必须使用语法 table_name.column_name 限定列名 department_id。
SQL INNER JOIN 3 表示例
每个员工只从事一个工作,而一个工作可以由许多员工从事。jobs 表和 employees 表之间的关系是一对多。下列数据库图表说明 employees、departments 和 jobs 之间的关系。下列查询使用 inner join 子句连接 3 个表:employees、departments 和 jobs 以获取部门编号 1、2 和 3 中工作的员工的姓、名、职位和部门名称。
SELECT
first_name,
last_name,
job_title,
department_name
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
INNER JOIN jobs j ON j.job_id = e.job_id
WHERE
e.department_id IN (1, 2, 3);
现在您应该了解 SQL INNER JOIN 子句如何工作以及知道如何将其应用于查询来自多个表的数据。