MySQL 中的完全連線

Preet Sanghavi 2023年1月3日
MySQL 中的完全連線

本教程旨在探索如何在 MySQL 中執行完全連線或完全外部連線。

完全外連線用於合併或組合來自兩個單獨表的整個資料。例如,假設我們有兩個名為 student_idstudent_name 的表,它們有一個公共列。

我們可以通過匹配公共列的值以及 UNIONLEFT JOINRIGHT JOIN,在 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_marks
CREATE TABLE student_marks(
  stu_id int,
  stu_marks int
);
-- insert rows to the table student_marks
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_detailsstudent_marks 表進行完全外連線,其中 stu_id 作為兩個表中的公共列。

MySQL 中的 FULL JOIN 語句

FULL OUTER JOIN 技術的基本語法如下。

SELECT * FROM table_1
LEFT JOIN table_2 ON table_1.id = table_2.id
UNION
SELECT * FROM table_1
RIGHT JOIN table_2 ON table_1.id = table_2.id

如上面的查詢所示,我們的目標是在左連線右連線的幫助下,基於公共的 id 列連線名為 table_1table_2 的兩個表。

我們可以使用以下查詢來解決 student_detailsstudent_marks 表的問題。

-- Full Join using UNION
SELECT * FROM student_details
LEFT JOIN student_marks ON student_details.stu_id = student_marks.stu_id
UNION
SELECT * FROM student_details
RIGHT JOIN student_marks ON student_details.stu_id = student_marks.stu_id

如上面的程式碼所示,我們正在根據 stu_id 列合併兩個正在考慮的表。上面程式碼的輸出如下。

stu_id	stu_firstName	stu_lastName  stu_id	stu_marks
1		Preet			Sanghavi		1		10
2		Rich			John			2		20
3		Veron			Brow			3		30
4		Geo				Jos				4		7
5		Hash			Shah			5		9
6		Sachin			Parker			6		35
7		David			Miller			7		15

從輸出塊中可以看出,stu_marks 在完全外連線後根據 stu_id 正確分配給每個學生。

注意
我們可以通過在 left joinright join 的幫助下指定要連線的確切列名來避免重複列 stu_id。由於我們查詢的 UNION 子句,這將建立一個沒有重複行的外連線。

因此,藉助 UNION 語句以及兩個不同表上的左連線右連線,我們可以有效地在 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 Query