Appearance
SQL SELECT INTO
SQL SELECT INTO 语句用于从一个表中复制数据到新表。
语法
SQL Server / MS Access
sql
SELECT column1, column2, ...
INTO new_table_name [IN externaldatabase]
FROM old_table_name
WHERE condition;MySQL
在 MySQL 中,使用 CREATE TABLE ... SELECT 语句:
sql
CREATE TABLE new_table_name
SELECT column1, column2, ...
FROM old_table_name
WHERE condition;Oracle
在 Oracle 中,使用 CREATE TABLE ... AS SELECT 语句:
sql
CREATE TABLE new_table_name AS
SELECT column1, column2, ...
FROM old_table_name
WHERE condition;示例
假设我们有一个名为 students 的表,包含以下数据:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
示例 1:SQL Server 中复制所有数据到新表
sql
SELECT *
INTO students_backup
FROM students;执行结果:创建一个名为 students_backup 的新表,并复制 students 表中的所有数据。
示例 2:SQL Server 中复制部分数据到新表
sql
SELECT name, age, grade
INTO high_school_students
FROM students
WHERE grade = '高三';执行结果:创建一个名为 high_school_students 的新表,并复制 students 表中年级为高三的学生数据。
示例 3:MySQL 中复制数据到新表
sql
CREATE TABLE students_backup
SELECT *
FROM students;执行结果:创建一个名为 students_backup 的新表,并复制 students 表中的所有数据。
示例 4:Oracle 中复制数据到新表
sql
CREATE TABLE students_backup AS
SELECT *
FROM students;执行结果:创建一个名为 students_backup 的新表,并复制 students 表中的所有数据。
注意事项
新表的结构:SELECT INTO 语句会根据选择的列自动创建新表的结构。
索引和约束:默认情况下,SELECT INTO 语句不会复制原表的索引和约束,只复制数据和列结构。
数据类型:新表中列的数据类型会与原表中对应列的数据类型相同。
性能考虑:对于大型表,SELECT INTO 操作可能会影响数据库性能,建议在非高峰时段执行。
权限:执行 SELECT INTO 语句需要有创建表的权限。
小结
SQL SELECT INTO 语句(或其等效语法)是一种用于从一个表中复制数据到新表的有效方法,它可以帮助我们快速创建表的备份或基于现有表创建新表。