编程技术 · 2023年4月6日

insert into select从其他表插入数据

INSERT INTO SELECT语句简介

要将其他表中的数据插入另一个表中,请使用以下SQL Server INSERT INTO SELECT语句:

INSERT  [ TOP ( expression ) [ PERCENT ] ] 
INTO target_table (column_list)
select_query
SQL

在此语法中,查询语句返回的行将插入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)
);
SQL

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;
SQL

要验证插入结果,请使用以下查询:

SELECT
    *
FROM
    sales.addresses;
SQL

执行上面查询语句,得到以下结果:

2. 插入一些行的示例

有时,只需要将一张表中的一些行插入到另一张表中。 在这种情况下,可以通过使用WHERE子句中的条件来限制从查询返回的行数。

以下语句将位于城市:Santa CruzBaldwin的商店的地址添加到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

SQL Server返回以下消息,指示已成功插入两行。

(2 rows affected)
Shell

3. 插入前N行记录

首先,使用以下语句删除addresses表中的所有行:

TRUNCATE TABLE sales.addresses;
SQL

其次,要插入按名字和姓氏排序的前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

SQL Server返回以下消息,表明已成功插入十行。

(10 rows affected)
Shell

3. 插入行的百分比

可以在表中插入百分比的行,而不是使用绝对行数。

首先,删除addresses表中的所有行:

TRUNCATE TABLE sales.addresses;
SQL

其次,将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

SQL Server发出以下消息,指示已成功插入145行。

insert into select 和select into from 的区别

insert into scorebak select * from socre where neza='neza'   --插入一行,要求表scorebak 必须存在
select *  into scorebak from score  where neza='neza'  --也是插入一行,要求表scorebak 不存在

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞