win7纯净版 Win10纯净版 Win8系统 最新win10下载 Win10 21h1 Win11 22H2 win10激活

您当前所在位置:首页 > 系统教程 > 软件教程

       

INSERT INTO SELECT 两种表复制语句详解(SQL和Oracle区别)

时间:2019-03-05 09:18:32     来源:系统堂     游览量:

  INSERT INTO SELECT 两种表复制语句详解(SQL和Oracle区别)

  我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO和INSERT INTO SELECT表复制语句了。

  1.INSERT INTO SELECT语句

  语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

  或者:Insert into Table2 select * 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的字段外,还可以插入常量。示例如下:

  + expand sourceview plaincopy to clipboardprint

  --1.创建测试表

  create TABLE Table1

  (

  a varchar(10),

  b varchar(10),

  c varchar(10)

  )

  create TABLE Table2

  (

  a varchar(10),

  c varchar(10),

  d int

  )

  --2.创建测试数据

  Insert into Table1 values('赵','asds','90')

  Insert into Table1 values('钱','asds','100')

  Insert into Table1 values('孙','asds','80')

  Insert into Table1 values('李','asds',null)

  select * from Table2

  --3.INSERT INTO SELECT语句复制表数据部分列和常值

  Insert into Table2(a, c, d) select a,c,5 from Table1

  或:Insert into Table2 select * from Table1

  --4.显示更新后的结果

  select * from Table2

  --5.删除测试表

  drop TABLE Table1

  drop TABLE Table2

  2.SELECT INTO FROM语句

  语句形式为:SELECT vale1, value2 into Table2 from Table1

  要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:

  view plaincopy to clipboardprint?

  --1.创建测试表

  create TABLE Table1

  (

  a varchar(10),

  b varchar(10),

  c varchar(10)

  )

  --2.创建测试数据

  Insert into Table1 values('赵','asds','90')

  Insert into Table1 values('钱','asds','100')

  Insert into Table1 values('孙','asds','80')

  Insert into Table1 values('李','asds',null)

  --3.SELECT INTO FROM语句创建表Table2并复制数据

  select a,c INTO Table2 from Table1

  --4.显示更新后的结果

  select * from Table2

  --5.删除测试表

  drop TABLE Table1

  drop TABLE Table2

  注意:如果在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一样

  ---------SQL SELECT INTO语法介绍

  SQL SELECT INTO 语句可用于创建表的备份复件。

  SELECT INTO 语句

  SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。

  SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

  SQL SELECT INTO 语法

  您可以把所有的列插入新表:

  SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

  或者只把希望的列插入新表:

  SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename

  SQL SELECT INTO 实例 - 制作备份复件

  下面的例子会制作 "Persons" 表的备份复件:

  SELECT * INTO Persons_backup FROM Persons

  IN 子句可用于向另一个数据库中拷贝表:

  SELECT * INTO Persons IN 'Backup.mdb' FROM Persons

  如果我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:

  SELECT LastName,FirstName

  INTO Persons_backup

  FROM Persons

  SQL SELECT INTO 实例 - 带有 WHERE 子句

  我们也可以添加 WHERE 子句。

  下面的例子通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:

  SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'

  SQL SELECT INTO 实例 - 被连接的表

  从一个以上的表中选取数据也是可以做到的。

  下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:

  SELECT Persons.LastName,Orders.OrderNo

  INTO Persons_Order_Backup

  FROM Persons

  INNER JOIN Orders

  ON Persons.Id_P=Orders.Id_P

上一篇:vcard文件是什么意思?vcard文件怎么打开
下一篇:eclipse常用快捷键详解|eclipse快捷键设置