数据库7 集合查询 数据更新

集合查询

集合操作主要包括 UNION 并 INTERSECT 交 和 EXCEPT 差

查询计算机科学系的学生及年龄不大于19岁的学生

SELECT *
FROM STUDENT
WHERE SDEPT='CS'
UNIOM
SELECT*
FROM STUDENT
WHERE SAGE<=19;

在这里插入图片描述

例 3.65 查询选修了课程1或者选修了课程2的学生

SELECT *
FROM SC
WHERE SNO='1'
UNION
SELECT *
FROM SC
WHERE SNO='2';

在这里插入图片描述

例3.66 查询计算机科学系的学生与年龄不大与19岁的学生的交集

SELECT *
FROM STUDENT
WHERE SDEPT='CS'
INTERSECT
SELECT *
FROM STUDENT 
WHERE SAGE<=19;

在这里插入图片描述
实际就是查询计算机科学系中年龄不大于19岁的学生

例3.67 查询既选修了课程1又选修了课程2的学生(交集)

SELECT *
FROM SC
WHERE CNO='1'
INTERSECT
SELECT *
FROM SC
WHERE CNO='2';

在这里插入图片描述
根本没有两个一块选的

例3.68 查询计算机科学系的学生于年龄不大于19岁学生的差集

实际上就是找计算机系里面大于19岁的学生

SELECT *
FROM STUDENT
WHERE SAGE<=19
EXCEPT
SELECT *
FROM STUDENT
WHERE SDEPT='CS';

在这里插入图片描述
一开始这么写的 发现结果不对 仔细一想 两个集合 A B
A-B和B-A 是不一样的
按照题目要求代码应该这么写

SELECT *
FROM STUDENT
WHERE SDEPT='CS'
EXCEPT
SELECT *
FROM STUDENT 
WHERE SAGE<=19;

在这里插入图片描述

基于派生表的查询

派生表可以理解为临时创建一个表 然后在这个虚表的帮助中查询

例3.57 找出每个学生超过他自己选修课程平均成绩的课程号

SELECT SNO,CNO
FROM SC,(SELECT SNO,AVG(GRADE)
FROM SC 
GROUP BY SNO
) AS AVG_SC(AVG_SNO,AVG_GRADE)
WHERE SC.SNO=AVG_SC.AVG_SNO AND SC.GRADE>=AVG_SC.AVG_GRADE;

在这里插入图片描述
注意下划线-和-的区别 英文下划线在TSQ

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值