Oracle查询优化-插入、更新与删除

--插入、更新与删除
--1.插入新纪录
--1.1.建立测试表
DROP TABLE TEST;
CREATE TABLE TEST(
C1 VARCHAR2(10) DEFAULT ‘默认1‘,
C2 VARCHAR2(10) DEFAULT ‘默认2‘,
C3 VARCHAR2(10) DEFAULT ‘默认3‘,
C4 DATE DEFAULT SYSDATE
);
--1.2.增加数据
INSERT INTO TEST(C1,C2,C3) VALUES(DEFAULT,NULL,‘手输值‘);
--1.3.查询
SELECT * FROM TEST;
--1.4.总结
/**
 *1.如果INSERT INTO 语句中没有包含有默认值的列,如C4,则会插入默认值;
 *2.如果有包含默认值的列,则应该用DEFAULT关键字才能添加默认值,如C1;
 *3.如果已显示设定了NULL或其他值,则不会产生默认值,如C2和C3。
 */
--2.复制表及数据
CREATE TABLE TEST2 AS SELECT * FROM TEST;
--或者先复制表结构,然后再插入数据
CREATE TABLE TEST2 AS SELECT * FROM TEST WHERE 1=2;
/*复制的表不包含默认值等约束条件,使用这种方式复制表后,需要重建默认值及索引和约束等信息*/
--3.用WITH CHECK OPTION限制数据录入
INSERT INTO (SELECT EMPNO,ENAME,HIREDATE FROM EMP
WHERE HIREDATE <= SYSDATE WITH CHECK OPTION)VALUES (9999,‘TEST‘,SYSDATE+1)

ORA-01402: view WITH CHECK OPTION where-clause violation--视图WITH CHECK OPTION的where子句违规
--4.多表插入语句
--建立测试表
DROP TABLE EMP1;
DROP TABLE EMP2;
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;
--4.1.无条件INSERT ALL
INSERT ALL
       INTO EMP1(EMPNO,ENAME,JOB) VALUES (EMPNO,ENAME,JOB)
       INTO EMP2(EMPNO,ENAME,DEPTNO) VALUES (EMPNO,ENAME,DEPTNO)
SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP WHERE DEPTNO IN (10,20);
SELECT * FROM EMP1;
EMPNO ENAME      JOB
----- ---------- ---------
 7369 SMITH      CLERK
 7566 JONES      MANAGER
 7782 CLARK      MANAGER
 7788 SCOTT      ANALYST
 7839 KING       PRESIDENT
 7876 ADAMS      CLERK
 7902 FORD       ANALYST
 7934 MILLER     CLERK
SELECT * FROM EMP2;
EMPNO ENAME      DEPTNO
----- ---------- ------
 7369 SMITH          20
 7566 JONES          20
 7782 CLARK          10
 7788 SCOTT          20
 7839 KING           10
 7876 ADAMS          20
 7902 FORD           20
 7934 MILLER         10
--4.2.有条件INSERT ALL
DELETE EMP1;
DELETE EMP2;
INSERT ALL
       WHEN JOB IN (‘SALESMAN‘,‘MANAGER‘) THEN
       INTO EMP1(EMPNO,ENAME,JOB)VALUES(EMPNO,ENAME,JOB)
       WHEN DEPTNO IN(‘20‘,‘30‘)THEN
       INTO EMP2(EMPNO,ENAME,DEPTNO)VALUES(EMPNO,ENAME,DEPTNO)
SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP;
SELECT * FROM EMP1;
EMPNO ENAME      JOB
----- ---------- ---------
 7499 ALLEN      SALESMAN
 7521 WARD       SALESMAN
 7566 JONES      MANAGER
 7654 MARTIN     SALESMAN
 7698 BLAKE      MANAGER
 7782 CLARK      MANAGER
 7844 TURNER     SALESMAN
SELECT * FROM EMP2;
EMPNO ENAME      DEPTNO
----- ---------- ------
 7369 SMITH          20
 7499 ALLEN          30
 7521 WARD           30
 7566 JONES          20
 7654 MARTIN         30
 7698 BLAKE          30
 7788 SCOTT          20
 7844 TURNER         30
 7876 ADAMS          20
 7900 JAMES          30
 7902 FORD           20
--4.3.有条件INSERT FIRST
DELETE EMP1;
DELETE EMP2;
INSERT FIRST
       WHEN JOB IN (‘SALESMAN‘,‘MANAGER‘) THEN
       INTO EMP1(EMPNO,ENAME,JOB)VALUES(EMPNO,ENAME,JOB)
       WHEN DEPTNO IN(‘20‘,‘30‘) THEN
       INTO EMP2(EMPNO,ENAME,DEPTNO) VALUES(EMPNO,ENAME,DEPTNO)
SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP;
SELECT * FROM EMP1;
EMPNO ENAME      JOB
----- ---------- ---------
 7499 ALLEN      SALESMAN
 7521 WARD       SALESMAN
 7566 JONES      MANAGER
 7654 MARTIN     SALESMAN
 7698 BLAKE      MANAGER
 7782 CLARK      MANAGER
 7844 TURNER     SALESMAN
SELECT * FROM EMP2;
EMPNO ENAME      DEPTNO
----- ---------- ------
 7369 SMITH          20
 7788 SCOTT          20
 7876 ADAMS          20
 7900 JAMES          30
 7902 FORD           20
 /*INSERT ALL与INSERT FIRST不同的是:当第一个表符合条件后,第二个表将不再插入对应的行,表二中不再有与表一相同的数据EMPNO=7654*/
--4.4.转置INSERT
DROP TABLE T1;
DROP TABLE T2;
CREATE TABLE T2(D VARCHAR2(10),DES VARCHAR2(50));
CREATE TABLE T1 AS
SELECT ‘陇西行四首·其二‘ AS D1,
       ‘誓扫匈奴不顾身‘ AS D2,
       ‘五千貂锦丧胡尘‘ AS D3,
       ‘可怜无定河边骨‘ AS D4,
       ‘犹是春闺梦里人‘ AS D5
FROM DUAL;
/*转置 INSERT ALL*/
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;
SELECT * FROM T1;
D1                      D2                    D3                    D4                    D5
----------------------- --------------------- --------------------- --------------------- ---------------------
陇西行四首·其二         誓扫匈奴不顾身        五千貂锦丧胡尘        可怜无定河边骨        犹是春闺梦里人
SELECT * FROM T2;
D          DES
---------- --------------------------------------------------
诗名       陇西行四首·其二
第一句     誓扫匈奴不顾身
第二句     五千貂锦丧胡尘
第三句     可怜无定河边骨
第四句     犹是春闺梦里人
时间: 2024-10-08 16:15:03

Oracle查询优化-插入、更新与删除的相关文章

mySQL教程 第5章 插入 更新与删除数据

第5章 插入 更新与删除数据 使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不用指定列 其中的into可以省去 insert into TStudent values ('00008','白安','男','132302197604044565','19760404', '[email protected]','JAVA','20120803')

mySQL 教程 第5章 插入 更新与删除数据

使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不用指定列 其中的into可以省去 insert into TStudent values ('00008','白安','男','132302197604044565','19760404', '[email protected]','JAVA','20120803') insert TStudent

DButils工具类可以用来获取数据库连接向数据库插入更新删除对象2

package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.lang.reflect.*; import java.sql.*; import java.text.SimpleD

SQL Server索引进阶:第十三级,插入,更新,删除

在第十级到十二级中,我们看了索引的内部结构,以及改变结构造成的影响.在本文中,继续查看Insert,update,delete和merge造成的影响.首先,我们单独看一下这四个命令. 插入INSERT 当向表中插入一行数据的时候,不管表是堆表还是聚集索引表,肯定会在表的索引中插入一个入口,过滤索引除外.这么做的时候,SQL Server使用索引键的值从根页到叶子层页,到达叶子层页之后,检查页的可用空间,如果有足够的空闲空间,新的入口就会被插入适当的位置. 最终,SQL Server可能会试图向一

Entity Framework 6 Recipes 2nd Edition(10-10)译 - &gt; 为TPH继承的插入、更新、删除操作映射到存储过程

10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product )(见Figure 10-13). 而且为这个表的每种产品创建了创建了派生模型,这个模型如Figure 10-14. Figure 10-13. 一个含有鉴别列(ProductType)的产品表, 表的每行按该列的值划分不同的产品 Figure 10-14. TPH继承形式的模型 接下来把这个模型

mysql 数据插入、更新、删除

(1).数据插入insert 语法:insert into 表名 (字段名称1, 字段名称2,n,)values('值1','值2','值3') 举例说明: create table gonda( user_id int, user_name varchar(15), old int, address varchar(50)); 标准数据插入: insert into gonda(user_id,user_name,old,address) values('111','alvin','2000'

ASP入门(二十三)- 数据库插入、更新和删除操作

我们这里介绍如何使用 Recordset 对象进行插入.更新和删除操作,顺便和 SQL 语句对比. 插入记录 AddNew 方法用于插入一条记录,首先打开一个记录集,并且这个记录具备可写特性,而后调用 AddNew 方法告诉 ADO 要插入一条记录,而后分别设置各个字段的值,最后调用 Update 方法将插入的记录生效. 还是直接看具体代码和注释吧(AddNew.asp),如下: <!--#include file="../include/conn.asp"--> <

Ado.Net基础拾遗二:插入,更新,删除数据

插入数据 1 public void InsertDataToSQL() 2 { 3 string conStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString; 4 SqlConnection conn = new SqlConnection(conStr); 5 conn.Open(); 6 7 SqlCommand cmd = new SqlCommand

FireDAC 下的 Sqlite [5] - 数据的插入、更新、删除

先在空白窗体上添加: TFDConnection.TFDPhysSQLiteDriverLink.TFDGUIxWaitCursor.TFDQuery.TDataSource.TDBGrid(并在设计时关联好).你也可以复制下面文本框中的内容, 然后直接往窗体上贴, 以快速完成以上的添加过程:object DBGrid1: TDBGrid Left = 16 Top = 88 Width = 361 Height = 329 DataSource = DataSource1 TabOrder =