美文网首页
用 SQL 进行集合运算

用 SQL 进行集合运算

作者: 鸿雁长飞光不度 | 来源:发表于2018-03-23 22:24 被阅读0次

书上很多SQL内容在MYSQL上不支持,比如EXPECT
1.监测两个表是不是完全相同

SELECT COUNT(*) AS row_cnt
  FROM ( SELECT *
           FROM tbl_A
         UNION
         SELECT *
           FROM tbl_B ) TMP;

如果结果和A表和B表的行数一样,说明A和B完全一样。因为UNION不加参数ALL会去掉重复的行。

  1. 用差集实现关系除法运算
EmpSkills.png
Skills.png
SELECT emp FROM EmpSkills LEFT JOIN Skills ON EmpSkills.skill = Skills.skill GROUP BY EmpSkills.emp
HAVING COUNT(Skills.skill) = (SELECT COUNT(*) FROM Skills)

还可以这样用求差集的方式进行运算,mysql 不支持。

SELECT DISTINCT emp
  FROM EmpSkills ES1
 WHERE NOT EXISTS
        (SELECT skill
           FROM Skills
         EXCEPT
         SELECT skill
           FROM EmpSkills ES2
          WHERE ES1.emp = ES2.emp);

3.寻找相等的子集

SupParts.png
SELECT SP1.sup AS s1, SP2.sup AS s2
  FROM SupParts SP1, SupParts SP2
 WHERE SP1.sup < SP2.sup                 -- 生成供应商的全部组合
   AND SP1.part = SP2.part               -- 条件1 :经营同种类型的零件
 GROUP BY SP1.sup, SP2.sup
HAVING COUNT(*) = (SELECT COUNT(*)       -- 条件2 :经营的零件种类数相同
                     FROM SupParts SP3
                    WHERE SP3.sup = SP1.sup)
   AND COUNT(*) = (SELECT COUNT(*)
                     FROM SupParts SP4
                    WHERE SP4.sup = SP2.sup);

自己没有想出来,这样的实际业务中,自己肯定会用php去做了。

解析:

我们检查一下这些供应组合是否满足以下公式:(A ⊆ B)且(A ⊇ B)=>(A = B)。这个公式等价于下面两个条件。
条件 1:两个供应商都经营同种类型的零件
条件 2:两个供应商经营的零件种类数相同(即存在一一映射)
条件 1 只需要简单地按照“零件”列进行连接,而条件 2 需要用 COUNT 函数来描述。

相关文章

  • 用 SQL 进行集合运算

    书上很多SQL内容在MYSQL上不支持,比如EXPECT1.监测两个表是不是完全相同 如果结果和A表和B表的行数一...

  • sql基础(10)用sql 进行集合运算

    SQL本身是面向集合的语言 ,也就是把集合作为整体,对数据加以考虑 数据本身并没有顺序可言! 我们先来回顾下集合 ...

  • 用Bedtools进行集合运算

    转自:https://zhuanlan.zhihu.com/p/52322803[https://zhuanlan...

  • sql 集合运算

    用来做例子的两个表 tb_text1tb_text1 tb_text2tb_text2 1. UNION 两个查询...

  • SQL——集合运算

    SQL作用在关系上的union、intersect、except运算对应数学集合论中的并、交、差运算。 通用形式:...

  • T-SQL基础(四)之集合运算

    三个运算符 T-SQL支持三个集合运算符:UNION、INTERSECT、EXCEPT。 集合运算符查询的一般形式...

  • sql server集合运算

    集合运算包含四种:1.并集运算2.交集运算3.差集运算 为什么使用集合运算:1.在集合运算中比联接查询和EXIST...

  • KVC(4)集合运算符

    集合运算符 参考Using Collection Operators 对集合进行valueForKeyPath: ...

  • SQL进阶教程之1.7集合运算

    集合运算注意事项 需要保留重复项目的集合,用ALL 集合运算有优先级,intersect 比 union 和 ex...

  • SQL 和 SPL 的有序运算对比

    【摘要】 有序运算是指按照一定的次序对有序集合的成员进行计算。SQL 和 SPL 是大家比较熟悉的程序语言,本文将...

网友评论

      本文标题:用 SQL 进行集合运算

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