在本教程中,将学习如何使用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
语句将其他表中的行插入到指定表中。