SQL进阶教程之1.7集合运算

集合运算注意事项

  • 需要保留重复项目的集合,用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集合运算)