在MySQL中,`INSERT INTO ... SELECT`语句用于从一个或多个表中选择数据,并将这些数据插入到另一个表中。这对于复制数据、合并数据或从一个表向另一个表迁移数据非常有用。以下是一个基本的例子和解释。
假设我们有两个表:`table1` 和 `table2`。我们希望从 `table1` 中复制所有记录到 `table2` 中。这可以通过以下SQL语句实现:
```sql
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1;
```
这里的关键点是:
* `INSERT INTO table2 ...` 部分定义了目标表(在这里是 `table2`)以及你想要插入数据的列。列的顺序应与 `SELECT` 查询中列的返回顺序相匹配。
* `SELECT column1, column2, ... FROM table1` 部分指定了要复制的源表(在这里是 `table1`)和选择的列。你应该确保所选的列与目标表的列结构兼容。如果你的源表有很多列,并不打算复制所有列,你可以明确指定你想要复制的列。如果只选择特定的列,确保这些列的顺序与目标表的插入顺序相匹配。
这是一个更具体的例子:假设我们有两个表,一个是 `employees_old` 表,另一个是 `employees_new` 表。我们想从 `employees_old` 表中的 `first_name` 和 `last_name` 列复制数据到 `employees_new` 表中的相同列:
```sql
INSERT INTO employees_new (first_name, last_name)
SELECT first_name, last_name FROM employees_old;
```
这将复制所有在 `employees_old` 表中的记录到 `employees_new` 表中。如果只想复制满足特定条件的记录,可以在 `SELECT` 查询中添加 `WHERE` 子句来过滤结果。例如,只复制姓氏以 "Smith" 开头的员工:
```sql
INSERT INTO employees_new (first_name, last_name)
SELECT first_name, last_name FROM employees_old WHERE last_name LIKE 'Smith%';
```
这些是使用 `INSERT INTO ... SELECT` 语句的基本示例。你可以根据需要调整查询以满足特定的需求。