SQL INSERT INTO SELECT
语句用于将记录从一个表复制到另一个现有表。
示例
-- copy data to an existing table
INSERT INTO OldCustomers
SELECT *
FROM Customers;
这里,SQL 命令将 Customers 表中的所有记录复制到 OldCustomers 表中。
INSERT INTO SELECT 语法
SQL INSERT INTO SELECT
语句的语法是:
INSERT INTO destination_table (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM source_table;
这里,
destination_table
是要插入数据的表的名称。column1, column2, column3, ...
是要复制的列的名称。source_table
是要从中选择数据的表的名称。
注意:要运行此命令,
- 数据库中必须已经有一个名为
OldCustomers
的表。 OldCustomers
表和Customers
表的列名必须匹配。
如果要将数据复制到一个新表(而不是复制到现有表),则应使用 SELECT INTO 语句。
仅复制选定的列
我们还可以只复制一个表中选定的列到另一个表。例如:
-- copy selected columns only
INSERT INTO OldCustomers(customer_id, age)
SELECT customer_id, age
FROM Customers;
这里,SQL 命令只将 customer_id 和 country 列的记录复制到 OldCustomers 表中。
注意:如果 OldCustomers 表中除了 customer_id 和 age 之外还有其他列,则这些列的值将为 NULL
。
复制符合条件的记录
我们可以使用 WHERE
子句与 INSERT INTO
一起复制符合指定条件的行。例如:
-- copy rows that satisfy the condition
INSERT INTO OldCustomers
SELECT *
FROM Customers
WHERE country = 'USA';
这里,SQL 命令只复制 country 列值为 USA 的行。
将数据从两个表复制到一个表
我们还可以使用 JOIN
子句与 INSERT INTO SELECT
一起从两个不同的表中复制记录。例如:
-- copy contents after joining two tables
INSERT INTO CustomersOrders
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer_id;
这里,SQL 命令将 Customers 表中的 customer_id 和 first_name 以及 Orders 表中的 amount 复制到现有表 CustomersOrders 中。
要了解更多信息,请访问 SQL JOIN。
注意:如果表中已有数据,INSERT INTO SELECT
语句会将新行附加到表中。
另请阅读