跳到主要内容

SQL中的内连接(INNER JOIN)

提示
  1. 内连接(INNER JOIN)的作用:SQL 中的 INNER JOIN 命令根据两个表中共有的列连接这些表,并选择这些列中具有匹配值的行。
  2. INNER JOIN 语法:语法格式为 SELECT columns FROM table1 INNER JOIN table2 ON table1.column1 = table2.column2,其中 table1table2 是要连接的表,column1column2 是两个表中相关的列。
  3. INNER JOIN 的应用INNER JOIN 可以与 WHERE 子句结合使用来进一步过滤行,可以使用别名简化查询,也可以连接多个表。

SQL 的 INNER JOIN 命令根据共同的列连接两个表,并选择这些列中具有匹配值的行。

示例

-- 从 Customers 表中选择 customer_id 和 first_name 列
-- 从 Orders 表中选择 amount

SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
INNER JOIN Orders
ON Customers.customer_id = Orders.customer;

这里,CustomersOrders 表根据 Customers.customer_id = Orders.customer 条件连接。上述代码排除了所有不满足此条件的行。

SQL 内连接(INNER JOIN)语法

SQL INNER JOIN 语句的语法是:

SELECT columns_from_both_tables
FROM table1
INNER JOIN table2
ON table1.column1 = table2.column2

这里,

  • table1table2 是要连接的两个表
  • column1table1 中的列,column2table2 中的列

注意: 我们可以使用 JOIN 代替 INNER JOIN。基本上,这两个子句执行相同的任务。

示例 1:SQL 内连接(INNER JOIN)

-- 连接 Customers 和 Orders 表

SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer;

这是上述 SQL 查询的工作原理:

如何在 SQL 中使用内连接(INNER JOIN)

示例 2:SQL 内连接(INNER JOIN)

让我们看另一个例子。

FROM Categories
INNER JOIN Products
ON Categories.cat_id = Products.cat_id;

这里,SQL 命令基于 cat_id 列(在两个表中均存在)选择 CategoriesProducts 表之间的共同行。

使用 WHERE 子句的内连接(INNER JOIN)

我们可以将 WHERE 子句与 INNER JOIN 结合使用,以进一步过滤输出中的行。

-- 连接 Customers 和 Orders 表
-- 如果 amount 为 500 或更高,则返回行

SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
INNER JOIN Orders
ON Customers.customer_id = Orders.customer
WHERE Orders.amount >= 500;

使用别名的 SQL 内连接(INNER JOIN)

由于 join 查询可能很长,我们可以在 INNER JOIN 中使用 AS 别名 使我们的查询更简洁易懂。

-- 使用别名 C 代表 Categories 表
-- 使用别名 P 代表 Products 表
SELECT C.cat_name, P.prod_title
FROM Categories AS C
INNER JOIN Products AS P
ON C.cat_id= P.cat_id;

这里,SQL 命令在连接 CategoriesProducts 表时分别为它们指定了别名 CP

三表的 SQL 内连接(INNER JOIN)

我们也可以使用 INNER JOIN 连接多于两个表。例如,

-- 连接三个表:Customers、Orders 和 Shippings
SELECT C.customer_id, C.first_name, O.amount, S.status
FROM Customers AS C
INNER JOIN Orders AS O
ON C.customer_id = O.customer
INNER JOIN Shippings AS S
ON C.customer_id = S.customer;

这里,SQL 命令

  • 根据 customer_id(来自 Customers 表)和 customer(来自 Orders 表)连接 CustomersOrders
  • 并根据 customer_id(来自 Customers 表)和 customer(来自 Shippings 表)连接 CustomersShippings

该命令返回满足跨越两个连接条件的列值匹配的那些行。

推荐阅读

  1. SQL JOIN
  2. SQL LEFT JOIN
  3. SQL RIGHT JOIN
  4. SQL FULL OUTER JOIN