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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容