zoukankan      html  css  js  c++  java
  • mysql---多表关联

    首先为大家介绍的集合概念:收藏有障碍、唯一性。

    无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,仅仅要元素值和元素个数同样则两个集合相等。

    唯一性:指集合内部元素不存在值相等的元素。

    上图所看到的集合是错误的。由于有2个‘3’违背了唯一性

    上图所看到的的两个集合是同样的。集合元素是无序的


    集合的运算:交集、并集、相乘

    交集:两个集合公共元素组成的集合

    并集:连个集合全部元素组成的集合

    相乘:也成笛卡尔积,两个集合全部元素组合的集合


    集合1*集合2的结果例如以下:

    当中(1,3)是集合1中的‘1’和集合2中的‘3’的组合

    一张表事实上就相当于一个集合。每一行是集合的一个元素


    如今有两表

    goods表:包括商品ID。栏目ID,商品名


    channel表:栏目ID,栏目名



    如今想得到一张报价单包括商品ID,商品名,栏目ID。栏目名。该怎样去做?


    全相乘:笛卡尔积 总共同拥有4*4=16 条记录

    即两表各个行的全部组合


    从两个表行的全部组合中选出满足要求的行


    尽管得出了正确答案。可是假设goods表和channel表非常大的话,如goods表有1W条记录,channel也有1W条记录。则须要在内存中生成一张1W*1W的暂时表。并且绝大部分记录都不是我们所需的。所以全相乘浪费了空间、减少了效率。


    如今考虑如何才干高效实现要求呢?常见的多表关联有左连接、右连接、内连接,哪些能帮助我们来实现上述要求呢?

    左连接的语法:表A LEFT JOIN 表B ON 关联条件                      (从表B中找出与表A满足关联条件的行)

    右连接的语法:表A RIGHT JOIN 表B ON 关联条件                   (从表A中找出与表B满足关联条件的行)

    内连接的语法:表A INNER JOIN 表B ON 关联条件                   (求出表A和表B的公共集)


    左连接:

    第四条记录后面两个字段为NULL,由于'捷安特'的栏目信息在 表B中没有找到。


    右连接:和左连接类似。能够相互转换如:表A LEFT JOIN 表B ON 关联条件  等价于 表B RIGHT JOIN 表A ON 关联条件  

    推荐使用左连接。比較符合常规逻辑



    内连接:



    从左右连接和内连接的结果看,内连接少了一条记录,而左右连接出现了NULL的情况。

    那左右连接和内连接之间究竟有什么关联呢?

    如有两个表,表A和表B,他们能够通过公共字段来关联,他们之间的关系能够用下图来表示


    A INNER JOIN B :得出的结果是表A和表B的公有数据集C

    A lEFT JOIN B:得出的结果是表A记录集A1+公有数据集C。A1中会有NULL出现

    B RIGHT JOIN A:得其结果是公共数据C+表B记录集B1,B1将有NULL出现

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    acdream 1738 世风日下的哗啦啦族I 分块
    hihocoder #1179 : 永恒游戏 暴力
    hihocoder #1178 : 计数 暴力
    hihocoder #1177 : 顺子 模拟
    刷了500道水题是什么体验?
    scu 4436: Easy Math 水题
    JVM系列三:JVM参数设置、分析
    Eclipse插件Target Management (RSE)
    修改jsp文件tomcat发布失败(Could not delete May be locked by another process)
    oracle中修改表名
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4620920.html
Copyright © 2011-2022 走看看