交叉连接(笛卡尔积连接)
将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。
语法:select 列名,列名,...from a表 cross join b表;
通俗的讲:
交叉连接就是要要保证A表中的每一条数据要和B表中的每一条数据有关联,同理B表中的每一条数据要和A表中的每一条数据也要有关联。
举例说明:
有个相亲节目大家都不陌生吧,就是俩光头领着24个骗子忽悠五个傻老爷们的事情(狗头保命)。
我们村呢,有个大傻子和二傻子。有一天他们两个一起去参加这个相亲节目去了,首先登场的就是我们村唯一一个会ctrl
的大傻子。
此时台上有五名女嘉宾,大傻子登台后,被主持人要求自我介绍,并让其环顾一周挑选一位心仪的女嘉宾。在这个过程中呢,他们之间彼此都互相认识了。
此时共产生了五条数据:
大傻子 <--> 女1
大傻子 <--> 女2
大傻子 <--> 女3
大傻子 <--> 女4
大傻子 <--> 女5
但是很遗憾,大傻子遗憾退场。紧跟着是二傻子上场,还是同样的操纵,同样的产生了五条数据:
二傻子也产生了五条数据:
二傻子 <--> 女1
二傻子 <--> 女2
二傻子 <--> 女3
二傻子 <--> 女4
二傻子 <--> 女5
也就是说一共产生了10条数据:
大傻子 <--> 女1
大傻子 <--> 女2
大傻子 <--> 女3
大傻子 <--> 女4
大傻子 <--> 女5
二傻子 <--> 女1
二傻子 <--> 女2
二傻子 <--> 女3
二傻子 <--> 女4
二傻子 <--> 女5
如果将男嘉宾们当做表A,女嘉宾们当作表B。那么我们可以看得出来,表A中得每一条数据都表B中的每一条数据有了联系,反过来讲,表B中的每一条数据和表A中的每一条数据也都有了关系,这就是交叉连接(其返回的行数就是两个表中的乘积2*5=10)。
在Oracle中的交叉连接:
SELECT * FROM EMP CROSS JOIN DEPT;
从结果会发现,emp表有15条数据,deot表有4条数据。emp表中的每一条数据单独摘出来都和dept表中的4条数据有了联系,反过来dept表中的每一条数据单独摘出来都和emp表的15条数据有了联系。