什么是 JOIN?
JOIN 是关系型数据库中,从两个 表 合并结果的操作。
虽然“JOIN”这个词听起来像是合并表本身,但 JOIN 实际上是从两个(或更多)不同的表中提取 行,并返回一组新的行,这些行组合了这些表的 列,并通过 实体键 和 外键 来确定哪些行是相关的。
JOIN 的类型
SQL JOIN 有四种 类型
- 左外连接:选择表 A 的所有记录,以及表 B 中符合连接条件的记录(如果有)。
- 右外连接:选择表 B 的所有记录,以及表 A 中符合连接条件的记录(如果有)。
- 内连接:仅选择表 A 和表 B 中符合连接条件的记录。
- 全外连接:选择两个表的所有记录,无论是否满足连接条件。
Metabase 中的 JOIN 示例
在 Metabase 中,当在 查询构建器 中提问时,默认使用左外连接;但对于 原生 SQL 查询(即,如果您在查询中仅使用 `JOIN` 而未指定连接类型),默认是内连接。
假设我们想在 Metabase 的 示例数据库 中,从 `People` 和 `Orders` 表返回结果,例如一个包含订单 ID、下订单的人的姓名以及其用户 ID 的表格。
查询构建器 JOIN
图 1 展示了此 JOIN 在 Metabase 的 笔记本编辑器 中的样子。我们还需要选择哪些列可见,以免显示来自两个表的每一列。
原生 SQL 查询 JOIN
如果我们用 SQL 编写相同的查询,可能会是这样的:
SELECT
orders.id AS "Order ID",
people.name AS "Name",
people.id AS "User ID"
FROM
people
JOIN
orders ON people.id = orders.user_ID
这里我们确定了 JOIN 的位置(在本例中,是在 `People → ID` 和 `Orders → User_ID` 之间进行连接,一个实体键和一个外键)。