什么是关联查询?
关联查询就是将一张表的每一行数据,跟另一张表的某一行数据(具体要看我们写SQL时指定的条件),组合成新的一行数据,这行新的数据包含了两张表的所有字段。然后再根据业务需要只展示部分字段,从而实现将两张表的数据组合成新报表。
关联查询从大类上又分为:内连接、外连接,我们今天从内连接开始介绍。
为什么要使用关联查询呢?
假如有两张表:钥匙表(t_keys)、锁头表(t_locks),他们的齿数据相同时,可以打开锁。钥匙表里有3条数据(3把钥匙),锁头表里有4条数据(4把锁头),如下:
统计一个报表,找出所有可以开锁的组合,并展示两个字段:钥匙颜色、锁头品牌。上面的情况,如果让我们人工处理,相信我们都能完成这项工作,但计算机数据库是如何实现的呢?
首先,计算机会将3把钥匙和4把锁,全部排列组合一遍(就好比我们用每一把钥匙去试每把锁一样)。共有12种组合(3 x 4)。组合出来的数据就是:A-1、A-2、A-3、A-4、B-1、B-2...如下图
(这种组合也称之为笛卡尔积)
然后在这12种组合中,找出那些可以开锁的组合(即钥匙的齿与锁的槽相匹配),然后用笔记下来,根据上面的2张表的数据可以得出下面3种组合可以正常开锁:
整个过程中2个重要的环节:
两组数据(两张表,把每行作为一个单位)排列组合成所有可能
从这些排列组合中,筛选出我们需要的组合
那么所谓的关联查询,其实就是我们可以通过SQL脚本命令数据库替我们实现这个过程,即:先把两张表的数据按照类似上面的方式在数据库内部进行排列组合,然后从组合的结果中找到我们需要的(有用的)数据。
根据上面2个重要环节得出关联查询(内连接)的语法:
两张表的数据做排列组合:
[表A]inner join[表B]
从上面组合好的数据中,筛选出需要的数据:
on
将两者拼起来就变成:
t_keys kinner joint_locks lonk.serration = l.serration
上面的"k"和"l"是在这条SQL脚本中,分别给钥匙表和锁头表起了2个别名,别名的用法就是本节的作业,各位自行学习一下,很简单:)
再把这一部分放到from后面,一个完整的内连接查询,就写好了:
selectk.color, l.brandfromt_keys kinner joint_locks lonk.serration = l.serration;
上面的SQL中,如果没有后面的onk.serration = l.serration,那么结果就是12条数据;然而加上这个on...,结果就是3条数据,细心的你会发现其中缺少4号锁头的数据,那是因为没有钥匙与之匹配,数据库在关联的时候便忽略的这条数据。要想解决这个问题,我们需要用到下一节将要介绍的外连接:)
领取专属 10元无门槛券
私享最新 技术干货