MySQL连接

今天花了两个小时的时间研究了一下MySQL 5.0版本下的连接。

MySQL下的连接一般分为内连接(inner join,外连接(outer join,交叉连接(cross join,

外连接还包括左外连接,右外连接和全连接。

但其实他们都是由交叉连接通过条件限制改变而来的。

下面是a表和b表的数据

 

交叉连接

经过我的实验,

SELECT * FROM a JOIN b  9行数据   SELECT * FROM a JOIN b ON a.`id`=b.`parent_id` 2行数据

SELECT * FROM a ,b     9行数据   SELECT * FROM a ,b ON a.`id`=b.`parent_id` 错误

SELECT * FROM a CROSS JOIN b   9行数据

发现这三种方式得到的数据都是一模一样,这说明了什么,在不设定join模式的情况下,join默认是交叉连接,而不通过join也可以做到两表连接,但是不直观,同时还不能添加on的条件。

内连接:

内连接的过程:

先获取交叉连接 SELECT * FROM a INNER JOIN b的内容

接着从左边开始判断条件 SELECT * FROM a INNER JOIN b  ON a.`id`=b.`parent_id`;

如果On条件连接满足,则将该条记录保留,反之则删除。

 

这样觉得的原因是不加on也能对数据进行查询,而下面的左外连接,右外连接都不行

 

左外连接SELECT * FROM a LEFT JOIN b   ON a.`id`=b.`parent_id`;

左边的保留,右边的若为null,则依旧存在,只是显示为null

 

右外连接:SELECT * FROM a RIGHT JOIN b   ON a.`id`=b.`parent_id`;

 

完全连接:

可能由于版本不支持,不能添加On

SELECT * FROM a FULL JOIN b获得的是交叉集,和交叉连接一样。

若添加On,正确的应该是左外和右外的并集,同时把重复的去掉

:

通过分析四个连接得到,无论是joIncross join,full join得到的都是笛卡尔集。

而内连接是通过笛卡尔积进行条件连接后得到的,左外连接,右外连接和全连接可能也差不多。

/*以上连接的原理只是本人的猜测,若有错误,见谅*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值