oracle9i学习笔记之十八 Oracle9i对DML和DDL语句的扩展
2008-12-13 17:16
232 查看
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;
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;
相关文章推荐
- MySQL学习笔记--DQL、DML、DDL、TCL语句,约束(主键、外键)
- php学习笔记(十九)mysqli扩展库的多语句查询、事物处理以及字符集设置
- 【Mysql学习笔记】DDL、DML、DCL区别
- php学习笔记(十八)php扩展库mysqli的使用和处理结果集
- Mysql数据库学习(一):数据库基本概念、关系型数据库、Mysql数据库安装配置、DDL/DCL/DML语句
- Mysql DBA 高级运维学习笔记-DML语句之insert知识讲解
- 20171130学习笔记之DDL、DML和DCL之见的区别
- MySql学习笔记(4)--SQL(DML)语句语法
- JDBC学习笔记之dml语句(PreparedStatement&Statement)
- C++学习笔记 5th —— 万能流程控制if语句 续篇:扩展与实际应用
- 高级sql学习--扩展DDL和DML!!!
- 【Java学习笔记】String相关语句
- PHP学习笔记5(结构语句)
- Python学习笔记(九):if、while、for语句
- shell脚本 if语句学习笔记
- PL/SQL学习笔记[5]-流程控制语句
- 学习mysql的笔记:mysql十大基本入门语句
- PHP学习笔记5-PHP循环语句的介绍与应用
- WebKit 学习笔记(5) -- qt javascript 扩展
- PHP学习笔记——循环结构for语句应用