Oracle集合

  1 --union  并集
  2 select  * from emp where ename like '%A%' union
  3 select * from emp where ename like '%M%';
  4 --union all  集并  公共部分 会包含二次
  5  select * from emp where ename like '%A%' 
  6   union all 
  7   select * from emp where ename like '%M%'; 
  8  --intersert交集  
  9  select * from emp where ename like '%A%' 
 10      intersect 
 11      select * from emp where ename like '%M%'; 
 12  --minus求差集  S1: A -  (S1&S2 union)1100-1200
 13       select * from emp where sal between 700 and 1200   --700-1100;  
 14      minus
 15      select  * from emp where sal between  1100 and 1500;
 16 
 17 --联合与全联合运算
 18  --union
 19  create table emp_history as select * from emp ;--辅助
 20  
 21  select empno,ename,sal,hiredate,deptno 
 22  from emp where deptno =20
 23  union
 24  select empno,ename,sal,hiredate,deptno 
 25  from emp_history where deptno =30
 26  order by deptno;
 27  
 28  -- union all 不能消除重复行,不能输出排序 使用DISTINCT关键字
 29   select empno,ename,sal,hiredate,deptno 
 30  from emp where deptno =20
 31  union  all
 32  select empno,ename,sal,hiredate,deptno 
 33  from emp_history where deptno =30
 34  order by deptno;
 35  
 36  --相交运算   1.列数和数据类型与select语句一样,但列名可以不同
 37  
 38  select empno,ename,sal,hiredate,deptno from emp
 39   where deptno =20 intersect
 40   select empno,ename,sal,hiredate,deptno from emp_history
 41   where deptno=20;
 42   
 43 --相减运算
 44 --查询在第一个表中而不再第二个表中的行
 45 select empno,ename,sal,hiredate,deptno from emp
 46 where deptno=20
 47 minus
 48 select empno,ename,sal,hiredate,deptno from emp
 49 where deptno=20;  
 50 --结构化查询   实现递归表的查询
 51 select * from emp;
 52 select level,lpad(' ',2*(level-1))||ename, empno,mgr,hiredate,sal  from emp
 53 start with mgr is null  --start with以manager_id is null作为跟节点
 54 connect by prior empno=mgr;  
 55 --根据connect by prior规则,继续向下寻找,形成树状结构查询
 56  
 57 --用子查询插入数据
 58 create table emp_copy as select * from emp where 1=2;
 59 insert into emp_copy select * from emp where deptno=20;
 60 --insert插入多表数据
 61 create table emp_dept_10 as select * from emp where 1=2;
 62 create table emp_dept_20 as select * from emp where 1=2;
 63 create table emp_dept_30 as select * from emp where 1=2;
 64 insert first
 65   when deptno =10
 66     then 
 67       into emp_dept_10
 68     when deptno=20
 69       then 
 70         into emp_dept_20
 71       when deptno=30
 72       then
 73         into emp_dept_30
 74       else
 75          into emp_copy
 76        select * from emp;          
 77  
 78 select * from emp_dept_10;
 79 --Merge语句
 80 merge into emp_copy c       --目标表
 81 using emp e on (c.empno=e.empno)   --源表,可以是表,视图或查询
 82 when MATCHED then update           --当匹配时,进行update操作
 83   set c.ename=e.ename,c.job=e.job,c.mgr=e.mgr,
 84       c.hiredate=e.hiredate,c.sal=e.sal,c.comm=e.comm,
 85       c.deptno =e.deptno
 86    when not matched then
 87       insert
 88       values(e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,
 89       e.deptno);
 90       
 91 
 92 create table dept60_bonuses
 93 ( 
 94 empno number,bonus_amt number
 95 );
 96 insert into dept60_bonuses values(7369,0);
 97 insert into dept60_bonuses values(7788,2);
 98 insert into dept60_bonuses values(7876,3);
 99 select  empno,sal,ename from emp;
100 select * from dept60_bonuses;
101 --合并两张表,根据不同的语句删除,更新
102 merge into dept60_bonuses b
103 using ( select empno,sal,deptno from emp where deptno=20) e
104 on (b.empno=e.empno) 
105 when matched then
106 update set b.bonus_amt =e.sal*0.2
107 where b.bonus_amt=0
108 delete where (e.sal>2500)
109 when not matched then
110 insert (b.empno,b.bonus_amt)
111 values (e.empno,e.sal*0.1)
112 where (e.sal<4000);      
113 使用TRUNCATE清除表数据
114 与delete语句相比,使用truncate命令速度更快,原因  DTL
115 1不会激活表的删除触发器
116 2 属于数据定义语言,不会产生撤销信息
117 3 主外键关系无法清除表内容,必须禁用约束
118 不能使用PLSQL语句块 直接调用
119 --禁用约束
120 alter table dept disable constraint pk_dept cascade;
121 提交 commit; 回滚 rollback;
122 --sql>
123 create table jobs (adds varchar2(10),jname varchar2(20),sal number(10),comm number(10));
124 delete from jobs;
125 insert into jobs values('OFFICE','办公文员',3000,5000);
126 savepoint sp;
127 insert into jobs values('FINANCE','财务人员',4000,8000);
128 select * from jobs;
129 rollback to savepoint sp;
130 使用集合方法
131 --exits 方法   集合的坐标元素是否存在
132 declare
133         type projectlist is varray (50) of varchar2(16);
134         project_list projectlist:=projectlist('网站','ERP','CRM','CMS');
135 begin
136   if project_list.exists(5)
137     then
138       dbms_output.put_line('元素存在,其值为:'||project_list(5));
139       else
140         dbms_output.put_line('元素不存在');
141         end if;
142   end;        
原文地址:https://www.cnblogs.com/Remedy/p/8652134.html