SQL多表连接

我们在工作中经常会用到数据库的操作,很多操作都会用到多表联查,那么你肯定会用到连接查询,那我们如何掌握连接查询呢?连接查询都有哪些呢?

连接查询的分类

连接查询中我们经常用到的有这几种等值连接,内连接和外连接,外连接又分为左外连接和右外连接,全外连接(mysql不支持),我们主要介绍其他几种

如何理解

我们如何理解连接查询呢?首先要理解为什么进行多表联查,当我们的数据库关系比较复杂时,经常需要在多个表之间进行数据查询,多个表之间一般都有外键来约束连接,要想理解连接查询,必须先清楚表的连接规则,首先第一个要理解的概念就是

笛卡尔积:

数学中,笛卡尔积就是第一个数列的所有值与第二个数列的所有值都相乘一遍,所得到的积,比如

  1. 1 2 3

  2. A b c

那么1与a,b,c分别相乘,2与a,b,c分别相乘,3与a,b,c分别相乘,最后相加。

其实也很好理解,就是说你的元素跟我的元素都必须组合一次。那么在多个表之间连接的时候,是怎么进行的呢?

比如下面的两张表,员工表和部门表

图片

图片

他们的笛卡尔积的结果就是:

图片

图比较大,值截取了一部分,先介绍一下两种表的关系,员工表emp里面主要存储了员工信息,部门表里面主要存储了部门信息,连接列是部门编号,就是deptno,那么两张表连接以后对我们来说,哪些是有效数据呢?

从数据的角度我们可以知道,只有当两个表的连接列相等时,这个数据才是有意义的,所以我们在笛卡尔积上加上连接条件,得到下图:

图片

这就是所有连接查询结果的起点,因为所有的有效数据都来自这个连接结果。

其中可以看到员工数据与其对应的部门信息通过连接列完美的连接在了一起,你就可以在这个结果中取出自己想要的结果了,比如员工ward的工作部门名字和工作地。

如何使用

这一部分我们介绍如何使用连接查询,我们用最简单的例子来说明,比如想查出所有员工名字和他的部门名字,我们都知道员工名字在第一张emp表中,而员工的部门名字在第二张dept中,所以这个就需要连接查询。我们可以使用不同的几种方式来完成。

第一种:等值连接,注意必须加连接列的条件,为了方便,可以将表面简写

mysql> select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

如下:

图片

第二种:内连接 inner join,来看写法:

mysql> select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;

图片

第三种,左外连接 left join,来看写法:

mysql> select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;

图片

注意看,这个结果跟上面的有区别,这就是左外和上面的区别,除了查出所有符合连接的结果外,如果左表中有多余数据,会让其显示与null结合,这就是为什么叫左外的原因。

第四种:右外连接  right join 来看写法:

mysql> select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;

图片

注意看,这个与上面几个结果也有区别,右外除了显示匹配成功的元素外,还会显示右表中每匹配上的元素,这就是叫右外的原因。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值