mysql之浅谈join

准备
以下面两张表为例开始讲
文章表 t_article:
在这里插入图片描述
文章内容表 t_article_info:
在这里插入图片描述

一、内连接 JOIN,INNER JOIN,WHERE,STRAIGHT_JOIN
图示:
在这里插入图片描述
获取两个表中字段匹配关系的记录,也就是求交集。
① join

select * from `t_article` as `a` join `t_article_info` as `b` on `a`.`id`=`b`.`article_id`  

② inner join

select * from `t_article` as `a` inner join `t_article_info` as `b` on `a`.`id`=`b`.`article_id`  

③ where

select * from `t_article` as `a`,`t_article_info` as `b` where`a`.`id`=`b`.`article_id`

④ straight_join

select * from `t_article` as `a` straight_join `t_article_info` as `b` on `a`.`id`=`b`.`article_id`

结果:
在这里插入图片描述
我们发现四个结果都是一样的,有人会问,那有什么区别呢?
所有我决定用大数据测试它们的执行速度,用百万数据插入大法,方法如下:

DROP PROCEDURE IF EXISTS my_insert;
CREATE PROCEDURE my_insert()
BEGIN
DECLARE n int DEFAULT 1;
loopname:LOOP
INSERT INTO `t_article`(`id`,`title`,`author`,`create_time`) VALUES ('', n, '鲲鲲', '1584562591');
SET n = n + 1;
IF n = 1000000 THEN
LEAVE loopname;
END IF;
END LOOP loopname;
END;
-- 执行函数
CALL my_insert();

由于速度过慢所以只插入了100000条数据,看看结果吧:
1.inner join和join实际上是一样的,就只测一个。
在这里插入图片描述
2.where
在这里插入图片描述
3.straight_join
在这里插入图片描述
结果就是这样 。

二、左连接 LEFT JOIN
图示:
在这里插入图片描述

获取左表所有记录,即使右表没有对应匹配的记录。

select * from `t_article` as `a` left join `t_article_info` as `b` on `a`.`id`=`b`.`article_id` 

结果:
在这里插入图片描述

三、右连接 RIGHT JOIN
图示:
在这里插入图片描述

与 left join 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

select * from `t_article` as `a` right join `t_article_info` as `b` on `a`.`id`=`b`.`article_id` 

结果:
在这里插入图片描述

四、外连接 OUTER JOIN
图示:
在这里插入图片描述

外连接就是求两个集合的并集。
1.其实左连接和右连接都是省略了outer,原写法:left outer join;right outer join。
2.MySQL是不支持OUTER JOIN,但是可以用UNION操作来实现。

select * from `t_article` as `a` left join `t_article_info` as `b` on `a`.`id`=`b`.`article_id` 
union
select * from `t_article` as `a` right join `t_article_info` as `b` on `a`.`id`=`b`.`article_id`

结果:
在这里插入图片描述

五、自然连接 NATURE JOIN

-- 自然连接
select * from `t_article` natural join `t_article_info`;
-- 笛卡尔积
select * from `t_article` natura  join `t_article_info`;
-- 笛卡尔积
select * from `t_article` nature  join `t_article_info`;

结果:
在这里插入图片描述

六、USING
using等价于join操作中的on,但是要保证两个表关联字段相同,我上面的两个表是不满足条件的,所有我把t_article_info表article_id改成了id
① inner join

select * from `t_article` join `t_article_info` using(id) 

结果:
在这里插入图片描述
② left join

select * from `t_article` left join `t_article_info` using(id) 

结果:
在这里插入图片描述
其他的就省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值