我们今天来看看这个Sql的连接和Pandas的连接有啥一样或者不一样的地方,首先我们在Mysql和Pandas里面各自建立两个成绩表,命名为left1和right1,请接着看
Mysql的图表:
Pandas的图表:
顺便把代码也给你们啊,这么基础的不会的活该抄一百遍
我们知道在Mysql中,有内连接(inner join),左外连接(left join),右外连接(right join)和全外连接(full join)四种连接方法,而在Pandas中同样也有这四种连接方法,首先我声明下都是通过sid来连接的,下面就让我们一一来看下这四中连接在两个环境里是如何呈现的
首先是内连接(inner join):
先看Mysql的代码
select * from
left1 a inner join right1 b
on a.sid=b.sid;
再来看Pandas的代码
pd
按照结果来看呢,Mysql把两个表的sid都查询出来了,但是Pandas自动删除了重复的sid列~
接着来看下左外连接(left join):
先看Mysql的代码
select * from
left1 a left join right1 b
on a.sid=b.sid;
再来看Pandas的代码
pd.merge(left1,right1,on='sid',how='left')
对比二者的结果我们可以看到除了上面提到过的Pandas会删除重复列之外,二者现实的无效值一个是null,一个是NAN,其实本质都是一样的,他们都是非空的无效值~
再来看下右外连接(right join):
首先是Mysql代码
select * from
left1 a right join right1 b
on a.sid=b.sid;
Pandas代码:
pd.merge(left1,right1,on='sid',how='right')
最后是全外连接(full outer join):
mysql呢是不支持全外连接的,一般只能通过左连接+union+右连接实现
select * from
left1 a left join right1 b
on a.sid=b.sid
UNION
select * from
left1 a right join right1 b
on a.sid=b.sid;
再看看Pandas的代码
pd.merge(left1,right1,on='sid',how='outer')
uhhhhh。。好像是差不多的,其实Pandas还有另外一种方法可以进行连接,下次开贴再讲吧~