SQL INSERT INTO SELECT 语句

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_idcountry 列的记录复制到 OldCustomers 表中。

注意:如果 OldCustomers 表中除了 customer_idage 之外还有其他列,则这些列的值将为 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_idfirst_name 以及 Orders 表中的 amount 复制到现有表 CustomersOrders 中。

要了解更多信息,请访问 SQL JOIN

注意:如果表中已有数据,INSERT INTO SELECT 语句会将新行附加到表中。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战