分享

【SQL入门系列】关联查询-内连接

 L罗乐 2018-11-30

什么是关联查询?

关联查询就是将一张表的每一行数据,跟另一张表的某一行数据(具体要看我们写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种组合可以正常开锁:

A-2

B-1

C-3 

 

整个过程中2个重要的环节:

  1. 两组数据(两张表,把每行作为一个单位)排列组合成所有可能

  2. 从这些排列组合中,筛选出我们需要的组合

那么所谓的关联查询,其实就是我们可以通过SQL脚本命令数据库替我们实现这个过程,即:先把两张表的数据按照类似上面的方式在数据库内部进行排列组合,然后从组合的结果中找到我们需要的(有用的)数据。


根据上面2个重要环节得出关联查询(内连接)的语法:

  1. 两张表的数据做排列组合:

    [表A] inner join [表B]

  2. 从上面组合好的数据中,筛选出需要的数据:

    on <条件>

将两者拼起来就变成:

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号锁头的数据,那是因为没有钥匙与之匹配,数据库在关联的时候便忽略的这条数据。要想解决这个问题,我们需要用到下一节将要介绍的外连接:) 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多