oracle学习之集合运算和数据处理

集合运算主要有三种方式:

并集,union 两个集合相同的部份只保留一份,不同部份全部保留

   union  all 两个集合全部保留

交集,intersect 两个集合保留相同的部份

差集,minus A差集B 保留 A中不在B中出现的部份

集合运算的注意事项:

1,参与运算的各个集合必须列数相同,且类型一致!

2,采用第一个集合的表头作为最终使用的表头,(别名也只能在第一个集合上起)

3,可以使用括号(),先执行后面的语句。

使用示例:

select * from emp where deptno=10 union select * from emp where deptno=20;

select *from emp where deptno in(10,30)  
minus 
select * from emp where deptno in( 20,10);

难题分析,下面是最终执行结果:

分析后,可知道,有三个集合:

各个部门各个工种的工资总额 = 集合1

各个部门的工资总额 = 集合2

工资总额 = 集合3

最后将三个集合取并集:

发现得到上面的错误,这里需要注意集合运算的注意事项

select deptno,job,sum(sal) from emp group by deptno,job  union 
select deptno,to_char(null),sum(sal) from emp group by deptno union 
select to_number(null),to_char(null),sum(sal) from emp ;

  在这里,为了达到与题意一样的效果,需要设置报表显示样式:

break on deptno skip 2;

  不使用时,记得关闭显示效果:

break on null;

  最终结果如下图:

数据处理,SQL语言分类如下:

1,DML,即date manipulation language 数据操作语言,含:insert,update,delete,select

2,DDL,即date definition language 数据定义语言,含:create,alter,truncat

3,DCL,即date control language 数据控制语言,含:grant赋权,revoke回收权限

insert插入语句:

语法 : insert into tablename[(col1,col2,…)] values(val1,val2,…)|查询结果集;

 比如:

//隐式插入null
insert into dept(deptno,dname) values(60,'60name');
//显示插入null
insert into dept values(70,'70name',null);

  还可以使用地址符号 &

可以继续使用 / 调用上次使用的语句,继续输入值插入数据,非常方便 !

批量插入数据:

//创建表,并复制表结构:
create table emp10 as select * from emp where 1 = 2;
//一次性插入10号部门的员工
insert into emp10 select * from emp where deptno =10;

  update 修改数据,语法:

update tablename set col1=val1,col2=val2… where cond..;

  例子如下:

update dept set loc='60loc' where deptno = 60;
//注意,同样可以使用&取址符号,对所有DML语句都通用。

  delete 删除数据,与update一样

这里需要注意,delete删除数据是逐条删除,而truncate是先摧毁表,再重建,将数据全部清除

truncate table emp10;

  当数据量较大的时候,建议使用truncate

delete与turncate的区别:

1,delete逐条删除,truncate推毁表重建

2,Delete不会释放空间,truncate会释放

3,delete 可以rollback,truncate不能回滚

 

 最后补充一点:

语句执行时间记录开关:
set timing on/off
回显开关:
set feedback on/off

  

posted @ 2017-11-11 21:53  *平凡*随风舞  阅读(783)  评论(0编辑  收藏  举报