从 VLOOKUP/XLOOKUP 到 JOIN
Excel 的 VLOOKUP 和 XLOOKUP 函数介绍数据库连接。
在 Excel 和 Google Sheets 等电子表格软件中,XLOOKUP 函数(及其前身 VLOOKUP)可以连接已拆分到不同工作表或电子表格不同部分的数据。如果您以前使用过 XLOOKUP,可能没意识到您实际上执行了与数据库连接(组合两个数据库表)相同的操作。下面我们来介绍 XLOOKUP 的工作原理及其与简单数据库连接的关系。
XLOOKUP 介绍
这两个查找函数的作用相同:基于查找值在电子表格中查找记录。它们之间存在一些细微差别,在此讨论中我们将忽略这些差别。 XLOOKUP 是 VLOOKUP 更灵活、功能更强大的版本,因此在本文的其余部分我们将只引用 XLOOKUP。

例如,在上图所示的示例中,左侧的工作表包含订单列表,而右侧的电子表格包含产品信息。每个订单只包含一种产品,但订购数量可能不同。我们要计算每种产品的总计。结果将是另一个电子表格,如下所示。

“订单”和“产品”工作表有一些共同数据,即产品 ID 列表,这使我们能够将产品与订单关联起来。

在 *产品* 工作表中,ProductID 列中的值标识了 *产品* 工作表本身的行。在 *订单* 工作表中,ProductID 列中的值引用了 *不同* 工作表中的行,在本例中是 *产品* 工作表。
要计算每个订单的总计,我们必须在 *产品* 表中查找该产品,从 *价格* 列获取其价格,然后将其乘以订单中的 *数量* 列的条目。
使用 XLOOKUP 进行查找
XLOOKUP 函数需要几个参数:
lookup_value:要查找的值(哪个列)lookup_array:在哪里查找(哪个表)return_array:要返回什么- (还有一些可选参数,这里我们忽略它们)
在我们的例子中,我们要查找的值是我们 *订单* 表中 ProductID 列中的一个值。*在哪里查找* 是 *产品* 工作表的第一列,也称为 ProductID。

XLOOKUP 会扫描该列,直到找到匹配的 ProductID,然后返回“要返回什么”参数中匹配行中的值。我们将 Price 列指定为“要返回什么”,因此 XLOOKUP 将返回匹配 ProductID 的行中 Price 列的值。然后,XLOOKUP 将此价格插入到我们的 *Totals* 工作表中。

此时,我们可以使用标准的 Excel 或 Google Sheets 函数来获取订单总计。我们只需将订单的 Quantity 乘以其 Price。
要对整个表执行此操作,我们可以像在任何电子表格中一样,将公式复制到所有行。需要注意的一点是,在复制公式向下填充列时,要确保查找和返回范围不会滑动。有关如何在 Excel 中使用 XLOOKUP 的详细信息,请参阅 XLOOKUP 文档。
使用 JOIN
在数据库中,我们刚刚执行的相同操作是通过 join 来完成的。Join 的工作原理与 XLOOKUP 基本相同,但它一次操作整个表。在底层,join 会“查找”订单表中的每一行,就像 XLOOKUP 一样。
如果我们的数据库包含与上面电子表格示例相同的表,我们可以创建相同的总计表。我们将首先使用 Metabase 的 查询生成器,然后看看如何使用 SQL 查询来实现。
使用查询生成器连接表

在这里,我们在左侧选择要连接的两个表:*订单* 和 *产品*。然后我们在右侧定义如何连接它们,这通过比较每个表中的相应 ProductID 列来完成。
然后,我们可以创建一个自定义列,将 *订单* 表中 Quantity 列的值乘以 *产品* 表中 Price 的值。
我们得到的结果与上面使用 XLOOKUP 的结果相同,只是现在是来自我们的数据库。

在 SQL 中指定连接
SQL(结构化查询语言)是与数据库交互的原生方式。对于许多问题,像上面这样的可视化编辑器是最佳选择,但对于一些高级查询,SQL 是必不可少的。这里的示例仅用于说明简单的 SQL 查询是如何工作的。
查询包含三个部分:
- 从 *订单* 表中选择相关字段(
OrderID、Quantity等) - 将
Price值乘以Quantity(在以AS Total结尾的行中) - 使用
LEFT JOIN语句创建连接,并指定哪些字段必须匹配
SELECT
Orders.OrderID,
Orders.ProductID,
Orders.Quantity,
Products.Price * Orders.Quantity AS Total,
Products.Name
FROM
Orders
LEFT JOIN Products ON Orders.ProductID = Products.ProductID
撇开连接的细节不谈,主要 takeaway 是我们指定了与 XLOOKUP 相同的元素:连接是通过两个不同表中的各一列定义的,并且我们正在指定从匹配的行中获取哪个值进行进一步操作。
JOIN 与 XLOOKUP 对比
数据库 JOIN 和电子表格中的 XLOOKUP 之间肯定存在差异。例如,有不同类型的 JOIN,而我们这里只涵盖左外连接。JOIN 还可以基于多个字段匹配、使用函数作为匹配的一部分等。
然而,对于将来自两个表中基于单个列匹配的数据组合起来的目的,XLOOKUP 和(左外)JOIN 执行的操作基本相同。
数据库真正发挥优势的地方在于处理更复杂的运算。也许您想计算每年或每月总计的总和,或者计算值与滚动平均值之间的差值。在数据库中,聚合和其他运算可以在与 JOIN 相同的查询中完成。