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
oracle學習之集合運算和數據處理