一、oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
注意:(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在
(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2...中必须包括主键
(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:
Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)
由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。
2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
select a,c INTO Table2 from Table1
:如果在sql/plus或者PL/SQL执行这条语句,会报"ORA-00905:缺失关键字"错误,原因是PL/Sql与T-SQL的区别。
T-SQL中该句正常,但PL/SQL中解释是:
select..into is part of PL/SQL language which means you have to use it inside a PL/SQL block. You can not use it in a SQL statement outside of PL/SQL.
即不能单独作为一条sql语句执行,一般在PL/SQL程序块(block)中使用。
如果想在PL/SQL中实现该功能,可使用Create table newTable as select * from ...:
如: create table NewTable as select * from ATable;
NewTable 除了没有键,其他的和ATable一样
eg:
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'
SELECT Persons.LastName,Orders.OrderNo INTO Persons_Order_Backup
FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P
二、Oracle中merge into的使用
•1,可省略的update 或者insert
• MERGE INTO products p
• 2 USING newproducts np
• 3 ON (p.product_id = np.product_id)
• 4 WHEN MATCHED THEN
• 5 UPDATE
• 6 SET p.product_name = np.product_name,
• 7 p.category = np.category;
使用表newproducts中的product_name 和category字段来更新表products 中相同product_id的product_name 和category.
2,当条件不满足的时候把newproducts表中的数据INSERT 到表products中。
•MERGE INTO products p
• USING newproducts np
• ON (p.product_id = np.product_id)
• WHEN NOT MATCHED THEN
• INSERT
• VALUES (np.product_id, np.product_name,
• np.category);
3,带条件的insert 和update
•MERGE INTO products p
• USING newproducts np
• ON (p.product_id = np.product_id)
• WHEN MATCHED THEN
• UPDATE
• SET p.product_name = np.product_name
• WHERE p.category = np.category;
insert 和update 都带有where 字句
•MERGE INTO products p
• USING newproducts np
• ON (p.product_id = np.product_id)
• WHEN MATCHED THEN
• UPDATE
• SET p.product_name = np.product_name,
• p.category = np.category
• WHERE p.category = 'DVD'
• WHEN NOT MATCHED THEN
• INSERT
• VALUES (np.product_id, np.product_name, np.category)
• WHERE np.category != 'BOOKS'
4,无条件的insert
•MERGE INTO products p
• USING newproducts np
• ON (1=0)
• WHEN NOT MATCHED THEN
• INSERT
• VALUES (np.product_id, np.product_name, np.category)
• WHERE np.category = 'BOOKS'
5,delete 子句
1 merge into products p
2 using newproducts np
3 on(p.product_id = np.product_id)
4 when matched then
5 update
6 set p.product_name = np.product_name
7 delete where category = 'macle1_cate';
动机:
想在Oracle中用一条SQL语句直接进行Insert/Update的操作。
说明:
在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert)。
参考
http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html
分享到:
相关推荐
除了DBMS之外,还包括各种应用程序、中间件等,它们共同协作实现数据的存储、检索和更新等功能。 ###### 2.2.4 数据库系统特点 - **数据独立性**:物理结构变化不影响逻辑结构,逻辑结构变化不影响应用程序。 - **...
2. **数据模型转换**:MySQL与Oracle的SQL语法和数据类型存在差异,需要将MySQL的表结构和数据类型转换为Oracle兼容的形式。例如,MySQL的`VARCHAR2`在Oracle中对应`VARCHAR2`,但长度限制不同;`DATE`类型在Oracle...
3. 拷贝表空间文件到新的位置: ``` cp /原路径/USERS01.DBF /新路径/USERS01.DBF ``` 4. 修改Oracle数据库中的文件路径: ``` SQL> alter database rename file '原路径\USERS01.DBF' to '新路径\USERS01.DBF...
### Oracle 补充知识点 #### 创建表 在Oracle数据库中,创建表是一项基本且重要的操作。...以上内容涵盖了Oracle中创建表、修改表、拷贝表、清空表、删除表及表约束的相关知识,希望对您有所帮助。
第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...
创建表空间的语法包括指定数据文件的位置和大小,以及分配给用户的默认表空间。 6. **常用命令**: - `CONNECT`:切换或连接数据库用户。 - `SHOW USER`:显示当前用户。 - `HOST`:执行操作系统命令。 - `...
在管理表的过程中,还会涉及到修改表的定义(如添加、删除或修改列)、插入数据(INSERT)、更新数据(UPDATE)、删除数据(DELETE)以及进行各种复杂的查询操作。学习这些基本操作对于管理和维护Oracle数据库至关...
- **数据模型**:数据模型是表示和实现数据之间联系的方法。主要包括层次模型、网状模型和关系模型。 - **层次模型**:层次模型是一种有根节点的定向有序树结构,适用于描述具有明确层次关系的数据。 - **网状模型...
2. SQL语句生成:程序能够根据用户指定的源表和目标表自动生成复制数据所需的INSERT、UPDATE或DELETE语句,这需要对SQL语法有深入理解。 3. 数据处理性能:为了提高数据拷贝的速度,程序可能采用了批处理技术,一次...
SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。 SQL语言主要包含5个部分 数据定义...
在SQL语句方面,Oracle提供了一系列用于管理数据库的命令,如`ALTER DATABASE`用于修改数据库参数,`CREATE TABLE`用于创建表,`INSERT INTO`用于插入数据,`SELECT`用于查询数据,`UPDATE`用于更新数据,`DELETE`...
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) insert into b(a, b, c) select d,e,f from b; 3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) insert into b(a, b, c) select ...
视图是虚表,在数据库中只存储视图定义(物化视图除外),通过视图可以查询、更新基本表中的数据;索引主要用于提高存取效率。通过本次实验,可以掌握基本表、视图、索引在数据库中的基本管理方法。 实验要求 熟悉...
链接服务器是SQL Server数据库引擎中的一个特性,允许用户在一个SQL Server实例中执行分布式查询、插入、更新和删除操作,以访问其他数据源的数据。这些数据源可以是其他SQL Server实例,也可以是其他类型的数据库,...
它主要功能包括数据查询、数据更新、数据插入和数据删除。SQL分为四大类型: 1. **DDL (Data Definition Language)**:用于定义数据库结构,如创建、修改或删除表、视图等。 2. **DML (Data Manipulation Language)...
sql语言参考大全(光盘源码)书中的实例后台数据库采用了SQL Server 2000、SQL Server 2005、Oracle、MySQL、Access5种数据库。光盘包含了本书运行需要的光盘源程序文件(脚本)和光盘使用说明书。光盘源程序文件...
了解这些基本概念后,可以进一步学习Oracle的SQL语法、表和索引的创建、存储过程、触发器、视图以及安全管理等方面的知识。对于Java开发者而言,理解Oracle数据库的使用对于开发和部署基于Java的数据库应用程序至关...
###### 6.1.2 表间数据拷贝 除了使用VALUES子句插入单条记录外,还可以使用子查询来实现多条记录的同时插入。这种方式特别适用于从一个表复制数据到另一个表的场景。 **基本语法**: ```sql INSERT INTO 目标表 ...
使用SQL SELECT语句检索数据 (Chapter02) 在Oracle数据库中,`SELECT`语句是最基本的数据检索手段之一。它允许用户从一个或多个表中选取特定的数据行和列。对于准备OCP认证考试的考生而言,熟练掌握`SELECT`语句的...