App下載

MySQL中的JOIN指南方法分享!干貨!

神仙女孩破破 2021-09-16 10:25:08 瀏覽數(shù) (2993)
反饋

在單個(gè)查詢中,JOIN 用于從多個(gè)表中獲取數(shù)據(jù)。 在 MySQL 中,JOIN 聚合來自多個(gè)表的數(shù)據(jù)并將其作為單個(gè)結(jié)果。關(guān)系數(shù)據(jù)庫(kù)中的每張表都包含唯一或通用的數(shù)據(jù),并且每張表都是邏輯連接的。JOIN 用于從共享公共字段的表中獲取數(shù)據(jù)。

在MySQL 中的 JOIN 是什么?

在 MySQL 中,JOIN語(yǔ)句是一種基于這些表中公共字段的值在數(shù)據(jù)庫(kù)中的幾個(gè)表之間連接數(shù)據(jù)的技術(shù)。相同的列名和數(shù)據(jù)類型通常存在于作為公共值鏈接的表中。連接鍵或公共鍵是指共享列。SELECT、UPDATE和DELETE命令都可以使用 JOIN。

JOIN 入門

MySQL JOIN 類型指定查詢中的兩個(gè)表如何鏈接。INNER JOIN、OUTER JOIN和CROSS JOIN是 MySQL 支持的三種 JOIN 子句。LEFT JOINs 和RIGHT JOINs 是兩種不同類型的 OUTER JOIN。為了更直觀地展示 JOIN 如何操作,我們需要?jiǎng)?chuàng)建一個(gè)新模式并插入一些示例數(shù)據(jù)。

MySQL:

CREATE TABLE Users (
    UserID int,
    UserName varchar(255),
    Password varchar(255),
    isActive boolean
);

CREATE TABLE Userprofile (
    ProfileID int,
    LastName varchar(255),
    FirstName varchar(255),
    Email varchar(255),
    Phone varchar(255)
);

接下來我們要做的是向其中插入一些數(shù)據(jù)。您可以根據(jù)需要在表中插入任意數(shù)量的用戶。

MySQL:

INSERT INTO Users
    (UserID, UserName,Password, isActive)
VALUES
    (1,'krofax','krofax1234', true);

INSERT INTO userprofile
    (profileid, lastname, firstname, email, phone)
VALUES
    (1,'Ada', 'George', 'adageorge@gmail.com','1290003456');

MySQL INNER JOIN 子句

使用 INNER JOIN 僅檢索常見的匹配記錄。該INNER JOIN子句將表 A 和表 B 中的記錄檢索限制為滿足連接要求的記錄。它是最常用的 JOIN 類型。檢查下面的維恩圖以更好地理解 INNER JOIN。

MySQL INNER JOIN 子句

以下是 MySQL 的語(yǔ)法INNER JOIN:

MySQL:

SELECT 
    columns
FROM 
    tableA 
INNER JOIN tableB
    ON tableA.column = tableB.column;

Arctype 中的 MySQL INNER JOIN

MySQL中的外部連接

OUTER JOIN 與 INNER JOIN 相比,產(chǎn)生不匹配的記錄以及匹配的行。如果連接表中的行不匹配,則將顯示 NULL 值。MySQL 有兩種不同形式的 OUTER JOIN: MySQLLEFT JOIN和 MySQL RIGHT JOIN。讓我們更詳細(xì)地了解它們中的每一個(gè)。

MySQL LEFT JOIN 子句

LEFT JOINs 允許您從表 A 和表 B 中獲取滿足連接條件的所有條目。對(duì)于表 A 中不符合條件的記錄,將顯示 NULL 值。檢查下面的維恩圖以更好地理解 LEFT JOIN。

MySQL LEFT JOIN 子句

以下是 MySQL 的語(yǔ)法LEFT JOIN:

MySQL:

SELECT 
    columns
FROM 
    tableA
LEFT JOIN tableB
    ON tableA.column = tableB.column;

Arctype 中的 MySQL LEFT JOIN

注意:該LEFT JOIN關(guān)鍵字返回左表 (Customers) 中的所有記錄,即使右表 (Orders) 中沒有匹配項(xiàng)。

MySQL 右連接子句

因此,RIGHT JOINs 允許您獲取表 B 中的所有條目以及滿足連接條件的表 A 中的條目。為表 B 中不符合條件的記錄顯示 NULL 值。為了更好地理解 RIGHT JOIN,請(qǐng)參見下面的維恩圖。

MySQL 右連接子句

以下是 MySQL 的語(yǔ)法RIGHT JOIN:

MySQL:

SELECT 
    columns
FROM 
    tableA
RIGHT JOIN tableB
    ON tableA.column = tableB.column;

Arctype 中的 MySQL 右連接

注意:該RIGHT JOIN關(guān)鍵字返回右表 (Employees) 中的所有記錄,即使左表 (Orders) 中沒有匹配項(xiàng)。

MySQL 交叉連接子句

MySQL CROSS JOIN,通常稱為笛卡爾連接,返回每個(gè)表中所有可能的行組合。如果不提供額外條件,則通過將表 A 的每一行與表 B 中的所有行相乘得到結(jié)果集。檢查下面的維恩圖以了解有關(guān) CROSS JOINS 的更多信息。

MySQL 交叉連接子句

您認(rèn)為什么時(shí)候需要這種 JOIN?例如,假設(shè)您的任務(wù)是查找產(chǎn)品和顏色的所有可能組合。在這種情況下,CROSS JOIN 將非常有用。

注意: CROSS JOIN可能會(huì)導(dǎo)致相當(dāng)大的結(jié)果集!

以下是 MySQL 的語(yǔ)法CROSS JOIN:

MySQL:

SELECT 
    columns
FROM 
    tableA
CROSS JOIN tableB;

Arctype 中的 MySQL 交叉連接

加入技巧

在 MySQL 中,JOIN 允許您執(zhí)行單個(gè) JOIN 查詢而不是許多簡(jiǎn)單的查詢。因此,您將獲得更高的速度、更低的服務(wù)器開銷以及更少的 MySQL 和您的應(yīng)用程序之間的數(shù)據(jù)傳輸。與 SQL Server 不同,MySQL 沒有用于 FULL OUTER JOIN 的獨(dú)特 JOIN 類型。但是,您可以組合 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 以獲得與 FULL OUTER JOIN 相同的效果。

MySQL:

SELECT 
    * 
FROM 
    tableA
LEFT JOIN tableB 
    ON tableA.id = tableB.id
UNION
SELECT 
    * 
FROM 
    tableA
RIGHT JOIN tableB 
    ON tableA.id = tableB.id

MySQL JOIN 子句

使用 MySQL JOIN,您還可以連接兩個(gè)以上的表。

MySQL:

SELECT 
    *
FROM 
    tableA
LEFT JOIN tableB
    ON tableA.id = tableB.id
LEFT JOIN tableC
    ON tableC.id = tableA.id;

在 Arctype 中加入 2 個(gè)以上的表

為什么 JOINS 這么有用?

  • 比較快是一個(gè)特點(diǎn)。在單個(gè)查詢中,JOINS 允許您從兩個(gè)或多個(gè)鏈接的數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)。JOINS 非常有價(jià)值,因?yàn)樗鼈儽纫粋€(gè)一個(gè)地運(yùn)行查詢來獲得相同的結(jié)果節(jié)省了時(shí)間。
  • MySQL 效率更高。使用 JOINS 的另一個(gè)優(yōu)點(diǎn)是 MySQL 性能更好,因?yàn)檫B接是通過索引執(zhí)行的。
  • 使用 JOINS 降低了服務(wù)器負(fù)載。因?yàn)槟阒粓?zhí)行一個(gè)查詢,你會(huì)得到更好更快的結(jié)果。

任何分析師或 DBA 都必須牢牢掌握 JOIN 并在日常工作中自由地使用它們。這就是 Arctype for MySQL 派上用場(chǎng)的時(shí)候了。即使對(duì)于復(fù)雜的 JOIN 子句,其復(fù)雜的代碼完成也能完美運(yùn)行。Arctype for MySQL 將為您提供完整的 JOIN 子句,因此您不必記住數(shù)百個(gè)列名或別名。其功能豐富的功能使創(chuàng)建復(fù)雜的查詢和管理 JOIN 條件變得輕而易舉。


SQL

0 人點(diǎn)贊