美文网首页
SQL进阶教程之1.7集合运算

SQL进阶教程之1.7集合运算

作者: anti酱 | 来源:发表于2021-11-14 20:47 被阅读0次

    集合运算注意事项

    • 需要保留重复项目的集合,用ALL
    • 集合运算有优先级,intersect 比 union 和 except 优先级更高
    • 不同DBS对集合运算支持程度不同
    • 除法运算没有标准定义
      • 和union/差intersect/积cross join被加入集合标准,但没有除法运算

    用法1:检查集合相等性初级篇
    适用情况:迁移数据库或者需要备份数据和最新数据时,需要检查两表是否行数/列数一致且内容相同
    案例:名字不同但内容相同的两张表行数
    知识点:S UNION S = S,两表相等,union的结果为本身,两表不相同,union结果取两者并集

    表tbl_a 表tbl_b 使用union求并集

    用法2:检查集合相等性进阶篇
    适用情况:需要比较两表是否相等,同时包含行数/列数/内容的比较
    案例:名字不同的两张表是否完全相同
    知识点:A UNION B = A INTERSECT B = A=B ,两表相等,union的结果和intersect结果完全相同,否则两结果不相同
    缺陷:不同DBS支持情况不同,如mysql不支持intersect和except

    数据源同用法1

    使用并集-交集=空集判断两者相等

    用法3:用差集实现关系除法
    适用情况:从表2中找出包含表1所有情况的
    案例:找出具备所有特定技能的员工
    知识点:A except B = A中包含而B不包含/B中包含A不包含的项
    缺陷:mysql不支持intersect和except

    表skills 表empskils except排除相同项

    用法4:寻找相等的子集
    适用情况:从总体中找出相同的子集
    案例:找出所有相同的子集
    知识点:不等条件关联组合

    表supparts 多条件+自连接得到相同子集

    用法5:删除重复行
    适用情况:delete删除重复数据
    案例:删除重复出现的行
    知识点:子查询/except/not in子句

    方法1:删除各项最大id以外的重复项 方法2:not in 删除各项最大id以外的项 方法3:id减去各项最大id,得到重复项id

    相关文章

      网友评论

          本文标题:SQL进阶教程之1.7集合运算

          本文链接:https://www.haomeiwen.com/subject/rtvxtrtx.html