Skip to content

SQL Inner Join

INNER JOIN 关键词选择在两个表中都有匹配值的记录。它是最常见的连接类型。

如果 table1 中的某一行根据连接条件在 table2 中找到对应的行,INNER JOIN 会将两行中的列组合成一个结果行。如果没有匹配项,这些行将被排除在结果之外。

SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.join_column = table2.join_column;

或者,您通常可以直接使用 JOIN(在大多数 SQL 数据库中,这默认为 INNER JOIN):

SELECT column_name(s) FROM table1 JOIN table2 ON table1.join_column = table2.join_column;

从视觉上看,INNER JOIN 可以被视为两个集合的交集——只有在两个集合中都存在的元素(行)(基于连接条件)才会被返回。

我们将使用 Northwind 示例数据库及其 Customers 和 Orders 表。

“Customers” 表的简化视图:

CustomerIDCustomerNameCountry
1Alfreds FutterkisteGermany
2Ana Trujillo Emparedados y heladosMexico
3Antonio Moreno TaqueríaMexico
…

“Orders” 表的简化视图:

OrderIDCustomerIDOrderDate
1030821996-09-18
10309371996-09-19
10310771996-09-20
…

以下 SQL 语句将只返回下过订单的客户及其订单 ID:

SELECT c.CustomerName, o.OrderID
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
ORDER BY c.CustomerName;

结果集的一部分可能如下所示:

CustomerNameOrderID
Ana Trujillo Emparedados y helados10308
Antonio Moreno Taquería10365
… (其他下了订单的客户)

重要注意事项:INNER JOIN 关键词选择两个表中所有符合连接条件 (Customers.CustomerID = Orders.CustomerID) 的行。如果在 “Customers” 表中有客户但在 “Orders” 表中没有任何匹配的订单,这些客户将 不会 出现在结果中。类似地,任何没有匹配客户的订单(如果可能存在孤立数据)也将被排除。

  • 从多个表中检索相关数据(例如,用户资料及其帖子)。
  • 根据是否存在相关数据来过滤记录(例如,已经被订购的产品)。
  • 结合信息以生成存在直接关系的综合报告。