数据库使用之union、union all、各种join的用法区别解析_MsSql-数据库社区-技术中心-斑驳蓝

数据库使用之union、union all、各种join的用法区别解析_MsSql

这篇文章主要介绍了SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,包括innerjoin和leftjoin的区别,以及联表条件的写法,需要的朋友可以参考下

目录
  • 一、Union 和Union All
    • 1、区别:
    • 2、注意点:
    • 3、具体举例
  • 二、Join关键字的区别
    •  1.left join和inner join区别
    • 2.联表条件写法差异
  • 三、Cross Join
    • 总结 

      一、Union 和Union All

      1、区别:

      Union去重,而Union All不去重。

      2、注意点:

      1.被合并的每个SELECT语句的列数、数据类型要相同(一一对应)。

      2.使用Union时,由于可去重性,可能导致数据丢失。

      3.使用Union All时,由于不可去重性,可能含重复的记录。

      3、具体举例

      【union】

      图片[1]-数据库使用之union、union all、各种join的用法区别解析_MsSql-数据库社区-技术中心-斑驳蓝

      【union all】

      图片[2]-数据库使用之union、union all、各种join的用法区别解析_MsSql-数据库社区-技术中心-斑驳蓝

      二、Join关键字的区别

       1.left join和inner join区别

      图片[3]-数据库使用之union、union all、各种join的用法区别解析_MsSql-数据库社区-技术中心-斑驳蓝

      【长话短说】inner join(内连接)得到数据更少,直接剔除匹配不到的数据(剔除无关联ID的数据),inner join = join。

      【例子】如下图所示,inner join不显示红框的数据,left join会显示

      SELECT * FROM student s
      LEFT JOIN score sc on s.id=sc.studentid
      
      SELECT * FROM student s
      INNER JOIN score sc on s.id=sc.studentid

      图片[4]-数据库使用之union、union all、各种join的用法区别解析_MsSql-数据库社区-技术中心-斑驳蓝

      【查询匹配失败的数据】

      SELECT * FROM student s
      LEFT JOIN score sc on s.id=sc.studentid
      WHERE sc.id is null --查询从表ID为空的数据,就是联表匹配不到的数据

      2.联表条件写法差异

      --联表:只要满足关联关系,B.IsDeleted是什么则返回什么
      SELECT * FROM TABLEA A
      LEFT JOIN TABLEB B ON A.ID=B.EXID 
      
      --联表不筛选:只要满足关联关系,B.IsDeleted≠0 则返回null
      SELECT * FROM TABLEA A
      LEFT JOIN TABLEB B ON A.ID=B.EXID AND B.IsDeleted=0
      
      --联表且筛选:只要满足关联关系,B.IsDeleted≠0 则返回null,假如是null则被where过滤掉
      SELECT * FROM TABLEA A
      LEFT JOIN TABLEB B ON A.ID=B.EXID
      WHERE B.IsDeleted=0
      
      --【结论】数据返回多少关系是:第一种=第二种>第三种
      -- 因为第二种是A左联筛选后的B表,左外保证A表完整性,和第一种一样
      -- 第三种是连接后再筛选,剔除的数据可能包含A表的数据

      三、Cross Join

      计算所有表的笛卡尔积:

      图片[5]-数据库使用之union、union all、各种join的用法区别解析_MsSql-数据库社区-技术中心-斑驳蓝

      总结 

      到此这篇关于数据库使用之union、union all、各种join的用法区别解析的文章就介绍到这了,更多相关union、union all、join用法区别内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我!

      您可能感兴趣的文章:

      • sql优化实战 把full join改为left join +union all(从5分钟降为10秒)

      请登录后发表评论

        没有回复内容