SQL中的交叉连接-cross join

本文介绍了SQL中的交叉连接(Cross Join),它产生的是两个表的笛卡尔积,即结果是两个表行数的乘积。在MySQL中,CROSS JOIN与INNER JOIN在不指定ON条件时等效。虽然在某些情况下可以省略JOIN类型,但不推荐在大型表中使用Cross Join,因为它可能导致性能问题。此外,还对比了INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别。
摘要由CSDN通过智能技术生成

今天在看Redash里同事的query时,看到一段SQL,看到的时候突然发了一下愣:
在这里插入图片描述

在日常我们需要进行多表查询时,日常最常用到的有内链接,外链接(inner join,left(right) outer join,full outer join(mysql不支持,可以使用union关键字来合并left join与right join来模拟。

在截图中,join后并没有on关键字来确定链接条件,我的第一反应是检查是不是inner join的(“,” + “where”)写法,仔细看了之后发现并不是,而是一种平常并不常用的交叉连接(cross join)

Cross join

cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积

笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则 两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),
(b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

mysql> select * from A cross join B;
+----+-----------+----+-------------+
| id | name      | id | name        |
+----+-----------+----+-------------+
|  1 | Pirate    |  1 | Rutabaga    |
|  2 | Monkey    |  1 | Rutabaga    |
|  3 | Ninja     |  1 | Rutabaga    |
|  4 | Spaghetti 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值