zoukankan      html  css  js  c++  java
  • SQL JOIN--初级篇

    写在前面的话:

    以下是最简单的join原理,为后面的大数据分布式join做概念复习和知识铺垫:

    有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

      • JOIN: 如果表中有至少一个匹配,则返回行
      • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
      • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
      • FULL JOIN: 只要其中一个表中存在匹配,就返回行

    转载一个简单的例子说明: 

    a表
    name sex
    张三 男
    李四 女

    b表
    name age
    李四 30
    王五 23

    1全外连接
    select a.name,a.sex,b.name,b.age
    from a full outer join b on a.name=b.name
    结果如下,
    name sex name age
    张三 男 NULL NULL
    李四 女 李四 30
    NULL NULL 王五 23
    关联字段name,左表有而右表没有的,如张三,b.name,b.age都为NULL,加上左右两边都有的就是左连接的结果;而右表有而左表表没有的,如王五,a.name,a.sex都为NULL,加上左右两边都有的就是右连接的结果;左右两边都有的如,李四,这就是内连接。相见如下
    2左
    select a.name,a.sex,b.name,b.age
    from a left outer join b on a.name=b.name
    结果如下
    name sex name age
    张三 男 NULL NULL
    李四 女 李四 30
    2右
    select a.name,a.sex,b.name,b.age
    from a right outer join b on a.name=b.name
    结果如下
    name sex name age
    李四 女 李四 30
    NULL NULL 王五 23
    3内联
    select a.name,a.sex,b.name,b.age
    from a inner join b on a.name=b.name
    结果如下
    name sex name age
    李四 女 李四 30
    4交叉
    select a.name,a.sex,b.name,b.age
    from a cross join b on a.name=b.name
    结果如下
    name sex name age
    张三 男 李四 30
    李四 女 王五 23
    张三 男 王五 23李四 女 李四 30

    总结:
    INNER JOIN 内连接 -- 只显示两表都存在的记录 记录数<=任一表
    LEFT JOIN 左连接 -- 显示左表所有存在的记录 记录数=左表
    RIGHT JOIN 右连接 -- 显示右表所有存在的记录 记录数=右表
    FULL JOIN 外连接 -- 显示两表中,某个表有存在的记录 记录数>=任一表
    CROSS JOIN 交叉连接 -- 对左表的每条记录,都对应右表的每条记录 记录数=左表*右表
    这里有一个值得探讨的地方:
    貌似cross join没有什么实际意义,两个表的笛卡尔积过分冗余,join出来的结果也没什么作用。
    但是,上网找到这么个说法,有些道理

    例如:

    有一个员工表,一个工资类型表(计时工资,计件工资,待工工资,加班补贴)

    则员工表 cross join 工资类型表 再左连接工资表的结果

    就可以很直观的查看每个员工各类型的工资有多少了

    我的看法是,以上如果设计的好,员工表和工资表直接左连接,依然可以拿到每个员工的所有信息,只不过某些类型的工资员工没有工资项则不予显示了,这个问题有待进一步探讨!~~
  • 相关阅读:
    Android组件化框架设计与实践
    浅谈Android进阶之路
    Android APP 性能优化的一些思考
    有关 Hybrid 开发模式实践总结
    开发人员必备的技能——单元测试
    有关Android插件化思考
    人生的意义到底是什么?
    Asp.Net Core 3.1学习-读取、监听json配置文件(7)
    Asp.Net Core 3.1学习-依赖注入、服务生命周期(6)
    Asp.Net Core 3.1学习- 应用程序的启动过程(5)
  • 原文地址:https://www.cnblogs.com/chengyeliang/p/3936989.html
Copyright © 2011-2022 走看看