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

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

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

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

下面是a表和b表的数据

 

mysql连接种类有哪些 mysql连接种类包括_mysql

mysql连接种类有哪些 mysql连接种类包括_交叉连接_02

交叉连接

经过我的实验,

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的内容

接着从左边开始判断条件

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

 

mysql连接种类有哪些 mysql连接种类包括_mysql连接种类有哪些_03

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

 

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

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

 

mysql连接种类有哪些 mysql连接种类包括_左外连接_04

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

 

mysql连接种类有哪些 mysql连接种类包括_内连接_05

完全连接:

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

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

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

:

mysql连接种类有哪些 mysql连接种类包括_内连接_06

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

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

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