2.4集合操作
集合查询有UNION , INTERSECT及 MINUS。
UNION 表示求两个查询的合集,会去掉重复的记录,如果重复的记录也需要这用UNION ALL连接符,注意连接的两个查询必须要有相同类型查询字段。
INTERSECT表示返回查询结果中相同的部。
MINUS表示返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。。 例子:
SELECT 库房ID,药品ID,可用数量 FROM 药品库存 where 库房ID=52 AND 可用数量<>0 and 药品ID=1
UNION
SELECT 库房ID,药品ID,可用数量 FROM 药品库存 where 库房ID=53 AND 可用数量<>0 and 药品ID=1;
查询结果为:
库房ID 药品ID 可用数量
---------- ---------- ----------
52 1 -24
53 1 -3094
把UNION 换成INTERSECT后的结果为没有记录。
把UNION 换成MINUS后的结果为第一个查询的记录:
库房ID 药品ID 可用数量
---------- ---------- ----------
52 1 -24
2.5 两种优化表查询的方法:
1、表的查询顺序(针对多表查询)
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时, 会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。
例如: 表 TAB1 16,384 条记录
表 TAB2 1 条记录
选择TAB2作为基础表 (最好的方法)
select count(*) from tab1,tab2 执行时间0.96秒
选择TAB2作为基础表 (不佳的方法)
select count(*) from tab2,tab1 执行时间26.09秒
如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库sql应用培训资料(18)在线全文阅读。
相关推荐: