一、插入新記錄
建立測試表,各列都有預設值。
create
table test(
c1 varchar2(10) defaut'預設1',
c2 varchar2(10) defaut'預設2',
c3 varchar2(10) defaut'預設3',
c4 date
default sysdate);
新增資料如下:
insert
into test(c1,c2,c3) values(default,null,'手輸值');
select * from test;
c1 c2 c3 c4
------ ------ ------ ------
預設1 手輸值 2017-08-07
1 row selected
可以看出幾點
1、如果insert語句中沒有含預設值的列,則會新增預設值,如c4列。
2、如果含預設值的列,使用default關鍵字,都會新增預設值,如c1列。
3、如果設定了值如null可其它,則不會再生成預設值,如c2、c3列。
二、多表插入語句
多表插入分為以下四種
1、無條件insert
2、有條件 insert all
3、轉置insert
4、有條件insert all
建立測試用表
create
table emp1 as
select empno,ename,job from emp where
1=2;
create
table emp2 as
select empno,ename,deptno from emp where
1=2;
無條件insert
insert
allinto emp1(empno,ename,job)values(empno,ename,job)
into emp2(empno,ename,deptno)values(empno,ename,deptno)
select impno,ename,job,deptno from emp where deptno in(10,20);
這樣會同時向兩張表中插入資料,且兩個表中插入的資料條數是一樣的
有條件 insert
alldelete emp1;
delete emp2;
insert
allwith job in('salesman','manager') then
into emp1(empno,ename,job)values(empno,ename,job)
with deptno in('20','30') then
into emp2(empno,ename,deptno)values(empno,ename,deptno)
select impno,ename,job,deptno from emp
這樣會按條件插入
insert
first
delete emp1;
delete emp2;
insert
first
with job in('salesman','manager') then
into emp1(empno,ename,job)values(empno,ename,job)
with deptno in('20','30') then
into emp2(empno,ename,deptno)values(empno,ename,deptno)
select impno,ename,job,deptno from emp
當第乙個表符合條件後,第二個表將不再插入對應的行,emp1和emp2不再會有相同的資料
轉置insert
create
table sales_source_data (
employee_id number(6),
week_id number(2),
sales_mon number(8,2),
sales_tue number(8,2),
sales_wed number(8,2),
sales_thur number(8,2),
sales_fri number(8,2)
);insert
into sales_source_data values (176,6,2000,3000,4000,5000,6000);
create
table sales_info (
employee_id number(6),
week number(2),
sales number(8,2)
);看上面的表結構,現在將要sales_source_data表中的資料轉換到sales_info表中,這種情況就需要使用旋轉insert
示例如下:
insert
allinto sales_info values(employee_id,week_id,sales_mon)
into sales_info values(employee_id,week_id,sales_tue)
into sales_info values(employee_id,week_id,sales_wed)
into sales_info values(employee_id,week_id,sales_thur)
into sales_info values(employee_id,week_id,sales_fri)
select employee_id,week_id,sales_mon,sales_tue,
sales_wed,sales_thur,sales_fri
from sales_source_data;
部分選自《oracle 查詢優化改寫技巧與案例》 有教無類 落落 著
oracle中sql語句查詢優化 五
10 sql書寫的影響 同一功能同一效能不同寫法sql的影響 如乙個sql在a程式設計師寫的為 select from zl yhjbqk b程式設計師寫的為 select from dlyx.zl yhjbqk 帶表所有者的字首 c程式設計師寫的為 select from dlyx.zlyhjbq...
SQL查詢和優化(三)
給查詢結果排序 select empno,ename,hredate from emp where deptno 10 order by hiredate asc 也可以這樣寫 select empno,ename,hredate from emp where deptno 10 orderby3 ...
SQL查詢和優化(九)
用left join 優化標量子查詢 多次訪問同乙個表時,盡量不用標量子查詢 select s.sid,s.sname,s.shot,s.stype,select a.aid from a where a.aid s.aids aid,select a.aname from a where a.ai...