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

2021-09-16 10:25:08 浏览数 (3468)

在单个查询中,JOIN 用于从多个表中获取数据。 在 MySQL 中,JOIN 聚合来自多个表的数据并将其作为单个结果。关系数据库中的每张表都包含唯一或通用的数据,并且每张表都是逻辑连接的。JOIN 用于从共享公共字段的表中获取数据。

在MySQL 中的 JOIN 是什么?

在 MySQL 中,JOIN语句是一种基于这些表中公共字段的值在数据库中的几个表之间连接数据的技术。相同的列名和数据类型通常存在于作为公共值链接的表中。连接键或公共键是指共享列。SELECT、UPDATE和DELETE命令都可以使用 JOIN。

JOIN 入门

MySQL JOIN 类型指定查询中的两个表如何链接。INNER JOIN、OUTER JOIN和CROSS JOIN是 MySQL 支持的三种 JOIN 子句。LEFT JOINs 和RIGHT JOINs 是两种不同类型的 OUTER JOIN。为了更直观地展示 JOIN 如何操作,我们需要创建一个新模式并插入一些示例数据。

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)
);

接下来我们要做的是向其中插入一些数据。您可以根据需要在表中插入任意数量的用户。

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 的语法INNER JOIN:

MySQL:

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

Arctype 中的 MySQL INNER JOIN

MySQL中的外部连接

OUTER JOIN 与 INNER JOIN 相比,产生不匹配的记录以及匹配的行。如果连接表中的行不匹配,则将显示 NULL 值。MySQL 有两种不同形式的 OUTER JOIN: MySQLLEFT JOIN和 MySQL RIGHT JOIN。让我们更详细地了解它们中的每一个。

MySQL LEFT JOIN 子句

LEFT JOINs 允许您从表 A 和表 B 中获取满足连接条件的所有条目。对于表 A 中不符合条件的记录,将显示 NULL 值。检查下面的维恩图以更好地理解 LEFT JOIN。

MySQL LEFT JOIN 子句

以下是 MySQL 的语法LEFT JOIN:

MySQL:

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

Arctype 中的 MySQL LEFT JOIN

注意:该LEFT JOIN关键字返回左表 (Customers) 中的所有记录,即使右表 (Orders) 中没有匹配项。

MySQL 右连接子句

因此,RIGHT JOINs 允许您获取表 B 中的所有条目以及满足连接条件的表 A 中的条目。为表 B 中不符合条件的记录显示 NULL 值。为了更好地理解 RIGHT JOIN,请参见下面的维恩图。

MySQL 右连接子句

以下是 MySQL 的语法RIGHT JOIN:

MySQL:

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

Arctype 中的 MySQL 右连接

注意:该RIGHT JOIN关键字返回右表 (Employees) 中的所有记录,即使左表 (Orders) 中没有匹配项。

MySQL 交叉连接子句

MySQL CROSS JOIN,通常称为笛卡尔连接,返回每个表中所有可能的行组合。如果不提供额外条件,则通过将表 A 的每一行与表 B 中的所有行相乘得到结果集。检查下面的维恩图以了解有关 CROSS JOINS 的更多信息。

MySQL 交叉连接子句

您认为什么时候需要这种 JOIN?例如,假设您的任务是查找产品和颜色的所有可能组合。在这种情况下,CROSS JOIN 将非常有用。

注意: CROSS JOIN可能会导致相当大的结果集!

以下是 MySQL 的语法CROSS JOIN:

MySQL:

SELECT 
    columns
FROM 
    tableA
CROSS JOIN tableB;

Arctype 中的 MySQL 交叉连接

加入技巧

在 MySQL 中,JOIN 允许您执行单个 JOIN 查询而不是许多简单的查询。因此,您将获得更高的速度、更低的服务器开销以及更少的 MySQL 和您的应用程序之间的数据传输。与 SQL Server 不同,MySQL 没有用于 FULL OUTER JOIN 的独特 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,您还可以连接两个以上的表。

MySQL:

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

在 Arctype 中加入 2 个以上的表

为什么 JOINS 这么有用?

  • 比较快是一个特点。在单个查询中,JOINS 允许您从两个或多个链接的数据库表中获取数据。JOINS 非常有价值,因为它们比一个一个地运行查询来获得相同的结果节省了时间。
  • MySQL 效率更高。使用 JOINS 的另一个优点是 MySQL 性能更好,因为连接是通过索引执行的。
  • 使用 JOINS 降低了服务器负载。因为你只执行一个查询,你会得到更好更快的结果。

任何分析师或 DBA 都必须牢牢掌握 JOIN 并在日常工作中自由地使用它们。这就是 Arctype for MySQL 派上用场的时候了。即使对于复杂的 JOIN 子句,其复杂的代码完成也能完美运行。Arctype for MySQL 将为您提供完整的 JOIN 子句,因此您不必记住数百个列名或别名。其功能丰富的功能使创建复杂的查询和管理 JOIN 条件变得轻而易举。