Appearance
SQL INSERT INTO SELECT
SQL INSERT INTO SELECT 语句用于从一个表中复制数据到另一个表。
语法
sql
INSERT INTO table2 (column1, column2, ..., columnN)
SELECT column1, column2, ..., columnN
FROM table1
WHERE condition;注意事项
目标表必须存在:与 SELECT INTO 不同,INSERT INTO SELECT 要求目标表已经存在。
列数和数据类型:源表和目标表的列数必须相同,且对应列的数据类型必须兼容。
约束:插入的数据必须遵守目标表的约束。
示例
假设我们有以下两个表:
students 表
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
students_backup 表(已存在,结构与 students 表相同)
| id | name | age | grade |
|---|
示例 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 要求目标表已经存在。