目录

  1. INSERT INTO SELECT 简介
  2. INSERT INTO SELECT 语法
  3. INSERT INTO SELECT 使用场景
  4. INSERT INTO SELECT 示例
  5. INSERT INTO SELECT 与 INSERT INTO 的区别
  6. INSERT INTO SELECT 注意事项
  7. 参考资料

INSERT INTO SELECT 简介

INSERT INTO SELECT 语句用于将一个查询的结果插入到一个现有的表中。与 INSERT INTO 的传统用法不同,INSERT INTO SELECT 允许从一个表中选择数据并将其插入到另一个表,而不是手动指定要插入的值。通常用于将一个表的数据复制到另一个表中,或者将两个表中的数据合并到一个目标表。

INSERT INTO SELECT 是将数据从一个源表插入到一个目标表的快捷方法,特别是当目标表的结构与源表相似或完全相同时。


INSERT INTO SELECT 语法

INSERT INTO SELECT 的基本语法如下:

INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;

说明:

  • target_table:目标表,即你想要插入数据的表。
  • column1, column2, ...:目标表中要插入的列名。
  • source_table:源表,数据从中选取的表。
  • WHERE condition:可选条件,过滤源表中的数据。

INSERT INTO SELECT 语句会将源表中满足条件的数据插入到目标表中。


INSERT INTO SELECT 使用场景

  1. 将一个表的数据插入到另一个表中:如果源表和目标表的结构相似,INSERT INTO SELECT 可以快速将数据从一个表插入到另一个表中。
  2. 数据迁移或复制:在数据迁移或备份的过程中,使用 INSERT INTO SELECT 可以将数据从一个表复制到另一个表。
  3. 跨数据库复制数据:在一些情况下,可以将数据从一个数据库中的表复制到另一个数据库中的表,前提是两个数据库之间有连接。
  4. 聚合数据:通过从源表中选择数据并将其插入到目标表中,可以进行聚合或筛选,然后将结果存储到目标表。

INSERT INTO SELECT 示例

示例 1:将数据从一个表插入到另一个表

假设我们有两个表:employeesemployees_backup,结构相同,我们希望将 employees 表中的所有数据插入到 employees_backup 表中。

employees

employee_idnameage
1John30
2Jane25
3Bob40

employees_backup

employee_idnameage

查询:

INSERT INTO employees_backup (employee_id, name, age)
SELECT employee_id, name, age
FROM employees;

执行查询后,employees_backup 表会包含来自 employees 表的数据:

employee_idnameage
1John30
2Jane25
3Bob40

示例 2:根据条件从一个表选择并插入到另一个表

假设我们希望将 employees 表中年龄大于 30 的员工数据插入到 employees_above_30 表中。

查询:

INSERT INTO employees_above_30 (employee_id, name, age)
SELECT employee_id, name, age
FROM employees
WHERE age > 30;

执行查询后,employees_above_30 表会包含所有年龄大于 30 的员工数据:

employee_idnameage
3Bob40

示例 3:跨数据库插入数据

假设我们在两个数据库之间进行数据迁移,一个数据库叫做 db1,另一个叫做 db2,现在我们要将 db1.employees 表中的数据插入到 db2.employees_backup 表中。

查询:

INSERT INTO db2.employees_backup (employee_id, name, age)
SELECT employee_id, name, age
FROM db1.employees;

此查询会将 db1 数据库中 employees 表的数据插入到 db2 数据库的 employees_backup 表中。


INSERT INTO SELECT 与 INSERT INTO 的区别

  1. 插入数据的方式
    • INSERT INTO 通常用于插入单行数据或多行指定的数据。
    • INSERT INTO SELECT 允许将一个查询的结果插入到表中,而不需要手动指定每一行的数据。
  2. 数据来源
    • INSERT INTO 的数据来源是用户指定的值。
    • INSERT INTO SELECT 的数据来源是一个查询结果,可以来自同一表、不同表,或其他数据库。
  3. 使用场景
    • INSERT INTO 用于手动插入数据,通常用于将用户提供的数据存储到表中。
    • INSERT INTO SELECT 用于批量插入数据,通常用于数据迁移、数据备份或复制。
  4. 目标表的限制
    • INSERT INTO SELECT 目标表的列数和列类型必须与源表的列数和列类型兼容,否则会导致错误。
    • INSERT INTO 可以选择性地插入某些列,并且不需要完全匹配源表和目标表的列。

INSERT INTO SELECT 注意事项

  1. 列数和类型匹配
    • 在使用 INSERT INTO SELECT 时,目标表和源表的列数和列类型必须兼容,否则会出现错误。例如,目标表的列数不能少于源表的列数,列类型必须兼容。
  2. 目标表的存在性
    • 目标表必须已经存在。如果目标表不存在,INSERT INTO SELECT 会导致错误。此时,应该使用 SELECT INTO 来创建目标表。
  3. 性能考虑
    • INSERT INTO SELECT 是将大量数据从一个表复制到另一个表的高效方法,尤其是对于大规模的数据插入,能够显著提高性能。
  4. 数据验证
    • 在插入数据时,确保源表中的数据符合目标表的约束条件(如唯一性约束、外键约束等),否则可能会导致约束违反错误。

参考资料