什么是关联查询? 关联查询就是将一张表的每一行数据,跟另一张表的某一行数据(具体要看我们写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个重要环节得出关联查询(内连接)的语法:
将两者拼起来就变成: t_keys k inner join t_locks l on k.serration = l.serration 上面的'k'和'l'是在这条SQL脚本中,分别给钥匙表和锁头表起了2个别名,别名的用法就是本节的作业,各位自行学习一下,很简单:) 再把这一部分放到from后面,一个完整的内连接查询,就写好了: select k.color, l.brand from t_keys k inner join t_locks l on k.serration = l.serration; 上面的SQL中,如果没有后面的on k.serration = l.serration,那么结果就是12条数据;然而加上这个on...,结果就是3条数据,细心的你会发现其中缺少4号锁头的数据,那是因为没有钥匙与之匹配,数据库在关联的时候便忽略的这条数据。要想解决这个问题,我们需要用到下一节将要介绍的外连接:) |
|