集合运算注意事项
- 需要保留重复项目的集合,用ALL
- 集合运算有优先级,intersect 比 union 和 except 优先级更高
- 不同DBS对集合运算支持程度不同
-
除法运算没有标准定义
- 和union/差intersect/积cross join被加入集合标准,但没有除法运算
表tbl_a 表tbl_b 使用union求并集用法1:检查集合相等性初级篇
适用情况:迁移数据库或者需要备份数据和最新数据时,需要检查两表是否行数/列数一致且内容相同
案例:名字不同但内容相同的两张表行数
知识点:S UNION S = S,两表相等,union的结果为本身,两表不相同,union结果取两者并集
用法2:检查集合相等性进阶篇
适用情况:需要比较两表是否相等,同时包含行数/列数/内容的比较
案例:名字不同的两张表是否完全相同
知识点:A UNION B = A INTERSECT B = A=B ,两表相等,union的结果和intersect结果完全相同,否则两结果不相同
缺陷:不同DBS支持情况不同,如mysql不支持intersect和except
数据源同用法1
使用并集-交集=空集判断两者相等表skills 表empskils except排除相同项用法3:用差集实现关系除法
适用情况:从表2中找出包含表1所有情况的
案例:找出具备所有特定技能的员工
知识点:A except B = A中包含而B不包含/B中包含A不包含的项
缺陷:mysql不支持intersect和except
表supparts 多条件+自连接得到相同子集用法4:寻找相等的子集
适用情况:从总体中找出相同的子集
案例:找出所有相同的子集
知识点:不等条件关联组合
方法1:删除各项最大id以外的重复项 方法2:not in 删除各项最大id以外的项 方法3:id减去各项最大id,得到重复项id用法5:删除重复行
适用情况:delete删除重复数据
案例:删除重复出现的行
知识点:子查询/except/not in子句
网友评论