SQL Server INSERT INTO SELECT

17 Mar 2025 | 5 分钟阅读

手动使用 INSERT 查询将一个表的数据插入到同一数据库或不同数据库的另一个表中并不容易。但是,SQL Server 提供了 INSERT INTO SELECT 语句来优化此过程。INSERT INTO 语句可以快速填充表。在本节中,我们将学习 INSERT INTO SELECT 命令、语法及其用例。

INSERT INTO SELECT 语句用于将数据插入到数据来自 SELECT 查询的表中。换句话说,此查询从一个表复制数据并将其插入到另一个表中。在使用此语句之前,我们应该记住以下几点

  • 必须在数据库中存在一个表,我们将在其中插入数据。
  • 源表和目标表必须具有相同的数据类型。
  • 目标表中现有的记录不应受到影响。

当我们需要将数据从一个表复制到另一个表,或者将来自多个表的数据汇总到一个表中时,此命令非常有用。

语法

通常,我们使用 INSERT 命令将一个或多个记录添加到表,并使用 VALUES 子句列出列值。请参见以下语法

要将一个表的数据复制到另一个表,我们需要在 SQL Server 中使用 INSERT INTO SELECT 语句,如下所示

在这里,我们使用了 SELECT 语句,而不是使用从一个或多个表中提取数据的 VALUES 子句。

参数解释

我们可以在 INSERT INTO SELECT 语句中看到以下参数

  • destination_table: 此参数指示我们要将数据插入其中的表的名称。
  • source_table: 此参数指示我们要从中提取数据的源表的名称。
  • column_list: 它表示表的列名。
  • condition: 这是一个可选参数,用于过滤表数据。
  • TOP: 这是一个可选子句,用于指定查询应插入到目标表中的行数。
  • PERCENT: 这是一个可选子句,用于插入行的百分比。

INSERT INTO SELECT 示例

让我们通过一个示例来了解如何在 SQL Server 中使用 INSERT INTO SELECT 命令。为此,我们首先需要使用下面给出的语句在指定的数据库中创建一个名为 'Student' 的表

接下来,我们将向该表添加一些值,如下所示

我们可以使用 SELECT 语句来显示该表。我们将在表中看到以下数据

SQL Server Insert Into

现在,我们将创建一个名为 student_info 的表,用于演示目标表

1:将所有数据从一个表插入到另一个表

假设我们想要将 student 表的所有数据插入到 student_info 表中。我们可以使用以下语法来完成

我们可以使用 SELECT 语句来验证插入操作。我们将得到以下输出

SQL Server Insert Into

2. 将部分数据从一个表插入到另一个表

有时,我们需要仅将一些记录插入到另一个表中。我们可以通过借助 WHERE 子句过滤从查询返回的行数来实现。

以下语句从 'Student' 表中提取男性学生,并将它们插入到 student_info 表中

使用 SELECT 语句,我们可以看到 student_info 表只有男性记录

SQL Server Insert Into

3:插入前 N 行

TOP 子句指定查询应插入到目标表中的行数。我们可以通过首先使用此语句从 student_info 表中截断所有行来做到这一点

其次,我们将使用以下语句来插入按总分排序的前 3 名学生

使用 SELECT 语句,我们可以看到 student_info 表只有三条记录

SQL Server Insert Into

4:插入前百分之几的行

当我们不想使用绝对的行数时,百分比用于插入表中行的百分比。其值应介于 0 和 100 之间。例如,如果我们将此值设置为 50,它将允许我们检索表中一半的行。我们可以通过首先使用此语句从 student_info 表中截断所有行来做到这一点

其次,我们将使用以下语句来插入表中学生总分的 30% 的行

使用 SELECT 语句,我们可以看到 student_info 表只有三条记录

SQL Server Insert Into

5. 使用 JOIN 的 INSERT INTO SELECT 语句

SQL Server 还允许我们使用 INSERT INTO SELECT 语句从多个表中检索数据。假设我们想将数据从 customerorders 表检索到另一个表 custorder_orders。我们可以通过选择两个表中都存在的列,然后使用 INSERT INTO SELECT 语句插入到另一个表中来实现。在这里,我们将使用 INNER JOIN 来使用 id 列连接这两个表。

我们将执行 SELECT 命令来验证数据是否已插入到目标表中。这是输出

SQL Server Insert Into
下一主题SQL Server NULLIF