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;