数据库集合运算

集合运算
  • SQL作用在关系(relation,就是指表)上的 union、intersect 和 except 运算对应于数学集合论中的∪, ∩和-运算

  • union、intersect 和 except 运算与 select 子句不同,它们会自动去除重复

  • 如果想保留所有重复,必须用 union all、intersect all 和 except all

  • 假设一个元组在关系r中重复出现了m次,在关系s中重复出现了n次,那么这个元组将会重复出现:

    • 在 r union all s 中,重复出现 m+n次
    • 在 r intersect all s 中,重复出现 min(m,n)次
    • 在 r except all s 中,重复出现max(0,m-n) 次
  • 举个例子:已知表结构section(course_id,sec_id,semester,year,building,room_number,time_slot_id)

    • 例1,找出在2009年秋季开课,或者在2010年春季开课或两个学习都开课的所有课程
      (select course_id from section where semester =‘Fall’and year = 2009) union (select course_id from section where semester =‘Spring’and year = 2010);

    • 例2,找出在2009年秋季和2010年春季同时开课所有课程
      (select course_id from section where semester =‘Fall’and year = 2009) intersect (select course_id from section where semester =‘Spring’and year = 2010);

    • 例3,找出在2009年秋季开课,但不在2010年春季开课的所有课程
      (select course_id from section where semester =‘Fall’and year = 2009) except (select course_id from section where semester =‘Spring’and year = 2010);

  • 补充

    • 在 SQL Server 2000中,只支持 union 和 union ALL
    • 在 Oracle 中,支持 union,union ALL,intersect 和 Minus;但不支持 Intersect ALL 和 Minus ALL
  • 参考

    • 浙江大学 陈岭《数据库系统原理》课程第四章的集合运算

你可能感兴趣的:(数据库系统原理)