当前位置:天才代写 > tutorial > 数据库教程 > SQL JOIN 简单介绍

SQL JOIN 简单介绍

2018-05-18 08:00 星期五 所属: 数据库教程 浏览:577

      为什么需要join?join中文意思为连接,连接意味着关联即将一个表和多个表之间关联起来。在处理数据库表的时候,我们经常会发现,需要从多个表中获取信息,将多个表的多个字段数据组装起来再返回给调用者。所以join的前提是这些表之间必须有关联字段。

  join的分类

 join的分类

  join分为两种,innerjoin和outerjoin,其中outerjoin分为三种,leftouterjoin,rightouterjoin,fullouterjoin,另外leftouterjoin又简称为leftjoin即大家所熟知的左连接。

  场景描述:

  互联网时代,大家都喜欢在网上购物,尤其是淘宝和京东,所以我们选择的场景也是大家熟悉的网上购物。这是一个关于一个人和他在商城买了什么商品的一个故事;

  针对上述需求,我们建立了两张表,tb_person和tb_order,其中tb_person是关于这个人的描述,tb_order是关于他购买的商品的一个描述。

  我们的表结构很简单,tb_person只需要知道这个人是谁就可以了,所以只有三个字段id,firstname(名)和lastname(姓),同样tb_order也很简单,我们只要知道谁买了什么商品,所以只需要3个字段,分别是oid,oname(商品名称),pid(购买者编号)。

  tb_person:

 我们的表结构很简单,tb_person只需要知道这个人是谁就可以了,所以只有三个字段id,firstname(名)和lastname(姓),同样tb_order也很简单,我们只要知道谁买了什么商品,所以只需要3个字段,分别是oid,oname(商品名称),pid(购买者编号)。    tb_person:

  tb_order:

tb_order:

  接下来,我们向上述两张表中写入一些示例数据:

  dataintb_person:

 接下来,我们向上述两张表中写入一些示例数据:    dataintb_person:

  tb_person表中有三位人员,分别是andyChen,irriWan,abbySun;

  dataintb_order:

 tb_person表中有三位人员,分别是andyChen,irriWan,abbySun;    dataintb_order:

  tb_order表中记录了3条数据,人员编号为1也就是andyChen买了两件商品分别是book和phone,另外还有一个人员编号为4的人买了一件商品computer。关于这个大家可能会产生疑问,为什么tb_person表中没有人员编号为4的人呢?这里我们姑且认为由于注册用户较多,我们采用了用户分表策略,所以人员编号为4的用户可能在另外一张人员表中。

  从之前的描述我们知道,表与表之间如果要join则必须要有关联的字段,上述示例我们看到这个关联的字段就是pid。

  根据tb_person和tb_order两张表,我们可以看到有三种情形:

  1.person表中的人购买了商品,也就是order表中有关于该用户的商品购买记录,我们可以从该表中查询到该用户买了哪些商品,如andyChen购买了book和phone两种商品,即pid在tb_person和tb_order两种表中都存在;

  2.person表中的人未购买商品,如irriWan和abbySun两位用户并未购买任何商品,即pid只存在于tb_person表;

  3.order表中购买商品的用户在person表中找不到记录,如pid为4的用户购买了一台computer但在tb_person表中没有该用户的记录,即pid只存在于tb_order表;

  理解上述三种情形对于我们理解join有非常大的帮助,接下来我们看SQL中JOIN的用法:

 理解上述三种情形对于我们理解join有非常大的帮助,接下来我们看SQL中JOIN的用法:

      上面的代码用WHERE关键词指明了两个表之间的联合关系。

      如果改写为JOIN关键字,那么代码如下:

  上面的代码用WHERE关键词指明了两个表之间的联合关系。        如果改写为JOIN关键字,那么代码如下:

      现在对JOIN的用法应该有个大概了解了,JOIN的具体用法和语法介绍如下:

      先假设有表a、b如下:

#p#分页标题#e#

  现在对JOIN的用法应该有个大概了解了,JOIN的具体用法和语法介绍如下:        先假设有表a、b如下:

      内联接:

  内联接:

 

      其中INNER关键字可以省略。

      此语句只有在表a和b中都有匹配行时,才返回。

      所以本例中返回结果为:

  其中INNER关键字可以省略。        此语句只有在表a和b中都有匹配行时,才返回。        所以本例中返回结果为:

      外联接:

 外联接:

 

     其中OUTER关键词可以省略。

     RIGHT JOIN:当右表格(即表b)中的行在左表中没有匹配行时,也返回。返回的记录中,选择的左表的列的内容为NULL。

    所以本例中返回结果为:

  其中OUTER关键词可以省略。       RIGHT JOIN:当右表格(即表b)中的行在左表中没有匹配行时,也返回。返回的记录中,选择的左表的列的内容为NULL。      所以本例中返回结果为:

 

      LEFT JOIN:当左表格(即表a)中的行在右表中没有匹配行时,也返回。返回的记录中,选择的右表的列的内容为NULL。

      所以本例中返回结果为:

   LEFT JOIN:当左表格(即表a)中的行在右表中没有匹配行时,也返回。返回的记录中,选择的右表的列的内容为NULL。        所以本例中返回结果为:

      FULL JOIN:可以把它理解为LFET和RIGHT的集合,某表中某一行在另一表中无匹配行,则相应列的内容为NULL。

      所以本例中返回结果为:

   FULL JOIN:可以把它理解为LFET和RIGHT的集合,某表中某一行在另一表中无匹配行,则相应列的内容为NULL。        所以本例中返回结果为:

      交叉联接:

交叉联接:

 

      交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。也就是相当于两个表中的所有行进行排列组合。若表a有X行,表b有Y行,则将返回XY行记录。

      所以本例中返回结果为:

 交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。也就是相当于两个表中的所有行进行排列组合。若表a有X行,表b有Y行,则将返回XY行记录。        所以本例中返回结果为:   小编结语:

  本文主要描述了sqljoin的分类以及SQL中JOIN的用法,通过简单的示例,让大家更清晰的去了解他们。至于什么时候使用join要视具体的情况而定,根据不同的需求采用不同的策略。

  更多内容尽在课课家教育!

 

    关键字:

天才代写-代写联系方式