SELECT INTO 作用
SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。
SELECT INTO 语法
我们可以把所有的列都复制到新表中:
SELECT *
INTO newtable [IN externaldb]
FROM table1;
或者只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
提示:将使用SELECT语句中定义的列名和类型创建新表。您可以使用AS子句来应用一个新名称。 |
示例数据库
我们使用"Customers"表来作示例
SELECT INTO 实例
创建 Customers 的备份复件:
SELECT *
INTO CustomersBackup2018
FROM Customers;
可以得到一个和Customers表结构及数据一模一样的表CustomersBackup2018
下面我们来复制表到另一个数据库AdventureWorks中,结果与Customers表中的一样。
SELECT *
INTO AdventureWorks.dbo.CustomersBackup2018
FROM Customers;
如下就是AdventureWorks数据库中刚复制过来的表CustomersBackup2018
只复制一些列插入到新表中:
SELECT 姓名, 地址
INTO CustomersBackup2018_1
FROM Customers;
CustomersBackup2018_1表中的结果:
只复制广东省的客户插入到新表中:
SELECT *
INTO CustomersBackup2018_2
FROM Customers
WHERE 省份='广东省';
CustomersBackup2018_2中的数据如下:
复制多个表中的数据插入到新表中:
SELECT c.姓名, o.订单ID
INTO CustomersOrderBackup2018
FROM Customers c
LEFT JOIN Orders o
ON c.客户ID=o.客户ID;
CustomersOrderBackup2018表中的数据如下:
提示:SELECT INTO 语句可以用于在另一种模式下创建一个新的空表,即只有表结构,没有数据。只需添加WHERE子句,使查询返回时没有数据:
SELECT *
INTO newtable
FROM table1
WHERE 1=0;
INSERT INTO SELECT 作用
INSERT INTO SELECT 语句从表中复制数据,并将数据插入现有的表中。目标表中的任何现有行都不会受到影响。
INSERT INTO SELECT 语法
我们可以将所有列从一个表中复制到另一个已经存在的表中:
INSERT INTO table2
SELECT * FROM table1;
或者我们可以把想要的列复制到另一个现有的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
示例数据库
以下是"Customers"表中的数据:
选自 "Suppliers" 表的数据:
INSERT INTO SELECT 实例
把 "Suppliers" 一栏复制到 "Customers" 一栏:
实例
INSERT INTO Customers (姓名, 省份)
SELECT 供应商名称, 省份 FROM Suppliers;
结果如下:
只将上海供应商的副本插入 "Customers" :
实例
INSERT INTO Customers (姓名, 省份)
SELECT 供应商名称, 省份 FROM Suppliers
WHERE 省份='上海市';
结果如下:
批注
SELECT INTO 用来复制表和表结构是非常方便的,特别是在进行表之间计算时,可以将部分数据先插入到一个临时表中,计算完成再删除该临时表。INSERT INTO SELECT则是插入语句的另外的一种写法,可以直接将查询的结果插入到需要的表中,从而省去逐条手工插入数据的过程。