join用法
1.inner join,内连接,显示两个表中有联系的所有数据;
2.left join,左链接,以左表为参照,显示所有数据,右表中没有则以null显示
3.right join,右链接,以右表为参照显示数据,,左表中没有则以null显示
例子
如图两个表
右连接
SELECT *
FROM ketest as b RIGHT JOIN keketest as c
on b.id = c.id;
左连接
SELECT *
FROM ketest as b LEFT JOIN keketest as c
on b.id = c.id;
内连接
SELECT *
FROM ketest as b INNER JOIN keketest as c
on b.id = c.id;
关键字 on
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用 left jion 时,on 和 where 条件的区别如下:
1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
例子
1.where例子
SELECT *
FROM ketest as b left JOIN keketest as c
on b.id = c.id
WHERE c.sex = '女';
2.on例子
SELECT *
FROM ketest as b left JOIN keketest as c
on b.id = c.id
and c.sex = '女';
因为on会生成一个中间表,然后用where会把不符合条件的给筛选出去。inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。
那么left join 和inner join 谁快呢?
关于left join的概念,返回左边全部记录,右表不满足匹配条件的记录对应行返回null,那么单纯的对比逻辑运算量的话,inner join 是只需要返回两个表的交集部分,left join多返回了一部分左表没有返回的数据,我认为是left join 慢一点,毕竟返回的东西多嘛。
当然你要是拿小一点的表当左表,那么就是一样快,因为用inner join 的时候mysql会自动选择较小的表来作为驱动表,从而达到减少循环次数的目的