INSERT INTO SELECT
是 SQL 中的一个语句,它允许你从一个表中选择数据并将这些数据插入到另一个表中。这个操作不会影响目标表中已存在的数据,它只是添加新的数据行。
SQL INSERT INTO SELECT
语法
INSERT INTO 目标表名 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表名
WHERE 条件;
AI 代码解读
目标表名
是你想要插入数据的表。列1, 列2, ...
是你想要插入的具体列名。源表名
是包含你想要复制数据的表。WHERE 条件
是用来指定从源表中选择哪些数据的条件(可选)。
使用说明
- 列对应:在使用
INSERT INTO SELECT
时,源表中的列数量和类型必须与目标表中的列数量和类型相匹配。 - 列选择:你可以在
SELECT
语句中指定列,也可以使用*
来选择所有列,但要注意列的顺序和类型必须与目标表相匹配。 - 条件过滤:通过
WHERE
子句,你可以指定条件来选择特定的数据行。
代码示例
假设我们有两个表:employees
和 archived_employees
。
employees 表:
+----+----------+ | id | name | +----+----------+ | 1 | John | | 2 | Jane | | 3 | Mike | +----+----------+
AI 代码解读
archived_employees 表:
+----+----------+ | id | name | +----+----------+ | 4 | Alice | | 5 | Bob | +----+----------+
AI 代码解读
现在,我们想要将 employees
表中的数据复制到 archived_employees
表中。
INSERT INTO archived_employees (id, name)
SELECT id, name
FROM employees;
AI 代码解读
这条语句将 employees
表中的所有数据复制到 archived_employees
表中。如果 archived_employees
表中已经有数据,那么这些数据将不会被覆盖或删除,新数据将被添加到表的末尾。
如果 archived_employees
表的 id
列是自增的,你可能不希望复制 id
列,而是让数据库自动生成新的 id
。在这种情况下,你可以省略 id
列,只复制 name
列:
INSERT INTO archived_employees (name)
SELECT name
FROM employees;
AI 代码解读