Skip to content

连接查询


连接查询(Join Query)是数据库中的一种常见操作,用于根据两个或多个表中的相关列将它们的数据结合起来。通过连接查询,你可以从多个表中获取相关联的数据,而不是单独从每个表中获取数据。

在 SQL 中,连接查询通常是通过 JOIN 子句来实现的,常见的连接方式有 内连接外连接交叉连接自连接

  • 内连接(INNER JOIN):返回两个表中满足连接条件的所有行。如果某一表中的行在另一表中没有匹配的行,则该行不会出现在结果集中。

只有两边都有匹配的行才会被保留,因此不会出现因无匹配而导致的 NULL。

  • 外连接(OUTER JOIN):返回两个表中所有满足连接条件的行,以及在另一表中没有匹配的行。外连接又分为:
    1. 左外连接(LEFT JOIN 或 LEFT OUTER JOIN):返回左表中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则结果中对应的右表列为 NULL
    2. 右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN):返回右表中的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则结果中对应的左表列为 NULL
    3. 全外连接(FULL JOIN 或 FULL OUTER JOIN):返回左表和右表中的所有行。如果某一表中没有匹配的行,则结果中对应的列为 NULL
  • 交叉连接(CROSS JOIN):返回左表和右表的笛卡尔积,即左表的每一行与右表的每一行组合在一起。如果左表有 m 行,右表有 n 行,则结果集有 m * n 行。
  • 自连接(SELF JOIN):将同一张表与自身进行连接,通常用于查询表中行与其他行之间的关系。在 SQL 中,需要为同一张表指定不同的别名,以区分连接的不同实例。

在数据库中,笛卡尔积Cartesian Product)指的是当两个或多个表在没有明确连接条件的情况下进行连接时,结果集会包含所有可能的行组合。例如,如果表A有m行,表B有n行,那么笛卡尔积的结果集将包含m×n行。这种现象通常是不期望的,因为它会导致结果集异常庞大,影响查询性能。