join的不同用法的总结

笛卡尔积:cross join
笛卡尔积是将两个表的任一记录相互组合,如果A有m条记录,B有n条记录,那么通过笛卡尔积产生的结果就会有m*n条记录。
产生迪卡尔积有三种情况:

select * from A cross join B;
select * form A inner join B; #如果有on的话,就是内连接,即求交集
select * from A,B;#注意,此时不能用on或者using,可以用where
select * from A nature join B;
select * from A natura join B;

#特意搜索了一下,这个和natura和nature的有啥区别,结果都是一样的。要与自然连接区分清楚,自然连接是

select * from A natural join B;

所谓自然连接是有隐式的on条件的,无需显式的写出来,mysql会自动找相同的字段连接(划重点,相同的字段名称,不相同是不行的)

内连接:inner join,从笛卡尔的角度看就是从那么多任意相连接的记录中找到符合on条件的记录。共有下面几种写法:

select * from A inner join B on A.id = B.id; #省略inner也是可以的
select * from A , B where A.id = B.id;
select * from A straight_join B on A.id = B.id;

左连接
即是除了A、B两个表的交集外,还要加上A表中剩下的记录。

select * from A left join B on A.id = B.id

右连接:即是除了A、B两个表的交集外,还要加上B表中剩下的记录。

select * from A right join B on A.id = B.id

外连接
即A、B的并集,即从笛卡尔积中挑选出on子句成立的记录+左边剩下的记录+右表剩下的记录。因为mysql暂时不支持outer join,故可以对左连接的结果union右连接的结果
select * from A left join B on A.id = B.id union select * from A right join B on A.id = B.id

using
这个厉害了,目的就是为了替代on那一大串连接条件的,前提是A,B表中要连接的字段名称是相同的,否则把using累坏也找不到哪个是要连接的。
比如A,B中都有id,并且就是要让id相连的,那可以呀,直接上using

`select * from A left join B on A.id = B.id`

改为:

 select * from A left join B using(id);

是不是很完美~

自然连接
那就更厉害了,using也不用了,不过前提都是一样的,两表相连接的字段名称是一样的,直接

select * from A left join B on A.id = B.id 

改为:

 select * from A natural join B;

可见为了简便无所不用其极,这就是进步的动力吧,咋样方便咋样来。
当然啦,要对称,咋个能缺少左自然连接、右自然连接呢

select * from A left natural join B;
select * from A right natural join B;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值