SQL JOIN
语句用于根据公共列组合来自两个表的行,并选择这些列中具有匹配值的记录。
示例
-- join the Customers and Orders tables
-- based on the common values of their customer_id columns
SELECT Customers.customer_id, Customers.first_name, Orders.item
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer_id;
在这里,SQL 命令根据两个表的公共列 customer_id
连接 Customers
和 Orders
表。
结果集将包含
Customers
表中的customer_id
和first_name
列Orders
表中的item
列
SQL JOIN 语法
SELECT columns_from_both_tables
FROM table1
JOIN table2
ON table1.column1 = table2.column2
这里,
- table1 和 table2 是要连接的两个表
- column1 是 table1 中与 table2 中的 column2 相关联的列
示例:根据公共列连接两个表
-- join Customers and Orders tables based on
-- customer_id of Customers and customer column of Orders
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer;
在这里,SQL 命令选择以下列:
-
Customers
表中的customer_id
和first_name
-
Orders
表中的amount
结果集将包含 customer_id
(Customers
表)和 customer
(Orders
表)之间存在匹配的值。

连接多个表
我们还可以使用 JOIN
连接两个以上的表。例如,
-- join three tables: Customers, Orders, and Shippings
SELECT Customers.first_name, Orders.item, Shippings.status
FROM Customers
JOIN Orders ON Customers.customer_id = Orders.customer_id
JOIN Shippings ON Customers.customer_id = Shippings.customer;
此 SQL 命令连接三个表,并根据匹配的 customer_id 从每个表中选择相关列。
注意:要了解有关如何连接多个表的更多信息,请访问 SQL Join 多个表。
SQL JOIN 的类型
在 SQL 中,我们有四种主要类型的连接
更多关于 SQL JOIN
在 SQL 中,Self JOIN
操作允许我们将表与自身连接,从而在同一表中的行之间创建关系。
让我们看一个例子。
SELECT
C1.first_name AS FirstPerson,
C2.first_name AS SecondPerson,
C1.country
FROM Customers C1, Customers C2
WHERE C1.country = C2.country AND C1.first_name != C2.first_name;
此 SQL 查询将返回来自同一国家但名字不同的客户对。
要了解更多信息,请访问 SQL Self JOIN。
我们可以将 AS 别名与表名一起使用,使查询简短明了。例如,
-- use alias C for Customers table
-- use alias O for Orders table
SELECT C.customer_id, C.first_name, O.amount
FROM Customers AS C
JOIN Orders AS O
ON C.customer_id = O.customer;
在这里,SQL 命令连接 Customers
和 Orders
表,并分别为它们分配别名 C 和 O。
此外,我们可以使用 AS
别名暂时更改列名。例如,
-- use alias C for Customers table
-- use alias O for Orders table
SELECT C.customer_id AS cid, C.first_name AS name, O.amount
FROM Customers AS C
JOIN Orders AS O
ON C.customer_id = O.customer;
除了为表提供别名外,上面的 SQL 命令还为 Customers
表的列分配了别名
customer_id
列的别名为cid
first_name
列的别名为name
这是 JOIN
与 WHERE
子句的示例
-- join Customers and Orders table with matching fields customer_id and customer
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer
WHERE Orders.amount >= 500;
在这里,SQL 命令连接两个表并选择 amount 大于或等于 500 的行。