SQL INSERT INTO SELECT 语句
通过SQL,可以从一个表复制信息到另一个表。
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
SQL INSERT INTO SELECT 语法
1.从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1
2.可以只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1
SQL INSERT INTO SELECT 实例 (需要加强巩固)
1.复制"Apps"中得数据插入到"Websites"中:
INSERT INTO Websites(name,country)
SELECT app_name,country FROM Apps
查询Apps表中app_name,country列 并添加至Webistes表name,country两列中
注意:不能Websites表后需要添加列名。因为该例题SELECT后接了列名。
SELECT * FROM Websites
personID name url alexa country
1 Google https://www.google.cm/ 1 USA
2 淘宝 https://www.taobao/ 13 CN
3 菜鸟教程 https://www.runoob/ 4689 CN
4 微博 https://www.weibo/ 20 CN
5 Facebook https://www.facebook/ 3 CN
7 stackoverflow https://www.stackoverflow/ 0 USA
NULL QQ APP NULL NULL CN
NULL 微博 APP NULL NULL CN
NULL 淘宝 APP NULL NULL CN
--新增Apps1表 从Apps表复制所有数据并新增Apps1表
SELECT *
INTO Apps1
FROM Apps
--查询Apps表所有数据,新增至Apps1表中(表结构相同,可以直接新增)
INSERT INTO APPS1
SELECT * FROM Apps
--查询Apps1表数据(原Apps表只有3条数据,现Apps1有6条数据)
SELECT * FROM Apps1
id app_name url country
1 QQ APP http://im.qq/ CN
2 微博 APP http://weibo/ CN
3 淘宝 APP https://www.taobao/ CN
1 QQ APP http://im.qq/ CN
2 微博 APP http://weibo/ CN
3 淘宝 APP https://www.taobao/ CN
2.只复制id=1 的数据到"Websites"表中:
INSERT INTO Websites(name,country)
SELECT app_name,country FROM Apps
WHERE id = '1'
SELECT * FROM Websites
personID name url alexa country
1 Google https://www.google.cm/ 1 USA
2 淘宝 https://www.taobao/ 13 CN
3 菜鸟教程 https://www.runoob/ 4689 CN
4 微博 https://www.weibo/ 20 CN
5 Facebook https://www.facebook/ 3 CN
7 stackoverflow https://www.stackoverflow/ 0 USA
NULL QQ APP NULL NULL CN ---增加该列至Websites
//从Apps表中查询ID=1,并增加至Websites表中得Personid列
INSERT INTO Websites(personid)
SELECT id = '1' FROM Apps
SELECT * FROM Websites
personID name url alexa country
1 Google https://www.google.cm/ 1 USA
2 淘宝 https://www.taobao/ 13 CN
3 菜鸟教程 https://www.runoob/ 4689 CN
4 微博 https://www.weibo/ 20 CN
5 Facebook https://www.facebook/ 3 CN
7 stackoverflow https://www.stackoverflow/ 0 USA
1 NULL NULL NULL NULL
1 NULL NULL NULL NULL
1 NULL NULL NULL NULL ---以上三行增加至Websites表中
---将最后三行Personid为1值删除(查询空值记录,删除空值记录)
select * FROM Websites
where name is NULL
personID name url alexa country
1 NULL NULL NULL NULL
1 NULL NULL NULL NULL
1 NULL NULL NULL NULL
DELETE FROM Websites
where name is NULL
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 like 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 各种条件
即:指定一张想要数据的表–对数据进行加工筛选–增加到一张准备好的表
更多推荐
SQL INSERT INTO SELECT 语句
发布评论