SQL INNER JOIN 内连接

时间:2018-11-15 17:46:26  来源:igfitidea点击:

在本教程中,我们将学习如何使用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;