SQL INNER JOIN 内连接
在本教程中,我们将学习如何使用SQL内部联接语句从多个表查询数据。
要从多个表中查询数据,请使用join语句。
SQL提供了几种类型的连接方法,如内部连接inner join、外部连接outer joins(左外部连接或左连接left outer join or left join、右外部连接或右连接right outer join or right join以及完全外部连接full outer join)和自连接self join。在本教程中,我们将向您展示如何使用INNER JOIN子句。
SQL INNER JOIN语法
下面是连接两个表的INNER JOIN语法:
SELECT
column1, column2
FROM
table_1
INNER JOIN table_2 ON join_condition;
- table_1 和table_2 称为联接表。
- 对于table_1中的每一行,查询将在table_2 中查找满足联接条件的相应行。如果找到相应的行,查询将返回一行,其中包含来自两个表的数据。否则,它将检查表table_1中的下一行,并继续此过程,直到检查表table_1中的所有行。
SQL INNER JOIN - 查询两个表中的数据示例
在本例中,我们将使用到数据库中的products和categories表。下图说明了数据库关系图。

其中:
一个类别可以有许多产品。
一种产品只属于一个类别。
因此,categories表中的行与products表中的行之间存在多对一关系。这两个表之间的链接是categoryid列。
我们需要从两个表中查询以下数据:
productID, productName来自产品表。
categoryName来自categories表。
SELECT
productID, productName, categoryName
FROM
products
INNER JOIN
categories ON categories.categoryID = products.categoryID;

join条件作为表达式放在INNER join子句中ON关键字之后:
categories.categoryID = products.categoryID
对于products表中的每一行,查询将在categories表中找到具有相同categoryid的对应行。如果两个表中的两行匹配,则返回包含SELECT子句中指定的列的行,即productID, productName, categoryName;
否则,它将检查产品表products中的下一行,继续在categories表中找到匹配的行。这个过程一直持续到检查products表的最后一行。
SQL INNER JOIN – 从三个表中查询数据
我们可以使用相同的方法来连接三个表。
以下查询将从产品、类别和供应商三个表中选择productID、productName、categoryName和supplier:
SELECT
productID,
productName,
categoryName,
companyName AS supplier
FROM
products
INNER JOIN
categories ON categories.categoryID = products.categoryID
INNER JOIN
suppliers ON suppliers.supplierID = products.supplierID

隐式SQL内连接 INNER JOIN
内连接还有另一种形式,称为隐式内连接,如下所示:
SELECT
column1, column2
FROM
table_1,
table_2
WHERE
join_condition;
在这种形式中,您可以在FROM子句中指定所有的连接表,并在SELECT语句的WHERE子句中放置连接条件。
我们可以使用隐式内连接重写上面的查询语句,如下所示:
SELECT
productID, productName, categoryName
FROM
products,
categories
WHERE
products.categoryID = categories.categoryID;

