SQL JOIN 的类型

17 Mar 2025 | 6 分钟阅读

SQL JOIN

SQL Join 用于根据定义的条件从两个或多个表中获取或组合数据(行或列)。

表 1:订单

订单 IDCustomerID订单名称产品名称
12025101彼得ABC
12030105RobertXYX
12032110JamesXYZ
12034115安德鲁PQR
12035120马修AAA

表 2:客户

CustomerID客户名称国家
100梅西墨西哥
101王子台湾
103玛丽亚·费尔南德斯土耳其
105茉莉巴黎
110法夫·韦塞尔印度尼西亚
120罗马火箭俄罗斯

现在,我们有两个表:订单 (Order)客户 (Customer)。两个表中都有一个共同的 CustomerID 列。因此,编写 SQL 查询来定义通用关系,以从两个表中选择匹配的记录。

执行上述 SQL 查询后,它会产生以下输出:

订单 ID客户名称国家产品名称
12025王子台湾ABC
12030茉莉巴黎XYX
12032法夫·韦塞尔印度尼西亚XYZ
12035罗马火箭俄罗斯AAA

SQL Join 的类型

SQL 中使用了不同类型的连接:

  1. 内连接 / 简单连接
  2. 左外连接 / 左连接
  3. 右外连接 / 右连接
  4. 全外连接
  5. 交叉连接
  6. Self Join

Inner Join

内连接用于选择两个表中所有匹配的行或列,或者只要定义的条件在 SQL 中有效。

语法

我们可以通过 Venn 图表示内连接,如下所示:

Types of SQL JOIN

表 1:学生

学生编号 (Student_ID)学生姓名主题教师 ID
101亚历山德拉计算机科学T201
102查尔斯经济学T202
103汤姆·克鲁斯计算机科学T201
104阿隆·芬奇电子行业T203
105西门·巴约夫网页设计T204
106克里斯托弗英国文学T205
107牛仔布时装设计师T206

表 2:教师

教师 ID教师姓名教师电子邮件
T201戴维斯先生[email protected]
T202乔纳斯夫人[email protected]
T201戴维斯先生[email protected]
T204洛佩兹夫人[email protected]
T205怀利夫人[email protected]
T206憨豆先生[email protected]

我们有两个表:学生 (Students) 表和教师 (Teachers) 表。让我们编写 SQL 查询,使用 INNER JOIN 连接表,如下所示:

执行查询后,它会产生下表。

Types of SQL JOIN

自然连接

这是一种内连接类型,根据两个表中存在的相同列名和相同数据类型连接两个或多个表。

语法

我们有两个表:学生 (Students) 表和教师 (Teachers) 表。让我们编写 SQL 查询,使用 Natural JOIN 连接表,如下所示:

执行上述查询后,它会产生下表。

Types of SQL JOIN

LEFT JOIN

LEFT JOIN 用于从左表 (table1) 中检索所有记录,并从右表 (table2) 中检索匹配的行或列。如果两个表不包含任何匹配的行或列,则返回 NULL。

语法

我们也可以通过 Venn 图表示左连接,如下所示:

Types of SQL JOIN

注意:在某些数据库中,LEFT JOIN 也称为 LEFT OUTER JOIN。

表 1:产品详细信息

产品 ID产品名称总额
Pro101笔记本电脑56000
Pro102移动端38000
Pro103耳机5000
Pro104电视25000
Pro105iPad60000

表 2:客户详细信息

客户名称客户地址客户年龄产品 ID
马丁·古普蒂尔美国旧金山26Pro101
James澳大利亚29Pro103
安巴蒂·威廉姆森新西兰27Pro102
乔弗拉·阿彻南非24Pro105
凯特·怀利澳大利亚20Pro103

我们有两个表:产品详细信息 (Product_Details) 表和客户详细信息 (Customer_Details) 表。让我们编写 SQL 查询,使用 LEFT JOIN 连接表,如下所示:

执行查询后,它会产生下表。

Types of SQL JOIN

RIGHT JOIN 用于从右表 (table2) 中检索所有记录,并从左表 (table1) 中检索匹配的行或列。如果两个表不包含任何匹配的行或列,则返回 NULL。

语法

我们也可以通过 Venn 图表示右连接,如下所示:

Types of SQL JOIN

注意:在某些数据库中,RIGHT JOIN 也称为 RIGHT OUTER JOIN。

表 1:产品详细信息

ID产品名称总额
Pro101笔记本电脑56000
Pro102移动端38000
Pro103耳机5000
Pro104电视25000
Pro105iPad60000

表 2:客户详细信息

客户名称客户地址客户年龄产品 ID
马丁·古普蒂尔美国旧金山26Pro101
James澳大利亚29Pro103
安巴蒂·威廉姆森新西兰27Pro102
乔弗拉·阿彻南非24Pro105
预兆英格兰29Pro107
Morgan英格兰20Pro108

我们有两个表:产品详细信息 (Product_Details) 表和客户详细信息 (Customer_Details) 表。让我们编写 SQL 查询,使用 RIGHT JOIN 连接表,如下所示:

执行查询后,它会产生下表。

Types of SQL JOIN

FULL JOIN 或 FULL Outer JOIN

它是 LEFT JOINRIGHT JOIN 的组合结果集。连接的表返回两个表中的所有记录,如果表中没有找到匹配项,则放置 NULL。它也称为 FULL OUTER JOIN

语法

或者,FULL OUTER JOIN

我们也可以通过 Venn 图表示全外连接,如下所示:

Types of SQL JOIN

表 1:产品详细信息

ID产品名称总额
Pro101笔记本电脑56000
Pro102移动端38000
Pro103耳机5000
Pro104电视25000
Pro105iPad60000

表 2:客户详细信息

客户名称客户地址客户年龄产品 ID
马丁·古普蒂尔美国旧金山26Pro101
James澳大利亚29Pro103
安巴蒂·威廉姆森新西兰27Pro102
乔弗拉·阿彻南非24Pro105
预兆英格兰29Pro107
Morgan英格兰20Pro108

我们有两个表:产品详细信息 (Product_Details) 表和客户详细信息 (Customer_Details) 表。让我们编写 SQL 查询,使用 FULL JOIN 连接表,如下所示:

执行查询后,它会产生下表。

Types of SQL JOIN

注意:MySQL 不支持 FULL JOIN 概念,因此我们可以使用 UNION ALL 子句来合并两个表。

以下是 UNION ALL 子句合并表的语法。


Types of SQL JOIN

CROSS JOIN (交叉连接)

它也称为 CARTESIAN JOIN,它返回两个或多个连接表的笛卡尔积。CROSS JOIN 生成一个表,该表将第一个表的每一行与第二个表的每一行合并。CROSS JOIN 不需要包含任何条件。

语法

或者,

表 1:产品详细信息

ID产品名称总额
Pro101笔记本电脑56000
Pro102移动端38000
Pro103耳机5000
Pro104电视25000
Pro105iPad60000

表 2:客户详细信息

客户名称客户地址客户年龄产品 ID
马丁·古普蒂尔美国旧金山26Pro101
James澳大利亚29Pro103
安巴蒂·威廉姆森新西兰27Pro102
乔弗拉·阿彻南非24Pro105
预兆英格兰29Pro107
Morgan英格兰20Pro108

我们有两个表:产品详细信息 (Product_Details) 表和客户详细信息 (Customer_Details) 表。让我们编写 SQL 查询,使用 FULL JOIN 连接表,如下所示:

执行查询后,它会产生下表。

Types of SQL JOIN

自连接 (SELF JOIN)

它是一个 SELF JOIN,用于通过将表自身连接起来,就像有两个表一样来创建表。它在 SQL 语句中至少对一个表进行临时命名。

语法

Tbl1Tbl2 是同一表的两个不同表别名。

表 1:产品详细信息

ID产品名称总额
Pro101笔记本电脑56000
Pro102移动端38000
Pro103耳机5000
Pro104电视25000
Pro105iPad60000

让我们编写 SQL 查询,使用 SELF JOIN 连接表,如下所示:

执行查询后,它会产生下表。

Types of SQL JOIN
下一个主题SQL JOIN