insert into select 和 insert into values区别

本文介绍如何利用SQL语句INSERT INTO SELECT从一个表复制数据到另一个已存在的表。文章详细解释了语句的使用方法及注意事项,包括字段匹配、主键约束等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

INSERT INTO SELECT语句:从一个表复制数据,然后把数据插入到一个已存在的表中。

将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,

这时候我们就要使用SELECT INTO  INSERT INTO SELECT 表复制语句了。

1.INSERT INTO SELECT语句

语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

或者:Insert into Table2 select  *  from Table1

注意:(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在

(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2...中必须包括主键

(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:

Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)

由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。

### SQL 中 `INSERT INTO` 结合 `VALUES` `SELECT` 语句的使用 SQL 提供了多种方式来向表中插入数据,其中包括直接提供值的 `INSERT INTO ... VALUES` 语法,以及从其他表中选择数据并插入的 `INSERT INTO ... SELECT` 语法。这两种方式可以单独使用,也可以结合在一个语句集中进行多个插入操作。 #### 使用 `INSERT INTO ... VALUES` 当需要手动指定插入的具体值时,可以使用 `INSERT INTO ... VALUES` 语句。其基本语法如下: ```sql INSERT INTO table_name (column1, column2, ..., columnN) VALUES (value1, value2, ..., valueN); ``` 例如,向 `students` 表中插入一条记录[^3]: ```sql INSERT INTO students (name, age, gpa) VALUES ('fred flintstone', 35, 1.28); ``` 该语句适用于一次性插入少量固定的数据行。 #### 使用 `INSERT INTO ... SELECT` 如果需要将一个表中的数据复制到另一个已存在的表中,可以使用 `INSERT INTO ... SELECT` 语句。其语法如下: ```sql INSERT INTO target_table (column1, column2, ..., columnN) SELECT column1, column2, ..., columnN FROM source_table; ``` 这种方式允许从源表中提取符合条件的数据,并将其插入目标表中。例如,从 `employees` 表中选取部门编号为 5 的员工信息插入到 `employee_archive` 表中[^2]: ```sql INSERT INTO employee_archive (emp_id, name, position, department) SELECT emp_id, name, position, department FROM employees WHERE department = 5; ``` 此方法特别适合批量迁移或归档数据的操作。 #### 在单条语句中插入多条记录 除了单条插入之外,还可以在 `VALUES` 子句中一次插入多行数据。例如: ```sql INSERT INTO students (name, age, gpa) VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32); ``` 这种方式提高了插入效率,尤其在需要插入大量静态数据时非常有用[^3]。 #### 同时执行多个插入操作 Flink SQL 等系统支持通过 `STATEMENT SET` 来执行多个插入操作,允许在一个语句集中插入多个表或多次插入同一张表。其语法如下: ```sql EXECUTE STATEMENT SET BEGIN insert_statement; ... insert_statement; END; ``` 例如: ```sql CREATE TABLE students (name STRING, age INT, gpa DECIMAL(3, 2)) WITH (...); EXECUTE STATEMENT SET BEGIN INSERT INTO students (name, age, gpa) VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32); INSERT INTO students (name, age, gpa) SELECT name, age, gpa FROM another_table; END; ``` 这种机制使得可以在一个事务中完成多个插入动作,简化了复杂数据流的处理流程[^3]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值