在本教學中,將學習如何使用SQL Server INSERT INTO SELECT
語句將其他表中的數據插入到另一個指定表中。
INSERT INTO SELECT語句簡介
要將其他表中的數據插入另一個表中,請使用以下SQL Server INSERT INTO SELECT
語句:
INSERT [ TOP ( expression ) [ PERCENT ] ]
INTO target_table (column_list)
select_query
在此語法中,查詢語句返回的行將插入target_table
。
該查詢是從任何其他表中檢索數據的有效SELECT
語句。 它必須返回與column_list
中指定的列對應的值。
TOP
子句部分是可選的。 它用於指定要插入目標表(target_table
)的查詢返回的行數。 如果使用PERCENT
選項,則語句將插入行的百分比。 請注意,最好始終將TOP
子句與ORDER BY
子句一起使用。
INSERT INTO SELECT示例
為了方便演示,下麵創建一張addresses
表:
CREATE TABLE sales.addresses (
address_id INT IDENTITY PRIMARY KEY,
street VARCHAR (255) NOT NULL,
city VARCHAR (50),
state VARCHAR (25),
zip_code VARCHAR (5)
);
1. 將表的所有行插入另一張表示例
以下語句將customers
表中的所有地址都插入到addresses
表中:
INSERT INTO sales.addresses (street, city, state, zip_code)
SELECT
street,
city,
state,
zip_code
FROM
sales.customers
ORDER BY
first_name,
last_name;
要驗證插入結果,請使用以下查詢:
SELECT
*
FROM
sales.addresses;
執行上面查詢語句,得到以下結果:
2. 插入一些行的示例
有時,只需要將一張表中的一些行插入到另一張表中。 在這種情況下,可以通過使用WHERE子句中的條件來限制從查詢返回的行數。
以下語句將位於城市:Santa Cruz
和Baldwin
的商店的地址添加到address
表中:
INSERT INTO sales.addresses (street, city, state, zip_code)
SELECT
street,
city,
state,
zip_code
FROM
sales.stores
WHERE
city IN ('Santa Cruz', 'Baldwin')
SQL Server返回以下消息,指示已成功插入兩行。
(2 rows affected)
3. 插入前N行記錄
首先,使用以下語句刪除addresses
表中的所有行:
TRUNCATE TABLE sales.addresses;
其次,要插入按名字和姓氏排序的前10
位客戶,請使用INSERT TOP INTO SELECT
語句,如下所示:
INSERT TOP (10)
INTO sales.addresses (street, city, state, zip_code)
SELECT
street,
city,
state,
zip_code
FROM
sales.customers
ORDER BY
first_name,
last_name;
SQL Server返回以下消息,表明已成功插入十行。
(10 rows affected)
3. 插入行的百分比
可以在表中插入百分比的行,而不是使用絕對行數。
首先,刪除addresses
表中的所有行:
TRUNCATE TABLE sales.addresses;
其次,將customers
表中前2%
的行按名字和姓氏排序後插入到addresses
表中:
INSERT TOP (10) PERCENT
INTO sales.addresses (street, city, state, zip_code)
SELECT
street,
city,
state,
zip_code
FROM
sales.customers
ORDER BY
first_name,
last_name;
SQL Server發出以下消息,指示已成功插入145
行。
(145 rows affected)
在本教學中,學習了如何使用SQL Server INSERT INTO SELECT
語句將其他表中的行插入到指定表中。