继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

数据库知识点(1)——join查询语句梳理

呦呦米
关注TA
已关注
手记 31
粉丝 103
获赞 598

之前一直对join相关语句的语法和效果模模糊糊的,今天特地整理了一下学习成果,希望对大家有用。O(∩_∩)O~~
join的类型主要有一下五种:
1、内连接(inner)
2、全外连接(outer)
3、左连接(left)
4、右连接(right)
5、交叉连接(cross)
下面开始逐一说明。(附上练习用的两个表:表A,表B)
表A表B
一、内连接
内连接是根据连接条件取两个表的交集。

select a.id aId ,a.name aName,b.id bId,b.name bName from A a inner join B b on a.id = b.id;
select a.id aId ,a.name aName,b.id bId,b.name bName from A a join B b on a.id = b.id;
select a.id aId ,a.name aName,b.id bId,b.name bName from A a ,B b where a.id = b.id;

这三个查询语句查询出结果相同。
inner_1inner_2inner_3

二、全外连接
全外链接是根据连接条件将两个表链接起来,取两个表的并集。

select a.id aId ,a.name aName,b.id bId,b.name bName from A a left join B b on a.id = b.id  union select a.id aId ,a.name aName,b.id bId,b.name bName from A a right join B b on a.id = b.id;

因为目前使用的MySql版本不支持直接使用 full join,所以使用 left join ...union ...right join 的语句代替。效果和 select a.id aId ,a.name aName,b.id bId,b.name bName from A a full join B b on a.id = b.id一样。
把左连接和右连接保留相同的部分,增加上各自不同的部分就是全外连接。
full_1full_2
三、左连接
左连接是以from后的表为基础,展示这个表的全部信息,left join 后的表有符合连接条件的就添加上该表的相应信息,没有则以NULL补缺。

select a.id aId ,a.name aName,b.id bId,b.name bName from B b left join A a on a.id = b.id;
select a.id aId ,a.name aName,b.id bId,b.name bName from B b right join A a on a.id = b.id;

以上查询语句结果相同
left_1left_2
四、右连接
右连接是以from后的表为基础,展示这个表的全部信息,right join 后的表有符合连接条件的就添加上该表的相应信息,没有则以NULL补缺。

select a.id aId ,a.name aName,b.id bId,b.name bName from A a right join B b on a.id = b.id;
 select a.id aId ,a.name aName,b.id bId,b.name bName from B b left join A a on a.id = b.id; 

right_1right_2
五、交叉连接
交叉连接,返回两个表的笛卡尔乘积

select * from A a cross join B b; 
select * from B b cross join A a;

以上语句都返回49条查询结果 。
cross_1

 select * from A a cross join B b where a.id = b.id;

是找出笛卡尔乘积中 a.id 和 b.id 相同的。
cross_2corss_3

打开App,阅读手记
5人推荐
发表评论
随时随地看视频慕课网APP