Skip to content

SQL INSERT INTO SELECT

SQL INSERT INTO SELECT 语句用于从一个表中复制数据到另一个表。

语法

sql
INSERT INTO table2 (column1, column2, ..., columnN)
SELECT column1, column2, ..., columnN
FROM table1
WHERE condition;

注意事项

  1. 目标表必须存在:与 SELECT INTO 不同,INSERT INTO SELECT 要求目标表已经存在。

  2. 列数和数据类型:源表和目标表的列数必须相同,且对应列的数据类型必须兼容。

  3. 约束:插入的数据必须遵守目标表的约束。

示例

假设我们有以下两个表:

students 表

idnameagegrade
1张三18高三
2李四17高二
3王五19高三
4赵六16高一
5钱七18高三

students_backup 表(已存在,结构与 students 表相同)

idnameagegrade

示例 1:复制所有数据到目标表

sql
INSERT INTO students_backup (id, name, age, grade)
SELECT id, name, age, grade
FROM students;

执行结果:将 students 表中的所有数据复制到 students_backup 表中。

示例 2:复制部分数据到目标表

sql
INSERT INTO students_backup (id, name, age, grade)
SELECT id, name, age, grade
FROM students
WHERE grade = '高三';

执行结果:将 students 表中年级为高三的学生数据复制到 students_backup 表中。

示例 3:复制部分列到目标表

假设我们有一个名为 student_names 的表,只有 name 列:

name
sql
INSERT INTO student_names (name)
SELECT name
FROM students;

执行结果:将 students 表中的所有学生姓名复制到 student_names 表中。

示例 4:使用表达式复制数据

sql
INSERT INTO students_backup (id, name, age, grade)
SELECT id, name, age + 1, grade
FROM students;

执行结果:将 students 表中的数据复制到 students_backup 表中,并将年龄增加 1。

小结

SQL INSERT INTO SELECT 语句是一种用于从一个表中复制数据到另一个表的有效方法,它可以帮助我们快速将数据从一个表转移到另一个表。与 SELECT INTO 不同,INSERT INTO SELECT 要求目标表已经存在。