[SqlLearn] 各种join

https://blog.csdn.net/qq_25135655/article/details/78238848

https://blog.csdn.net/XiaoXiao_RenHe/article/details/78668544

https://www.jianshu.com/p/800ec0326fda

以下是自己的总结。

1. Inner join is getting the intersection of 2 tables based on the joinning column (the joining feature common in 2 tables)
Select * from TableA inner join TableB on TableA.name == TableB.name
Row number: 2


2. Outer join is getting the Union of the 2 tables based on the joining columns (the joining feature common in 2 tables)
Select * from TableA FULL OUTER JOIN TableB on Table.name == TableB.name 
Row number: 4 + 4 - 2

2.1 Outer join with excluded intersection part
Select * from TableA FULL OUTER JOIN TableB on TableA.name == TableB.name where TableA.name == null OR TableB.name == null 
Row number: 4 + 4 -2 - 2 

3. Left [OUTER] JOIN
(1) SELECT * FROM TableA LEFT OUTER JOIN TableB on TableA.name == TableB.name.
Row number: 4
(2) SELECT * FROM TableA LEFT OUTER JOIN TableB on TableA.name == TableB. name where TableB.name == null

4. RIGHT [OUTER] JOIN
(1) SELECT * FROM TableB LEFT OUTER JOIN TableA on TableB.name == TableA.name
(2) SELECT * FROM TableB LEFT OUTER JOIN TableA on TableB.name == TableB.name where TableA.name == null

最好的理解方式:
文氏图: 两个圈,有交集。 每个区域都可以通过join + where 表示出来。(每个区域其实都是代表row,两联合了两个表里的rows)
一共几个区域? 7 
3 个小区
3 个中区 (由2个小区组成)
1 个大区 (由3个大区组成)

INNER JOIN 就是找到 交集 进行 两表合并(合并 columns,不是row),所以表里没有null 值
其他的JOIN, LEFT JOIN, RIGHT JOIN, 都是 OUTER JOIN. 都是做交集运算,所以允许表里有null
可以通过 where 语句把 null 的部分去掉,是有 null 的 row 去掉。

所以这个文氏图的每个区域部分,都是应该是 带有所有的 columns.

PS:
cross join 是产生笛卡尔积的 完全join,是个 完全组合 运算(combination),产生4X4 的行数。所以对性能的伤害性很大。

看另一个链接,找到了一个例子,在 LEFT JOIN 中也用到了 笛卡尔积。 这个例子是因为出现了多个可出现的组合,(突然想到,这其实就是groupBy 的反方向运算, groupBy是 把相同 column value的 多个不同column value 的row 进行aggregate压缩; 笛卡尔积 是将多个相同column value 的多个不同 column value 的row 进行 完全组合式的 扩充 )


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值