MySQL CROSS JOIN用于合并两个或多个表的所有可能性,并返回包含所有表中每一行的结果。交叉联接也称为CARTESIAN JOIN,它提供所有关联表的笛卡尔乘积。笛卡尔积可以解释为第一个表中存在的所有行乘以第二个表中存在的所有行。它类似于内部联接,其中该子句不提供联接条件。
无涯教程可以通过以下可视化表示来理解它,其中CROSS JOIN返回table1和table2中的所有记录,并且每一行都是两个表的行的组合。
CROSS JOIN关键字始终与SELECT语句一起使用,并且必须在FROM子句之后编写。以下语法从两个连接表中获取所有记录:
SELECT column-lists FROM table1 CROSS JOIN table2;
在以上语法中,column-lists是要返回的列或字段的名称,而table1和table2是从中获取记录的表名。
举一些例子来了解Left Join或Left Outer Join子句的工作方式:
在这里,无涯教程将创建两个包含以下数据的表"customers" 和"contacts" :
表:customers
表:contacts
要从两个表中获取所有记录,请执行以下查询:
SELECT * FROM customers CROSS JOIN contacts;
成功执行查询后,它将给出以下输出:
当执行CROSS JOIN语句时,您将看到它显示42行。这意味着来自客户表的7行乘以来自联系人表的6行。
有时,无涯教程需要从多个表中获取选定的列记录。这些表可以包含一些相似的列名。在这种情况下,MySQL CROSS JOIN语句会引发错误:列名不明确。这意味着在两个表中都存在该列的名称。以下示例对其进行了更清晰的说明:
SELECT customer_id, cust_name, income, order_id, price FROM customer CROSS JOIN orders;
上面的CROSS JOIN引发错误,如下图所示:
可以通过在列名之前使用表名来解决此问题。上面的查询可以重写为:
SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders;
执行完上面的查询后,将获得以下输出:
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
该语句给出以下结果:
无涯教程已经创建了两个名为" customers" 和" orders" 的表。再创建一个表,并将其命名为" contacts",其中包含以下数据:
在这里,将使用三个表来解释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;
成功执行以上查询后,将给出以下输出:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Python实战 · 从0到1搭建直播视频平台 -〔Barry〕