《oracle从入门到精通(PDF格式)》第19章


两个表的并集,但不显示重复行。执行的时候要先排序再剔重,所以结果集是有序的。
union all
也是两个表的并集,而且显示重复行。
语法同上。
intersect
select employee_id;job_id from employees
intersect
select employee_id;job_id from job_history;
minus
select employee_id;job_id from employees
minus
select employee_id;job_id from job_history;
e…j=e…e 与j的交集;
j…e=j…j 与e的交集;
注:在 select 列表中的表达式必须有同样的数目和类型。
匹配 SELECT 语句
select employee_id;job_id;salary from employees
union
select employee_id;job_id;0 from job_history;
括号可以用拉修改序列的执行顺序。
4。ORDER BY 子句:
只能在整个集合的最后出现;
可以按照第一个 SELECT 语句中的列名,别名或者位置号排序。
第 42 页,共 106 页 
…………………………………………………………Page 43……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通 
5。GROUP BY 子句的增强
CUBE 操作符的 GROUP BY
在 GROUP BY 子句中使用 ROLLUP 或者 CUBE 来产生分组小计;
ROLLUP 分组产生包括规则的分组结果和小计的结果的组合;
GROUP BY 'ROLLUP'(col_name_list)
ROLLUP:
a ab abc
abc
ab ab
a a a
all all all
CUBE 分组产生包括 ROLLUP 产生的结果和交叉分组小计。
cube:
a ab abc
a ab abc
all a ab
b ac
all bc
a
b
c
all
6。GROUPING 函数
参数一定是在 CUBE 或 ROLLUP 里进行分组排序的字段或表达式之一。
通过 1 或0来判断结果集中的空值是由于本身列的值是空的,还是由于使用 CUBE或 ROLLUP 产 
生的空值。
1 代表是由于分组产生的空值,没有参与分组。
0 代表是由于列本身产生的空值,参与了分组,但分组中没有包含它。
GROUPING SETS
可以使用 GROUPING SETS 在同一个语句中定义多个组集。
只需要访问一次基表。
不需要写很复杂的 UNION 语句。
GROUPING SETS 子句中组合的元素越多,语句的执行性能就越好。
group by GROUPING SETS((abc);(ab);(bc);(a);(b))
组合列:
是一个列的组合,在分组计算时被作为一个单元处理。
第 43 页,共 106 页 
…………………………………………………………Page 44……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通 
2。9 高级子查询
1。 成对子查询:
行内视图的性能比成对子查询的性能高。
相关子查询:
主查询的字段在子查询里做条件(特征)。
主查询先执行,取出第一条数据,把该数据传入子查询做比较,返回查询结果给主查询,主查 
询根据这个结果再做查询
依次类推
直到主查询中没有可查询列为止。
EXISTS 操作符
EXISTS 操作符测试子查询的结果是否存在;
返回 TRUE 或 FALSE
查询机制:
如果一个子查询找到了结果:
在内部子查询中不在继续执行,条件被设为 TRUE
如果一个子查询没有找到结果:条件被设为 FALSE
select col_list from table_name tab_alias
where exists (select "x" from table_name where col=tab_alias。col);
用的是相关子查询
NO EXISTS 操作符
和 NOT IN 相对应,速度要快,性能好。
UPDATE 中的相关子查询
update emp e
set department_name in(select d。department_name from departments d where
e。department_id=d。department_id);
delete 中的相关子查询
2。层次查询
select 'level';column;expr from table 'where condition'
'start with'起点(自底向上/自顶向下)
'connect by prior + 主键/外键=外键/主键'//看你往哪个方向查
自顶向下 左边放主键,右边放外键
select employee_id;last_name;salary;job_id;manager_id
from employees
start with manager_id is null
connect by prior employee_id=manager_id;
自底向上 右边放主键,左边放外键
level(伪列)
层次的级别:不固定值。
第 44 页,共 106 页 
…………………………………………………………Page 45……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通 
使用 level 和 LPAD 层次化格式的显示
修剪分支
Oracle 9i 对 DML 和DDL 语句的扩展
多表插入的 INSERT 语句
insert 。。。。 select 语句可以被用来在单个 DML 语句中向多个表插入数据。
多表插入语句:
无条件 INSERT
条件 ALL INSERT
条件 FIRST INSERT
轮巡 INSERT
二、Management:
1。Oracle的构件和组件
instance 实例/例程
database 数据库
SGA 系统全局区
shared pool 共享池
library cache 库高速缓存区
data dictionary cache 字典高速缓存区
database buffer cache 数据库高速缓存区
redo log buffer 重做日志缓冲区
java pool java 池
large pool 大池
PMON 进程监视进程
SMON 系统监视进程
DBWR 数据库写进程
LGWR 日志写进程
CKPT 检查点进程
data file 数据文件
control file 控制文件
redo log file 重做日志文件
parameter file 初始化参数文件
password file 口令文件
archived log file 归档日志文件
user process 用户进程
server process 服务进程
PGA 程序全局区
tablespace 表空间
第 45 页,共 106 页 
…………………………………………………………Page 46……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通 
2。数据库的物理结构:
1。控制文件
2。 数据文件
3。 重做日志文件
4。 data file 数据文件:
5。 作用:存放数据。
6。 数据文件大小可以扩展。
7。 tablespace 表空间:一个或多个数据文件的逻辑组成。
一个数据库最少有一个 system 表空间,一个表空间最少有一个数据文件。
8。 redo log file 重做日志文件
重做日志:在数据库中发生的所有改变,改变的每一条信息都叫做一条重做日志信息。
存放重做日
小说推荐
返回首页返回目录