1.语句回顾
1)用insert语句添加新行到表中
insert into table[(column [,column...])]
values (value[,value...]);
用此语法一次只能插入一行:
例:
insert into dept(deptno,dname,loc)
values (70,'public relations','shenyang');
2)用update语句修改存在的行
update table
set column=value[,column=value,...]
[where condition];
-一次可以修改多行
-如果使用了where子句,可以指定一行或多行被修改
例:
update emp
set deptno=30
where empno=7369;
2.多表insert语句
1)insert...select语句能够作为单个的dml语句的一部分用于插入行到多表中
2)多表insert语句能够被用在数据仓库系统中从一个或多个操作源转移数据到一组目的表中
3)oracle9i引入下面的多表插入语句的类型:
-无条件insert
-条件all insert
-条件first insert
-枢轴式(pivoting)insert
3.无条件insert语句
1)语法
insert all
[insert_into_value][values_clause]
(subquery)
2)例子
-从emp表中选择empno大于7698雇员的empno,hiredate,sal和mgr值
-用多表insert插入这些值到sal_history(empno,hiredate,sal)和mgr_history(empno,mgr,sal)表中
insert all
into sal_history values(empno,hiredate,sal)
into mgr_history values(empno,mgr,sal)
select empno,hiredate,sal,mgr
from emp
where empno>7698;
4.条件insert语句
1)语法
insert all
[when condition then]
[insert_into_clause][values_clause]
(subquery)
2)例子
-从emp表中选择empno大于7698雇员的empno,hiredate,sal和mgr值
-如果sal大于$2500,用一个条件多表insert语句插入这些值到sal_history表中
-如果mgr大于7782,用一个多表insert语句插入这些值到mgr_history表中
insert all
when sal>2500 then
into sal_history values(empno,hiredate,sal)
when mgr>7782 then
into mgr_history values(empno,mgr,sal)
select empno,hiredate,sal,mgr
from emp
where empno>7698;
5.条件first insert
1)语法
insert first
[when condition then]
[insert_into_clause][values_clause]
[else]
[insert_into_clause][values_clause]
(subquery)
2)例子
-从emp表中选择empno大于7698雇员的empno,hiredate,sal和mgr值
-如果sal大于$2500,则用一个条件first多表insert语句插入这些值到sal_history表中
-如果第一个when子句的值为true,则该行后面的when子句被跳过
-如果mgr大于7782,用一个条件first多表insert语句插入这些值到mgr_history表中
insert first
when sal>2500 then
into sal_history values(empno,hiredate,sal)
when mgr>7782 then
into mgr_history values(empno,mgr,sal)
select empno,hiredate,sal,mgr
from emp
where empno>7698;
6.枢轴式(pivoting) insert
1)支持从非关系数据库表中接受一组销售记录
sales_source_data的格式如下:
empno,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sales_fri
2)你可能想要以一种典型的相关格式存储这些记录到sales_info(empno,week,sales)表中
3)使用pivoting insert,从非关系数据库表转换销售记录集到关系格式
insert all
into sales_info values(empno,week_id,sales_mon)
into sales_info values(empno,week_id,sales_tue)
into sales_info values(empno,week_id,sales_wed)
into sales_info values(empno,week_id,sales_thur)
into sales_info values(empno,week_id,sales_fri)
select empno,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sales_fri
from sales_source_data;