SQL Inner Join

11 Jun 2025 | 6 分钟阅读

SQL 中有多种不同的 连接类型,其中 INNER JOIN 是最常见也是最重要的连接类型。它允许用户访问来自两个或多个数据库表的匹配数据。

通过 Inner Join,我们可以仅检索跨表相关的或连接的数据。它会过滤掉不匹配的行,只包含连接条件满足的行。

Inner Join 通过逐行比较指定列中的值来创建合并结果。当连接列中的值相等时,这些行将被包含在最终输出中。

INNER JOIN 的 维恩图 如下所示。维恩图的阴影部分显示了两个表的交集值。

SQL Inner Join

SQL 中 INNER JOIN 的语法

描述

SELECT: 这是一个 SQL 命令,用于从数据库中检索数据。

FROM: 这是一个 SQL 关键字,用于指定需要从中获取数据的表。

ON: 这是一个 SQL 关键字,用于使用公共列名匹配行。

Column_Name1, Column_Name2, ….., Column_NameN: 这些是要检索的列的名称。

Table_Name1, Table_Name2: 这是要连接的两个表的名称。

Common_Column_Name: 这是 Table_Name1 和 Table_Name2 中公共列的名称。

为什么使用 Inner Join?

现在,我们可以描述 SQL 数据中内连接的用法。

SQL Inner Join

连接跨表的相关数据

在数据库中,数据被分割到多个表中以避免数据重复。Inner join 将公共数据整合到一个表中。

排除不匹配的记录

它只显示所有表中存在共同项的数据。如果一个表中的一行与另一个表中的一行不匹配,则该行将被排除在结果之外。

生成报表

它通过将来自多个表(例如订单和商品详情)的数据连接起来,创建详细的报表。

数据分析

Inner join 用于组合事实表(存储可测量数据)和维度表(存储表中的描述性信息)。

构建复杂查询

Inner join 帮助您通过在单个语句查询中组合多个表来构建复杂查询。

SQL 中 Inner Join 的演示

为了更好地理解内连接,我们将创建两个表并对它们执行命令。

演示 1

让我们创建两个名为 DepartmentEmployee_Details 的表来理解 INNER JOIN 的概念。

步骤 1

创建 Department 表

Department 表包含 Dept_IdDept_Name 列。

创建 Employee_Details 表

Employee_Details 表包含 Emp_IDEmp_NameDept_IDEmp_Salary 列。

步骤 2

在 Department 表中插入数据

在 Employee_Details 表中插入数据

步骤 3

我们可以使用以下查询来查看 DepartmentEmployee_Details 表的数据。

检索 Department 表

输出

Dept_IdDept_Name
1001融资
1002营销
1003销售
1004编码
1005管理

检索 Employee_Details 表

输出

员工 IDEmp_NameDept_IdEmp_Salary
1Akshay100123000.00
2Ram100224000.00
3巴尔拉姆 (Balram)100425000.00
4YatinNULLNULL
5马诺吉100423000.00

步骤 4

以下查询使用 SQL 中的 INNER JOIN 连接以上两个表。

以上 INNER JOIN 查询的解释

此查询连接 Employee_Details 和 Department 表,并访问两个表中 Department.Dept_Id = Employee_Details.Dept_Id 的记录。

它仅从两个表中检索那些 Dept_Id 在 Employee 表中与 Department 表的 Dept_Id 匹配的员工的详细信息。

如果 Dept_Id 为 NULL 或不匹配,则该行将不会显示在输出中。

输出

员工 IDEmp_NameDept_NameEmp_Salary
1Akshay融资23000.00
2Ram营销24000.00
3巴尔拉姆 (Balram)编码25000.00
5马诺吉编码23000.00

演示 2

让我们通过另一个演示来理解 INNER JOIN。现在让我们创建两个名为 AccountsTransactions 的表。

步骤 1

构建 Accounts 表

Accounts 表包含 account_id、account_holder、account_typecity 列。

构建 Transactions 表

Transactions 表包含 transaction_idaccount_idtransaction_dateamount 列。

步骤 2

向 Accounts 插入数据

向 Transactions 插入数据

步骤 3

我们可以使用以下查询来检索 AccountsTransactions 表的数据。

检索 Accounts 表

输出

account_idaccount_holderaccount_type城市
1Michael Brown储蓄San Francisco
2Samantha GreenCheckingHouston
3David Wilson储蓄Seattle
4Dexter MorganCheckingHouston
5John RobertsCheckingSan Francisco

检索 Transactions 表

输出

transaction_idaccount_idtransaction_date金额
100112025-06-01500.00
100212025-06-03150.75
100332025-06-02300.00
100452025-06-02550.00
100552025-06-04425.00

步骤 4

给定的查询使用 INNER JOIN 连接 AccountsTransactions 表。

以上 INNER JOIN 查询的解释

INNER JOIN 使用公共列 account_id 组合 Accounts 和 Transactions 表中的数据。查询仅检索存在于两个表中的数据。

Accounts 表存储有关账户持有人、姓名、账户类型和城市的信息。Transaction 表包含每个账户的交易详情。

要检索两个表中的数据,可以使用 INNER JOIN 查询,其中 Accounts 表中的 account_id 与 Transactions 表中的 account_id 匹配。

输出

account_holderaccount_type城市transaction_idtransaction_date金额
Michael Brown储蓄San Francisco10012025-06-01500.00
Michael Brown储蓄San Francisco10022025-06-03150.75
David Wilson储蓄Seattle10032025-06-02300.00
John RobertsCheckingSan Francisco10042025-06-02550.00
John RobertsCheckingSan Francisco10052025-06-0442500

结论

SQL 中的 INNER JOIN 用于基于它们之间的相关列组合两个或多个表中的行。它只返回两个表中都有匹配项的行。如果不存在匹配项,则这些行的数据不会显示在结果中。

它有助于通过使用表之间的关系来保持数据清洁并删除重复数据。INNER JOIN 常用于在银行业务、销售或库存系统等实际应用中生成报表、分析数据和构建复杂查询。


下一个主题SQL IN 运算符