0
点赞
收藏
分享

微信扫一扫

SQL 内部联接 – 如何在 SQL 和 MySQL 中联接 3 个表

念川LNSC 2022-04-17 阅读 33
windows

使用数据库时,可能需要将几个不同表中的数据放在一起。本文将向您展示如何操作。

我已经在这里和这里写了关于SQL连接的文章,但让我们先花点时间回顾一下连接是如何工作的,特别是特定于MySQL的语法。

SQL 连接声明

Join 是一种语句,它允许您将两个表放在一起,匹配彼此相关的行,并仅保留可以匹配的行,而不保留不成对的行。

SELECT * FROM table1 
  INNER JOIN table2
  ON table1.id = table2.id;

两个表之间的通用内部连接语句该语句指示哪个是第一个表,然后第二个表名紧跟在关键字之后写入。 SELECT ... FROM INNER JOIN

语句中应如何连接这两个表。在这种情况下,两个表使用关系进行联接。 ON table1.id = table2.id

可以将多个连接语句一起使用,以同时连接多个表。

SELECT *
  FROM table1
  INNER JOIN table2
  ON table1.id = table2.id
  INNER JOIN table3
  ON table2.id = table3.id;

三个表之间的通用内部连接语句为此,请添加第二个语句和第二个语句来指示第三个表和第二个关系。 INNER JOIN ON

让我们来谈谈表之间可以建立的关系,以及为什么您可能希望将三个表连接在一起。

SQL 中表之间的关系

当您的表彼此相关时,它们的关系可以是各种类型之一。

一对多

在一对多关系中,第一个表的一行可以与第二个表的多行相关。

在关系数据库中,这可以通过第二个表来实现,该表具有一列,该列表示该行与第一个表的哪一行相关。 first_table_id

多对一

在多对一关系中,第一个表的一行可以与第二个表的一行相关,第二个表的一行可以与第一个表的多行相关。

在关系数据库中,这可以通过第一个表具有一列来实现,该列表示该行与第二个表的哪一行相关。 second_table_id

多对一

多对多

在这种情况下,多行与多行相关。

多对多这种关系不能像 SQL 表那样表示 – 您需要在两个表之间添加耦合表,以便表之间只存在多对一和一对多关系。

中间表的每一行表示左表的行与右表的行之间的一种关系。

在 MySQL 中,中间表将有一列 for 和一列 ,每个组合都是唯一的。 first_table_id second_table_id

在实践中联接 SQL 表

让我们想象一下,我们有一个组织的数据库,其中有一个包含团队(他们的姓名和其他标识信息)的表,以及一个包含项目(名称,进度等)的表。

编号TEAM_NAME专业
1香蕉投掷者香蕉
2木材啃食者啃木头
3粉红大象踩在地上
4蓬松的土豆工作和睡眠
编号PROJECT_NAME进展
1大坝建设需要更多的木材啃咬和地面踩踏
2香蕉蛋糕有人正在吃掉所有的香蕉
3睡眠研究给很多睡眠没有足够的研究

由于一个团队可以处理多个项目,并且一个项目可以由多个团队处理,因此还有第三个表用于跟踪团队与项目的匹配。

PROJECT_IDGROUP_ID
12
13
21
31
32
33
34

当我们需要以人类可读的方式查看表中的信息时,我们可以使用语句将所有内容放在一起,如下所示: JOIN

SELECT
  teams.team_name AS team_name,
  projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
  ON teams.id = matches.team_id
INNER JOIN matches
  ON matches.project_id = projects.id
ORDER BY teams.id;

我们从每个表中选择要显示的列,并带有语句。 SELECT

我们指定如何将表的行与语句组合在一起。 ON

我们以我们喜欢的方式对行进行排序。带有语句。 ORDER BY

语句和 表示使用表的行进行组合。输出表的每一行都具有使用表中的项目 ID 和团队 ID 对组合的项目名称和团队名称。 ON teams.id = matches.team_id matches.projects_id = projects.id matches matches

输出表将如下所示。

TEAM_NAMEPROJECT_NAME
香蕉投掷者香蕉蛋糕
香蕉投掷者睡眠研究
木材啃食者大坝建设
木材啃食者睡眠研究
粉红大象大坝建设
粉红大象大坝建设
蓬松的土豆睡眠研究

表中没有直接的列。该表未显示在输出中,但它用作有关如何合并 和 表的行的说明。 matches matches teams projects

举报

相关推荐

0 条评论