SQL Server INSERT INTO SELECT語句

在本教學中,將學習如何使用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 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 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語句將其他表中的行插入到指定表中。


上一篇: SQL Server修改數據 下一篇: SQL Server數據查詢