闲聊SQL--join

sql 中的join 代表链接的意思,他后边一般都要跟限定条件on 避免笛卡儿积的出现。

join 的方式有多种,其中:

A join B on=A inner join B on= A,B

以上的A.B表关联性质是一样的,查询效率几乎也是一样的,我们基本可以看作一种关联的三种写法,没啥区别


A left join B on,

左关联,左边A作为主表,显示A中所有数据,B作为去匹配数据,如果能匹配上的,就显示A + B,否则显示A + null


A right join B on

关联,右边B作为主表,显示B中所有数据,A作为去匹配数据,如果能匹配上的,就显示A + B,否则显示NULL + B

A FULL JOIN B ON

全连接,就是左右匹配,全部展示,匹配不上的都显示null


以上的关联除了第一个效率可以清楚认识以外,其他的概念我相信大家都知道。

这里我想吐槽下 across join

这个和上面三个区别是后面不用加ON 主要目的就是求笛卡儿积的;

大家都知道sql查询尽量避免笛卡儿积的出现,但是最近我insert into数据,出现了要给30个省都加上70款商品,

这时候不可能insert into values吧,我们就要insert into select,而这里select出的数据,完全展示就需要用到笛卡儿积把商品和省份完全匹配,30*70的数据行,然后一条sql插完,不需要手动去操作个2000多行insert。

这里就想吐槽下,笛卡儿积有时候也是要用到的,用join的时候记得用across 不用加 on,否则Oracle上会报错,MySQL未测试。

猜你喜欢

转载自blog.csdn.net/qq_21108311/article/details/81023945