SQL:sql连接那些事儿


前言

本篇针对sql中的连接相关概念进行一番整理

一、Join是什么

在Sql中,join(连接)存在的意义,就是将来自两个或多个表的行结合起来,返回多个表的查询结果,下面先用一张图直观地说明连接对搜索返回结果的影响
在这里插入图片描述

二、Join用法

1.内连接

内连接包括自然连接和相等连接
运算符:=、<> 之类的比较运算符
返回结果:使用比较运算符根据每个表共有的列的值匹配两个表中的行

为了方便查看,这里用table1和table2表示原始数据

table1
在这里插入图片描述
table2
在这里插入图片描述

自然连接

自然连接是一种特殊的等值连接,他要求两个关系表中进行连接的必须是 相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列

 Select * from table1 natural join table2

返回结果如下
在这里插入图片描述

相等连接

相等连接,相比较自然连接的不同之处在于,不同之处在于自然连接的是同名属性列的连接,而内连接则不要求两属性列同名,可以用using或on来指定某两列字段相同的连接条件,且不会消除同名属性列。

代码如下:

 Select * from table1 inner join table2 on table1.A=table2.E

最终返回结果如下
在这里插入图片描述
但是内连接时,某些属性值不同的元组会被抛弃,要解决这样的问题,则需要引入外连接

2.外连接

内连接是要显示两张表的内存,而外连接不要求如此,外连接可以依据连接表保留左表,右表或全部表的行为而分为左外连接右外连接和全连接。

LEFT JOIN(LEFT OUTER JOIN)

左外连接是在两表进行自然连接,只把左表要舍弃的保留在结果集中,右表对应的列上填null。

在这里插入图片描述

RIGHT JOIN (RIGHT OUTER JOIN)

右外连接是在两表进行自然连接,只把右表要舍弃的保留在结果集中,左表对应的列上填null。

 Select * from table1 right outer join table2 on table1.C=table2.C

在这里插入图片描述

FULL JOIN(FULL OUTER JOIN)

全连接在Mysql中并不直接支持,可以通过union的方式让左连接和右连接合并起来最终得到全连接

 Select * from table1 left outer join table2 on table1.C=table2.C
 UNION 
 Select * from table1 right outer join table2 on table1.C=table2.C

最终结果
在这里插入图片描述

关于Join和WHERE的区别
  • on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
  • where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

简单来说就是on不管条件是不是真的都会进行返回,但是where的话只会返回条件为真的结果

这里拿别人的相关例子简单进行举例记录

SELECT * FROM tbl_emp  a INNER JOIN tbl_dept b ON a.deptId = b.id; 

返回结果
在这里插入图片描述

SELECT * FROM tbl_emp  a LEFT JOIN tbl_dept b ON a.deptId = b.id WHERE b.id IS NULL; 

在这里插入图片描述

动手实践及参考博客

一文让你彻底理解SQL中的join

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值