SQL JOINS

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 连接 CustomersOrders 表。

结果集将包含

  • Customers 表中的 customer_idfirst_name
  • Orders 表中的 item

SQL JOIN 语法

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

这里,

  • table1table2 是要连接的两个表
  • column1table1 中与 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_idfirst_name
  • Orders 表中的 amount

结果集将包含 customer_idCustomers 表)和 customerOrders 表)之间存在匹配的值。

Join Two Table Based on Common Column
根据公共列连接两个表


连接多个表

我们还可以使用 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

在 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

SQL JOIN 与 AS 别名

我们可以将 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 命令连接 CustomersOrders 表,并分别为它们分配别名 CO

此外,我们可以使用 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 子句

这是 JOINWHERE 子句的示例

-- 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 的行。

在结束之前,让我们测试一下你对 SQL JOIN 的知识!你能解决下面的挑战吗?

挑战

编写一个 SQL 查询,找出所有可能的披萨配料组合。

假设你有一个名为 Toppings 的表。此表的架构如下

Toppings

列名

数据类型

topping_name

varchar(100)

ingredient_cost

decimal

一家披萨店正在进行一项促销活动,推出三种配料的披萨。你的任务是编写一个 SQL 查询,确定三种配料的每种可能组合的成本。


在你的查询结果中

  • 按总成本降序排序组合,四舍五入到两位小数。
  • 按字母顺序列出三种配料的名称。



你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战