首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关联查询-内连接

什么是关联查询?

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180511G13EYM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券