MySQL CROSS JOIN2025年3月17日 | 阅读 3 分钟 MySQL CROSS JOIN 用于组合两个或多个表的**所有可能性**,并返回包含所有参与表的所有行的结果。CROSS JOIN 也称为笛卡尔 JOIN,它提供所有关联表的笛卡尔积。笛卡尔积可以解释为第一个表中的所有行乘以第二个表中的所有行。它类似于 Inner Join,但没有 JOIN 条件。 我们可以通过以下可视化表示来理解它,其中 CROSS JOIN 返回 table1 和 table2 中的所有记录,并且每一行都是两个表行的组合。 ![]() MySQL CROSS JOIN 语法CROSS JOIN 关键字始终与 SELECT 语句一起使用,并且必须写在 FROM 子句之后。以下语法会获取两个连接表的所有记录。 在上面的语法中,column-lists 是您要返回的列或字段的名称,table1 和 table2 是从中获取记录的表名。 MySQL CROSS JOIN 示例让我们通过一些示例来理解 Left Join 或 Left Outer Join 子句的工作原理。 用于连接两个表的 CROSS JOIN 子句在这里,我们将创建两个表 **"customers"** 和 **"contacts"**,它们包含以下数据: 表:customers ![]() 表:contacts ![]() 要获取两个表的所有记录,请执行以下查询: 成功执行查询后,将得到以下输出: ![]() 当执行 CROSS JOIN 语句时,您会发现它显示了 42 行。这意味着 customers 表中的七行乘以 contacts 表中的六行。 注意:为避免重复的列结果出现两次,建议使用单个列名而不是 SELECT * 语句。MySQL CROSS JOIN 中的歧义列问题有时,我们需要从多个表中获取选定的列记录。这些表可能包含一些相似的列名。在这种情况下,MySQL CROSS JOIN 语句会引发错误:列名不明确。这意味着列名同时存在于两个表中,MySQL 无法确定您想要显示哪个列。以下示例将更清晰地解释这一点: 上面的 CROSS JOIN 会像下面的图片一样引发错误: ![]() 通过在列名前加上表名,可以解决此问题。上述查询可以重写为: 执行上述查询后,我们将得到以下输出: ![]() 带 WHERE 子句的 LEFT JOINWHERE 子句用于从表中返回**过滤后的**结果。以下示例通过 CROSS JOIN 子句来说明这一点: 此语句产生以下结果: ![]() MySQL CROSS JOIN 连接多个表我们已经创建了名为 "customers" 和 "orders" 的两个表。让我们再创建一个名为 "contacts" 的表,其中包含以下数据: ![]() 在这里,我们将解释如何使用三个表进行 CROSS JOIN 和 LEFT JOIN。执行以下语句来连接三个表 customers、orders 和 contacts。在此语句中,首先在 orders 和 contacts 之间完成 CROSS JOIN,然后根据指定的条件执行 LEFT JOIN。 成功执行上述查询后,将得到以下输出: ![]() 下一个主题MySQL SELF JOIN |
我们请求您订阅我们的新闻通讯以获取最新更新。