SQL Joins2025年6月24日 | 阅读9分钟 顾名思义,JOIN 意味着组合某些东西。在 SQL 中,JOIN 意味着 “组合两个或多个表”。 SQL Joins 是 SQL 查询中执行的基本操作,用于将多个表组合成一个输出表。它使用两个表中都存在的公共行来组合它们。我们使用 Joins 来一次性检索数据并对多个表执行操作。 Joins 允许高效地从多个表中检索数据。它有助于解决复杂的查询。为了合并两个或多个表,我们使用 join 关键字来创建一个临时数据表。 我们使用带有某些子句的 join 关键字,这些子句有助于获取我们想要的数据。SQL Joins 还有助于减少冗余并删除不必要的数据。它有助于规范化数据。 在 SQL 中,我们使用主键和外键来组合表。主键在第一个表中是唯一的且不为 NULL。外键在第二个表中也是唯一的,有助于合并表。 参数SELECT:SELECT 用于选择我们想要从表中检索的数据。 列:这些是我们需要在结果中显示的列。 JOIN:JOIN 用于根据公共列连接表中的行。 ON:ON 子句用于指定连接条件,它说明这些表是如何连接的。 示例为了更好地解释 Join,我们使用逐步解释的示例。 步骤 1我们创建第一个名为 actors 的表并插入数据。 创建表 actors将数据插入 actors从 actors 表中检索数据输出
步骤 2创建第二个名为 movies 的表并插入数据。 创建表 movies将数据插入 movies 从 movie 表中检索数据
步骤 3编写查询以执行 Join 操作以匹配电影 ID。 输出
说明在上面的示例中,我们创建了两个表并向其中插入了数据。在第一个表中,我们有演员姓名和 movie_id,我们将其连接到第二个表中,其中有 movie_id 和 movie_title。借助 SELECT 语句,我们只在输出中看到 actor_name 和 movie_title。 我们看到 movie_id 在两个表中都是公共的,这有助于连接这两个表。公共 movie_id 的数据被获取到输出中。借助 ON 子句,我们使用条件来连接表中的公共列。 连接类型![]()
INNER JOIN (内连接)Inner Join 是用于根据特定条件从表中获取匹配记录的语句。借助 INNER JOIN,我们根据公共列获取了两个表中存在的匹配行。 它从表中删除重复项。我们只在输出表中看到冗余数据。 文氏图 ![]() 语法参数FROM table1:借助 FROM,我们可以选择第一个表来连接第二个表。 INNER JOIN table2:INNER JOIN 用于获取两个表中匹配的数据。 示例为了更好地理解,我们可以看下面的示例。 表 1:员工
表 2:部门
执行内连接的查询输出
说明在上面的示例中,借助 emp_id,我们将连接两个表并在输出中显示 emp_id、name 和 department_name。 LEFT JOINLEFT JOIN 主要用于根据条件从左表中获取所有列和行,其中包括来自右表的列。当行存在于左表中但不存在于右表中时,返回 NULL 值。但当行存在于右表中但不存在于左表中时,它将不会出现在输出中。 文氏图 ![]() 语法 参数LEFT JOIN table2:LEFT JOIN 表示我们执行左连接操作,通过该操作我们获取来自 table 1 的所有数据和来自 table 2 的匹配数据。 示例表 1:客户
表 2:订单
左连接查询输出
说明在上面的示例中,安妮和安吉丽娜的订单匹配,结果中显示了两个表的订单详细信息,但凯拉没有订单,因此其 order_id 和产品详细信息为 null。 RIGHT JOINRIGHT JOIN 主要用于根据条件从右表中获取所有列和行,其中包括来自左表的列。当行存在于右表中但不存在于左表时,返回 NULL 值。但当行存在于左表中但不存在于右表中时,它将不会显示在输出中。 文氏图 ![]() 语法参数RIGHT JOIN table2:它将右表连接到左表,以从右表获取数据并从左表获取匹配数据。 示例表 1:员工
表 2:部门
执行右连接的查询输出
说明在上面的示例中,我们检索了所有部门的列表,包括员工姓名和员工部门名称。右连接在 Employees 表和 Departments 表之间使用并获取数据。 在输出中,我们看到所有部门的列表是从右表中获取的,公共数据是从左表中获取的,但是营销部门没有员工,因此该部门的 name 和 department_id 为 NULL。 FULL JOIN/FULL OUTER JOINSQL 中的 FULL JOIN 检索两个表中的所有行,无论值是 NULL 还是 NOT NULL。它是 LEFT JOIN 和 RIGHT JOIN 的组合。它创建多个表的组合,其中包括所有空值。 当我们想要将所有值(无论是否匹配)存储在一个表中时,使用它。它还存储缺失的数据。 注意:FULL JOIN 在 PostgreSQL、Microsoft SQL Server、Oracle、IBM DB2、Amazon Redshift 和 Snowflake 中受支持,但在 MySQL、SQLite、Google BigQuery 和 MariaDB 等数据库中不受支持。在不受支持的数据库中,使用 UNION 运算符来组合左表和右表。文氏图 ![]() 语法参数FULL JOIN table2:借助它,我们在 table1 和 table2 之间执行 FULL JOIN。 示例为了更好地理解 FULL JOIN,我们使用了两个表并执行了操作。 表 1:销售
表 2:客户
执行 FULL JOIN 的查询输出
说明在输出中,我们看到 ID 为 201 和 205 的客户有销售但没有反馈。这种类型的连接在业务中非常有用,可以跟踪客户和销售的记录。它有助于显示数据的完整视图。 自连接 (SELF JOIN)SELF JOIN 是一种用于将表与其自身进行比较的操作。为了执行自连接,它将行与同一表进行比较。当我们处理层次数据或比较同一表中的行时,它非常有用。 为了比较表,它会复制表并开始在它们之间进行比较。在同一表内连接表时,使用别名是强制性的。 文氏图 ![]() 语法参数FROM table_name AS A:这里,我们使用表一次,并为该表指定别名 A。 FROM table_name AS B:我们第二次使用同一个表,并使用不同的别名 B。 示例表:Employees
执行自连接的查询输出
说明在上面的示例中,我们将 Employees 表与其自身连接起来,以获取员工和经理的详细信息。我们将表与 e.manager_id = m.emp_id 进行比较,以将员工与其经理匹配。我们使用左连接,以便将没有经理的员工包含在输出中。 交叉连接CROSS JOIN 是一种将一个表的每一行与另一个表的每一行组合起来的操作。它在结果中返回所有可能的对组合。它也称为笛卡尔连接。我们使用 CROSS JOIN 来创建大型数据集以进行测试。当我们处理不相关的数据集并希望在输出表中获取数据时,也使用它。 文氏图 ![]() 语法参数CROSS JOIN table2:它用于返回结果中所有可能的行组合。 如果一个表有 x 行,另一个表有 y 行,它将在结果中返回 x*y 行。 示例为了更好地理解 CROSS JOIN,我们将在下面使用一个示例。 表 1:产品
表 2:商店
执行 CROSS JOIN 的查询输出
说明在上面的示例中,我们在产品表中选取了四个产品,并在商店表中选取了三个商店及其位置和 store_id。当我们执行交叉连接时,它返回 product_name 和 store_location 的笛卡尔积。每个产品都与每个商店配对。 结论SQL Joins 是允许根据列组合来自多个表的数据的操作。它能够高效地检索信息。通过使用各种类型的 Joins,如 Inner Join、Left Join、Right Join、Full Join、Self Join 和 Cross Join。 借助 Joins,我们从行中检索所有匹配和不匹配的数据。Joins 适用于关系数据库。我们可以处理复杂的查询并高效地处理数据。 下一主题SQL Outer Join |
我们请求您订阅我们的新闻通讯以获取最新更新。