INSERT INTO SELECT 和 SELECT INTO 语句的区别

本文详细介绍了SQL中用于复制表和备份数据的两种方法:INSERT INTO SELECT FROM与SELECT INTO。前者用于将数据从一个现有表复制到另一个已存在的表中,而后者用于创建新表并填充数据。此外还提供了备份表数据、还原表数据及复制表结构的方法。
  1. 主要区别
    select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建。insert into select from 要求目标表存在。
  2. INSERT INTO SELECT
    从原表表复制数据,然后把数据插入到一个已存在的目标表中。目标表中任何已存在的行都不会受影响。

  3. SELECT INTO
    从一个表复制数据,然后把数据插入到另一个新表中。
    SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可。

**注意:
在Oracle中select into from不可以使用—–原因很简单:select into是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的异常!

但是可以用create table select代替该功能!!!**

备份表数据: create table Backup2017 as select * from scott.emp
还原表数据:insert into emp select * from scott.emp

复制表结构及其数据:
create table table_name_new as select * from table_name_old

只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old

只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2…) select column1,column2… from table_name_old

SQL 中的 `INSERT INTO SELECT` 语句是一种非常实用的功能,用于将一个表中的数据复制到另一个表中,特别适用于数据迁移、数据合并或批量插入操作。该语句的基本语法如下: ```sql INSERT INTO 目标表名 [(列名1, 列名2, ...)] SELECT [列名1, 列名2, ...] FROM 源表名 [WHERE 条件表达式]; ``` 其中,目标表必须已经存在,而 `SELECT` 语句可以从一个或多个源表中检索数据。如果目标表的列名与源表的列名一致,则可以省略列名部分。如果列名不一致或顺序不同,则需要明确指定列名以确保数据正确插入。 例如,假设存在两个结构相同的表 `employees` `backup_employees`,可以使用以下语句将 `employees` 表中的所有数据复制到 `backup_employees` 表中: ```sql INSERT INTO backup_employees SELECT * FROM employees; ``` 如果只需要复制满足特定条件的数据,可以在 `SELECT` 语句中添加 `WHERE` 子句。例如,复制工资大于 5000 的员工信息: ```sql INSERT INTO backup_employees SELECT * FROM employees WHERE salary > 5000; ``` 此外,`INSERT INTO SELECT` 语句还支持从多个表中联合查询数据并插入到目标表中。例如,从 `departments` `employees` 表中联合查询数据并插入到 `employee_department` 表中: ```sql INSERT INTO employee_department (employee_id, employee_name, department_name) SELECT e.id, e.name, d.name FROM employees e JOIN departments d ON e.department_id = d.id; ``` 使用 `INSERT INTO SELECT` 可以显著提高插入多条数据时的效率,相比多次执行 `INSERT INTO VALUES`,它减少了数据库的 I/O 操作次数,从而提升了性能[^2]。需要注意的是,在使用嵌套查询时,必须为子查询结果指定一个表别名,否则可能会导致语法错误[^4]。 ### 注意事项 - 确保目标表源表的列数据类型匹配,否则可能导致插入失败或数据不一致。 - 插入操作可能会影响数据库性能,尤其是在处理大量数据时,建议在低峰期执行。 - 在执行插入操作前,最好对数据进行备份,以防数据丢失或损坏。 通过合理使用 `INSERT INTO SELECT` 语句,可以有效地简化数据库操作,提高工作效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值