SQL 程式札記 : 連接(JOIN)

2024/01/16閱讀時間約 4 分鐘

本文將介紹 SQL 中的連接(JOIN),連接(JOIN)是用於結合來自兩個或多個資料表的相關數據,建議讀過我之前發佈的幾篇"SQL學習筆記"之後再來看這篇。

連接(JOIN)的基本概念

連接(JOIN)是用於結合多個資料表的數據,它根據資料表間欄位的關聯性創建一個暫時性的組合表,方便複雜查詢,同時保持原表結構不變。連接(JOIN)的核心在於匹配多表的共同欄位來合併數據。

不同類型的連接(JOIN)

創建測試用資料

/*創建和插入數據到員工表 (Employees)*/
CREATE TABLE Employees (
EmployeeID int,
Name varchar(50),
DepartmentID int
);

INSERT INTO Employees (EmployeeID, Name, DepartmentID) VALUES (1, '張三', 101);
INSERT INTO Employees (EmployeeID, Name, DepartmentID) VALUES (2, '李四', 102);
INSERT INTO Employees (EmployeeID, Name, DepartmentID) VALUES (3, '王五', 103);
INSERT INTO Employees (EmployeeID, Name, DepartmentID) VALUES (4, '趙六', NULL);

/*創建和插入數據到部門表 (Departments)*/
CREATE TABLE Departments (
DepartmentID int,
DepartmentName varchar(50)
);

INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (101, '人事部');
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (102, '財務部');
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (104, '市場部');
', NULL);

INNER JOIN(內連接)

INNER JOIN(內連接)是一種基於等值條件的連接方式,它要求明確指定連接條件。在查詢結果中,只有那些滿足這些等值連接條件的資料行才會被返回。

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
/* 結果:只顯示員工表和部門表中匹配的行(張三、李四)。*/

LEFT JOIN(左外連接)

LEFT JOIN(左外連接),它確保左側資料表中的所有記錄都被包含在查詢結果裡,即便右側資料表在連接欄位上沒有匹配的記錄也不例外。

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
/* 結果:顯示所有員工,包括沒有對應部門的員工(張三、李四、王五、趙六)。*/

RIGHT JOIN(右外連接)

RIGHT JOIN(右外連接),它保證了右側資料表(table_name2)的所有記錄都出現在查詢結果中,即使左側資料表(table_name1)在連接欄位上沒有對應的匹配記錄也不影響。

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
/* 結果:顯示所有部門,包括沒有員工的部門(人事部、財務部、市場部)。*/

😊 感謝你的耐心閱讀,若是你喜歡這篇內容,可以透過以下方式表達你的喜歡 😊

❤️按個愛心|💬留言互動|🔗分享此文|📌追蹤阿梧|☕請喝咖啡

51會員
81內容數
「梧笙」即「吾生」,意即我的生命,朋友都叫我「阿梧(Awu)」,高雄人。我喜歡學習新技能,從程式設計到網路工具,再到社群經營和影片剪輯。日常興趣是打遊戲、看動漫、讀小說和聽音樂。我會把這些興趣寫成文章,如果你有任何想法或問題,歡迎來信到我的郵箱 [email protected]
留言0
查看全部
發表第一個留言支持創作者!