SQL查詢和優化(五)

2021-08-05 20:24:59 字數 3137 閱讀 4453

一、插入新記錄

建立測試表,各列都有預設值。

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...