MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL CROSS JOIN

MySQL CROSS JOIN用于组合两个或多个表的所有可能性,并返回包含所有贡献表中每一行的结果。交叉联接也称为CARTESIAN JOIN,它提供所有关联表的笛卡尔乘积。笛卡尔积可以解释为第一个表中存在的所有行乘以第二个表中存在的所有行。它类似于内部联接,其中该子句不提供联接条件。
我们可以通过以下可视化表示来理解它,其中CROSS JOIN返回table1和table2的所有记录,以及每一行是两个表的行的组合。
MySQL CROSS JOIN

MySQL CROSS JOIN语法

CROSS JOIN关键字始终与SELECT语句一起使用,并且必须写在FROM子句之后。以下语法从两个连接表中提取所有记录:
SELECT column-lists
FROM table1
CROSS JOIN table2;
在上面的语法中,column-lists是要返回的列或字段的名称,而table1和table2是从中获取记录的表名。

MySQL CROSS JOIN示例

让我们举一些示例来了解Left Join或Left Outer Join子句的工作:

CROSS JOIN子句用于连接两个表

在这里,我们将创建两个表 "customers" "contacts",其中包含以下数据:
表: customers
MySQL CROSS JOIN
表: contacts
MySQL CROSS JOIN
要从两个表中获取所有记录,请执行以下查询:
SELECT *
FROM customers
CROSS JOIN contacts;
成功执行查询后,它将提供以下输出:
MySQL CROSS JOIN
执行CROSS JOIN语句时,您会发现它显示42行。这意味着来自客户表的七行乘以来自联系人表的六行。
注意: 为避免两次重复列的结果,建议使用单个列名而不是SELECT *语句。

MySQL交叉联接中的歧义列问题

有时,我们需要从多个表中获取选定的列记录。这些表可以包含一些相似的列名。在这种情况下,MySQL CROSS JOIN语句会引发错误: 列名不明确。这意味着在两个表中都存在该列的名称,而MySQL对要显示的列感到困惑。以下示例对其进行了更清晰的说明:
SELECT customer_id, cust_name, income, order_id, price
FROM customer
CROSS JOIN orders;
上面的CROSS JOIN引发错误,如下图所示:
MySQL CROSS JOIN
可以通过在列名之前使用表名来解决此问题。上面的查询可以改写为:
SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price
FROM customer
CROSS JOIN orders;
执行上述查询后,我们将获得以下输出:
MySQL CROSS JOIN

带有WHERE子句的LEFT JOIN

WHERE子句用于从表中返回 filter 结果。下面的示例使用CROSS JOIN子句对此进行了说明:
SELECT customers.customer_id, customers.cust_name, customers.income, orders.order_id, orders.price
FROM customers
CROSS JOIN orders
USING(customer_id) WHERE price>1500 AND price<5000;
此语句给出以下结果:
MySQL CROSS JOIN

MySQL交叉联接多个表

我们已经创建了两个名为 "customer" "orders" 的表。让我们再创建一个表,并将其命名为 "contacts",其中包含以下数据:
MySQL CROSS JOIN
在这里,我们将使用三个表来解释CROSS JOIN和LEFT JOIN。执行以下语句以加入三个表的客户,订单和联系人。在此语句中,首先在订单和联系人之间完成CROSS JOIN,然后根据指定条件执行LEFT JOIN。
SELECT * FROM customer
LEFT JOIN(orders CROSS JOIN contacts)
ON customer.customer_id=contact_id
ORDER BY income;
成功执行上述查询后,将提供以下输出:
MySQL CROSS JOIN
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4