《用实例学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)这是不同于嵌套子查询的地方。

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

你可能感兴趣的:(《用实例学习SQL》系列)