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則是插入語句的另外的一種寫法,可以直接將查詢的結果插入到需要的表中,從而省去逐條手工插入數據的過程。

