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出现

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

  • 相关阅读:
    BZOJ 3205 [Apio2013]机器人 ——斯坦纳树
    BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
    HDU 1423 Greatest Common Increasing Subsequence ——动态规划
    BZOJ 3309 DZY Loves Math ——莫比乌斯反演
    POJ 1038 Bugs Integrated, Inc. ——状压DP
    POJ 3693 Maximum repetition substring ——后缀数组
    POJ 2699 The Maximum Number of Strong Kings ——网络流
    POJ 2396 Budget ——有上下界的网络流
    BZOJ 4650 [Noi2016]优秀的拆分 ——后缀数组
    源码安装python
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4620920.html
Copyright © 2011-2022 走看看