在 MySQL 中连接 3 个表

Preet Sanghavi 2023年1月3日
在 MySQL 中连接 3 个表

在本教程中,我们将学习如何在 MySQL 中连接三个表。

企业和组织可能必须基于所有三个表共有的特定匹配列同时可视化三个表。在连接的帮助下,这个操作在 MySQL 中是允许的。

我们可以根据我们的要求从不同的表中获取列,并根据所有共同的特定列连接表。例如,我们有三个名为 table_1table_2table_3 的表。

第一个表有名字,第二个有姓氏,最后一个有地址。每个表都有一个主 ID,可以使用公共主 ID MySQL 将这些表合并或可视化为一个表。

让我们了解这种方法是如何工作的。但在开始之前,我们必须通过创建一个表 student_details 以及几行来创建三个虚拟数据集。

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

要查看数据中的条目,我们使用以下代码。

SELECT * FROM student_details;

输出:

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

接下来,我们需要另一个名为 student_marks 的表,其中包含与 stu_id 对应的每个学生的分数。我们可以使用以下查询创建这样的表。

-- create the table student_details
CREATE TABLE student_marks(
  stu_id int,
  stu_marks int
);
-- insert rows to the table student_details
INSERT INTO student_marks(stu_id,stu_marks) 
 VALUES(1,10),
 (2,20),
 (3,30),
 (4,7),
 (5,9),
 (6,35),
 (7,15);

我们可以使用以下查询可视化该表。

SELECT * from student_marks;

输出:

stu_id  stu_marks
1		10
2		20
3		30
4		7
5		9
6		35
7		15

最后,让我们创建一个名为 student_email 的第三个表。该表将拥有 stu_idstu_email 列。stu_id 列对于所有三个表都是通用的,而 stu_email 列将代表正在考虑的学生的电子邮件地址。

我们可以在以下查询的帮助下创建第三个表。

-- CREATE TABLE student_email
CREATE TABLE student_email(
  stu_id int,
  stu_email varchar(255) DEFAULT NULL
);

-- insert rows to the table student_email
INSERT INTO student_email(stu_id,stu_email) 
 VALUES(1,"abc@d.in"),
 (2,"SEAabc@d.in"),
 (3,"DEabc@d.in"),
 (4,"KARTabc@d.in"),
 (5,"MARIOabc@d.in"),
 (6,"SPETERabc@d.in"),
 (7,"DAVIDabc@d.in");

我们可以使用以下查询可视化上面创建的 student_email 表。

SELECT * from student_email;

输出:

stu_id	stu_email
1		abc@d.in
2		SEAabc@d.in
3		DEabc@d.in
4		KARTabc@d.in
5		MARIOabc@d.in
6		SPETERabc@d.in
7		DAVIDabc@d.in

让我们尝试在公共列 stu_id 的帮助下从上面创建的三个表中获取三个值,特别是学生的名字、分数和电子邮件地址。

在 MySQL 中连接 3 个表

要合并我们的三个表,我们可以使用公共列并借助以下查询从不同的表中获取不同的列。

select a.stu_firstName as "Name", b.stu_email as "Email", c.stu_marks as "Marks"
from student_details a, student_email b, student_marks c
where a.stu_id = b.stu_id and b.stu_id = c.stu_id 

如上面的查询所示,我们正在根据共同的学生身份连接三个表。上面代码的输出如下。

Name	Email			Marks
Preet	abc@d.in		10
Rich	SEAabc@d.in		20
Veron	DEabc@d.in		30
Geo		KARTabc@d.in	7
Hash	MARIOabc@d.in	9
Sachin	SPETERabc@d.in	35
David	DAVIDabc@d.in	15
注意
在输出块中,我们有别名 NameEmailMarks 以及 MySQL 中的 AS 关键字,以增加程序的可读性。

因此,借助 WHEREON 子句,我们可以有效地连接三个不同的表,并根据 MySQL 中的常见条件将它们的列可视化为一个。

作者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

相关文章 - MySQL Join