浅析批量新增查询到的结果集到另一个表INSERT INTO SELECT、及 SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

一、基本语法

INSERT INTO "表格1" ("栏位1", "栏位2", ...) SELECT "栏位3", "栏位4", ... FROM "表格2"

1、从一张表中查询到的数据插入到另一张表

INSERT INTO A ([姓名] ,[部门])
SELECT  [name] ,[DEP]
FROM B
 where [company]='北京公司' and date= '2013-06-21'

2、把B表在A表不存在的数据插入到A

INSERT INTO A ([姓名] ,[部门]) 
SELECT [name] ,[DEP] FROM B WHERE NO EXISTS(SELECT [姓名] ,[部门] FROM A WHERE A.ID = B.ID) 

3、插入多条数据使用默认数据

insert into [G]([员工编号],[姓名],[公司],[类型],[记录],[updatetime])
SELECT '00001','张三','北京,'年假','2',getdate() UNION all 
SELECT '00002','李四','北京','年假','5',getdate() 

二、SQL实现将一个表的数据插入另一个表

1、第一种情况:一个表的数据插入另一个存在的表 - insert into select

-- 1. 如果2张表的字段一致,并且希望插入全部数据,可以用这种方法
INSERT INTO 目标表 SELECT * FROM 来源表;

-- 比如要将 articles 表插入到 newArticles 表中,则是:
INSERT INTO newArticles SELECT * FROM articles;

-- 2. 如果只希望导入指定字段,可以用这种方法:
INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;

2、第二种情况:一个表的数据插入另一个不存在的表 - select into

-- 4. 如果将一个表的数据放在另外一个不存在的表:
select * into 目标不存在的表 from 来源表

-- 5. 如果只希望导入指定字段,可以用这种方法
select 字段1,字段2,... into 目标不存在的表 from 来源表

三、SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

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

(一)INSERT INTO SELECT语句

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

  或者:Insert into Table2 select  *  from Table1

2、注意:

  (1)需要目标表必须存在,且字段也必须存在

(2)注意Table2的主键约束,如果Table2有主键且不为空,则 field1,field2...中必须包括主键

(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)

(4)由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量

(二)SELECT INTO FROM语句

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

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

  注意:MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。当然你可以使用以下语句来拷贝表结构及数据

CREATE TABLE 新表
AS
SELECT * FROM 旧表 

(3)2种语句区别

  select into from 和 insert into select 都是用来复制表,两者的主要区别为:

  select into from 要求目标表不存在,因为在插入时会自动创建;

  insert into select from 要求目标表存在。

-- 1. 复制表结构及其数据:
create table table_name_new as select * from table_name_old

-- 2. 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
-- 或者:
create table table_name_new like table_name_old

-- 3. 只复制表数据:
-- 如果两个表结构一样:
insert into table_name_new select * from table_name_old

-- 如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old

  稍微整理一下 select into from 和 insert into select 的理解层面的区别

  select into from :将查询出来的数据整理到一张新表中保存,表结构与查询结构一致。

select *(查询出来的结果) into newtable(新的表名)from where (后续条件)

  即,查询出来结果--->复制一张同结构的空表--->将数据拷贝进去。

  insert into select :为已经存在的表批量添加新数据。

insert into  (准备好的表) select *(或者取用自己想要的结构)from 表名 where 各种条件

  即,指定一张想要插入数据的表格--->对数据进行加工筛选--->填入一张准备好的表格。

  嗯,可能理解的比较粗浅,希望有知识经验的大佬及时订正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值