成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何正確地選擇 MySQL 的 JOIN 查詢?

開發 數據庫
JOIN有哪些類型?它們之間有什么區別?在實際工作中,我們該如何選擇呢?這篇文章我們來聊一聊。

在 MySQL中,JOIN是用于在兩個或多個表之間組合行的三種不同的連接類型。那么,JOIN有哪些類型?它們之間有什么區別?在實際工作中,我們該如何選擇呢?這篇文章我們來聊一聊。

一、JOIN類型

MySQL的JOIN查詢,主要包含以下 5種:

  • INNER JOIN:內連接,結果返回兩個表的匹配數據。
  • LEFT JOIN:也叫LEFT OUTER JOIN左外連接,結果來自左表,并從右表匹配數據。
  • RIGHT JOIN:也叫RIGHT OUTER JOIN右外連接,結果來自右表,并從左表匹配數據。
  • FULL JOIN:也叫FULL OUTER JOIN完整的外部連接,在匹配數據時,兩個表都來自兩個表。
  • CROSS JOIN:交叉連接,返回兩個表的笛卡爾積。

下面我們將一一詳細分析:

1. INNER JOIN

INNER JOIN 返回的是兩個表中滿足連接條件的記錄,即只顯示兩個表中匹配的行。

語法:

SELECT 列
FROM 表A
INNER JOIN 表B ON 表A.列 = 表B.列;

示例:假設有以下兩個表:

表A:Employees

EmployeeID

Name

DepartmentID

1

Alice

10

2

Bob

20

3

Carol

NULL

表B:Departments

DepartmentID

DepartmentName

10

HR

20

IT

30

Finance

執行 INNER JOIN:

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

結果:

Name

DepartmentName

Alice

HR

Bob

IT

說明:Carol 沒有關聯的 DepartmentID,因此不在結果集中。

2. LEFT JOIN

LEFT JOIN 返回左表(第一個表)中的所有記錄,以及右表中滿足連接條件的記錄。如果右表中沒有匹配的記錄,右表的結果為 NULL。

語法:

SELECT 列
FROM 表A
LEFT JOIN 表B ON 表A.列 = 表B.列;

示例:使用上述表A 和表B,執行 LEFT JOIN:

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

結果:

Name

DepartmentName

Alice

HR

Bob

IT

Carol

NULL

說明:Carol 在左表中存在,但在右表中沒有對應的 DepartmentID,因此 DepartmentName 為 NULL。

3. RIGHT JOIN

RIGHT JOIN 返回右表(第二個表)中的所有記錄,以及左表中滿足連接條件的記錄。如果左表中沒有匹配的記錄,左表的結果為 NULL。

語法:

SELECT 列
FROM 表A
RIGHT JOIN 表B ON 表A.列 = 表B.列;

示例:使用上述表A 和表B,執行 RIGHT JOIN:

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

結果:

Name

DepartmentName

Alice

HR

Bob

IT

NULL

Finance

說明:部門 "Finance" 存在于右表,但在左表中沒有關聯的員工,因此 Name 為 NULL。

4. FULL JOIN

FULL JOIN 返回兩個表中的所有記錄。如果在一個表中沒有匹配的記錄,另一個表中的結果為 NULL。它結合了 LEFT JOIN 和 RIGHT JOIN 的結果。

MySQL 中的情況:遺憾的是,MySQL 并不直接支持 FULL OUTER JOIN。要模擬這種行為,可以使用 UNION 來組合 LEFT JOIN 和 RIGHT JOIN 的結果。

模擬 FULL OUTER JOIN 的語法:

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID
UNION
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

示例結果(基于前述表A 和表B):

Name

DepartmentName

Alice

HR

Bob

IT

Carol

NULL

NULL

Finance

說明:包括了所有員工和所有部門,不論是否有匹配。

5. CROSS JOIN

CROSS JOIN 返回兩個表的笛卡爾積,即左表的每一行與右表的每一行組合,生成所有可能的行組合。沒有連接條件。

語法:

SELECT 列
FROM 表A
CROSS JOIN 表B;

示例:使用上述表A(3行)和表B(3行),執行 CROSS JOIN:

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
CROSS JOIN Departments;

結果:

Name

DepartmentName

Alice

HR

Alice

IT

Alice

Finance

Bob

HR

Bob

IT

Bob

Finance

Carol

HR

Carol

IT

Carol

Finance

說明:總共有 3(Employees) × 3(Departments) = 9 行結果。

二、總結

本文,我們分析了 MySQL 中的 5種連接類型

  • INNER JOIN:僅返回兩個表中匹配的記錄。
  • LEFT JOIN:返回左表中的所有記錄,以及右表中匹配的記錄;沒有匹配的右表記錄顯示 NULL。
  • RIGHT JOIN:返回右表中的所有記錄,以及左表中匹配的記錄;沒有匹配的左表記錄顯示 NULL。
  • FULL JOIN:返回兩個表中的所有記錄;MySQL 需通過 UNION 模擬。
  • CROSS JOIN:返回兩個表的所有可能的行組合(笛卡爾積)。

在實際工作中,選擇哪種 JOIN 類型取決于具體的數據需求和查詢目標。理解各類 JOIN 的工作原理有助于編寫高效且準確的 SQL 查詢。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2022-11-23 08:00:00

開發Regulator調試

2015-10-28 10:29:09

數據中心運輸硬驅

2011-05-13 09:01:33

2022-08-02 09:56:47

入口文件代碼

2020-08-19 14:22:09

程序員測試互聯網

2025-05-06 00:12:10

2015-03-23 11:42:54

2022-09-16 14:13:50

人工智能樓宇自動化

2021-11-05 15:10:28

UbuntuLinuxJAVA_HOME

2024-04-02 11:38:31

模型訓練

2023-04-06 19:06:28

ChatGPT開發摔倒識別

2016-03-01 17:48:32

WLAN控制器網絡管理

2015-02-12 09:53:50

云存儲中小企業IT建設

2020-12-22 13:50:56

物聯網5G大數據

2019-08-23 09:27:25

機器學習NLP誤差分析

2019-07-31 15:14:40

Python數據科學可視化

2020-06-01 11:01:28

智慧城市物聯網技術

2013-01-07 11:38:54

VMware認證

2023-05-10 11:34:06

springboot日志服務器

2022-05-17 08:44:33

數據庫MySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频www | 国产色网| 天堂国产 | 久久亚洲综合 | 久久夜视频 | 欧美一区在线视频 | 精品欧美一区二区在线观看欧美熟 | www.久久久久久久久久久 | 日韩在线观看网站 | 精品视频一区二区在线观看 | 成人在线观看亚洲 | 成人免费视频网站在线看 | 中文在线观看视频 | 国产精品久久久久久久粉嫩 | 精品1区2区 | 99热最新| 91av在线看 | 黑人巨大精品欧美一区二区免费 | av三级在线观看 | 亚洲一页| av手机在线看 | 欧美一级α片 | 日本天天操 | 欧美中国少妇xxx性高请视频 | 国产激情三区 | 国产99久久久国产精品 | 久久精品国产一区二区电影 | 黄色网址在线免费观看 | 一级毛片免费完整视频 | 午夜影院免费体验区 | 国产精品国产三级国产aⅴ原创 | 国产亚洲精品精品国产亚洲综合 | 亚洲毛片在线观看 | 亚洲区一区二 | 久久99精品久久久久久青青日本 | 久久久久国产一区二区三区 | 久久精品国产亚洲夜色av网站 | 一级免费看片 | 亚洲美女在线一区 | 色综合久久久久 | 91亚洲国产成人久久精品网站 |