《用实例学SQL》第五篇:集合查询和基于派生表的查询

相关表
一、集合查询
我们知道,对于集合的操作有三个:并,交,差
在SQL中,在表之间进行集合操作,要求进行操作的表有相同的列的数目和对应列的类型相同

(1)、并操作(union)
union会自动取出重复元组,而union all不会

select * 
from Student
where Sdept = 'CS'
union (all)
select *
from Student
where Sage < 19

集合的并操作和表的连接的差别在于:并操作是纵向操作,而连接是元组的横向相连
(2)交操作(intersect)(结果元组是两个表的共同的元组)
(3)差操作(except)(结果元组就是上面表减去下面表中相同元组后剩下的元组)
集合操作的关键字位置相同,就不一一举例了。

二、基于派生表的查询
例子:

select *
from Sc, (select * from Student where Sage < 19) newT
where Sc.Sno = newT.Sno

注意在from语句中的派生表必须要给与一个名字(空格后一个新名字或加关键字as)这是不同于嵌套子查询的地方。

基于派生表的查询是一种常见的优化查询的方式,它通过进行更少的笛卡尔连接来减少开销从而优化查询,在允许的条件下我们应该尽可能使用派生子查询来优化查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值