1.複製表
- 通過
create table tbName as select * from otherTbName
複製表
注意事項
- 只複製數據,不復制約束: 通過該命令賦值的表,在源表中的約束、默認值、觸發器和存儲過程等對象,在複製後的目標中會丟失。
- 在執行賦值命令時,會自動提交未提交源數據表中未提交的數據
create table t1(id integer,name varchar2(30)); --創建表
insert into t1(id,name) values(1001,'test1'); -- 插入數據
create table t2 as select * from t1; --複製表
insert into t2(id,name) values(1002,'test2'); --t2 插入數據
rollback; --回滾(此時t1 中的插入命令是不會回滾的)
- 結果
t1和t2 連個表中都保存一條數據,即 1001 test1
2.insert all
同時向多個表中插入相同的數據
--無條件
insert all
into t1(id,name) values(eid,ename)
into t2(name) values(ename)
select 1003 eid,'test3' ename from dual; --前面的實參要和這裏的別名對應
--有條件
insert all
when dept in ('研發部','市場部') then
into t1(id,name) values(eid,ename)
when job in('經理','主管') then
into t2(id,name) values(eid,ename)
select id eid,name ename from tbName
3.行列轉換
create table t2(d varchar2(10),des varchar2(50));--創建表
create table t1 as --複製表(示例數據)
select '熊樣,精神不佳' d1,
'貓樣,溫順聽話' d2,
'狗樣,神奇活現' d3,
'鳥樣,嚮往明天' d4,
'花樣,願你快樂像花兒一樣' d5
from dual;
insert all --行列轉換
into t2(d,des) values('週一',d1)
into t2(d,des) values('週二',d2)
into t2(d,des) values('週三',d3)
into t2(d,des) values('週四',d4)
into t2(d,des) values('週五',d5)
select d1,d2,d3,d4,d5 from t1;
- t1
- t2
4.用其他表更新值
alter table emp add dname varchar2(50); --修改員工表,增加榮譽字段部門名稱
--方法一
update emp set --修改員工表部門名稱
emp.dname=
(select dept.dname from dept
where dept.deptno=emp.deptno)
--方法二
using(
select emp.dname,dept.dname new_dname
from emp inner join dept on emp.deptno=dept.deptno
)
set dname=new_dname
--可能會報 無法修改與非鍵值保存表對應的列,這時在表dept中增加唯一索引或主鍵,在執行即可。
--方法三
merge into emp
using(select dname,deptno from dept) dept on(dept.deptno=emp.deptno)
when matched then
update set emp.dname=dept.dname; --這裏的update 後面無需表名,直接寫 set