MySQL - Cross Join

MySQL - Cross Join 首页 / MySQL入门教程 / MySQL - Cross Join

MySQL CROSS JOIN用于合并两个或多个表的所有可能性,并返回包含所有表中每一行的结果。交叉联接也称为CARTESIAN JOIN,它提供所有关联表的笛卡尔乘积。笛卡尔积可以解释为第一个表中存在的所有行乘以第二个表中存在的所有行。它类似于内部联接,其中该子句不提供联接条件。

无涯教程可以通过以下可视化表示来理解它,其中CROSS JOIN返回table1和table2中的所有记录,并且每一行都是两个表的行的组合。

MySQL CROSS JOIN

CROSS JOIN语法

CROSS JOIN关键字始终与SELECT语句一起使用,并且必须在FROM子句之后编写。以下语法从两个连接表中获取所有记录:

SELECT column-lists
FROM table1
CROSS JOIN table2;

在以上语法中,column-lists是要返回的列或字段的名称,而table1和table2是从中获取记录的表名。

举一些例子来了解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行。这意味着来自客户表的7行乘以来自联系人表的6行。

有时,无涯教程需要从多个表中获取选定的列记录。这些表可以包含一些相似的列名。在这种情况下,MySQL CROSS JOIN语句会引发错误:列名不明确。这意味着在两个表中都存在该列的名称。以下示例对其进行了更清晰的说明:

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

CROSS JOIN WHERE 子句

WHERE子句用于从表中返回过滤器结果。下面的示例使用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

该语句给出以下结果:

MySQL CROSS JOIN

CROSS JOIN多个表

无涯教程已经创建了两个名为" customers" 和" 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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Nginx核心知识150讲 -〔陶辉〕

零基础学Java -〔臧萌〕

安全攻防技能30讲 -〔何为舟〕

Web安全攻防实战 -〔王昊天〕

Go 语言项目开发实战 -〔孔令飞〕

Dubbo源码剖析与实战 -〔何辉〕

Python实战 · 从0到1搭建直播视频平台 -〔Barry〕

结构写作力 -〔李忠秋〕

结构执行力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)