数据库集合运算

集合运算
  • 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
  • 参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值