基本SQL语句 - INSERT语句

本文详细介绍了SQL的INSERT语句,包括基本语法、常见代码实例、不带字段的插入、一条语句插入多行的实现方式,以及如何从查询结果插入数据并实现去重功能。针对SQL SERVER、MySQL、PostgreSQL和Oracle,提供了插入多条记录的示例。

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

INSERT 语句

INSERT 语句或 INSERT INTO 语句用于向表中插入(或添加)数据。

INSERT 语法

INSERT INTO 表名 [ (字段1, 字段2, ……) ]
[ 子查询 | VALUES ( 字段1值, 字段2值, …… ) ]

INSERT 常用代码实例

employee表

INSERT INTO employee --往表 employee 插入一条记录
(employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (6, 'Mao', 'Isabella', 5500, '2019-03-04','F');

INSERT INTO 是关键字,后面接表名,之后是表 employee 中的字段,可以有多个字段,字段之间以“,”隔开,然后接关键字 VALUES,字段1值对应字段1,字段2值对应字段2,以此类推。
数字类型的字段对应的值或空值 NULL 不用单引号围起来,而字符串的要用单引号围起来。

SELECT * 
FROM employee --查询结果

查询结果

不带字段的 INSERT 语句

INSERT INTO employee --不带字段往表 employee 插入一条记录
VALUES (7, 'Zuo', 'Jessica', 13000, '2020-07-02','F');
SELECT * 
FROM employee --查询结果

新增后
由此可以看出,记录也还是新增了,但是当我们删除或增加了表列,或者打扰了列的顺序,那么不带字段的 INSERT 语句可能会失效。

一条 INSERT 语句插入多行

--一次性插入多行
INSERT INTO employee
(employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (8, 'Jiang', 'William', 5500, '2017-04-05','M');

INSERT INTO employee
(employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (9, 'Wang', 'Lucas', 3500, '2018-03-04','M');

INSERT INTO employee
(employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (10, 'Xie', 'Ivy', 7800, '2021-10-05','F');
SELECT * 
FROM employee --查询结果

插入多条后
当然我们可以插入更多的记录,但是这样写太繁杂,而且费时,幸运的是我们有更简便的写法。

SQL SERVER,MySQL,PostgreSQL 中插入多条记录

INSERT INTO employee
(employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (8, 'Jiang', 'William', 5500, '2017-04-05','M'),
VALUES (9, 'Wang', 'Lucas', 3500, '2018-03-04','M'),
VALUES (10, 'Xie', 'Ivy', 7800, '2021-10-05','F');

一条语句最多可以插入多少行没有限制,但是如果语句的大小大于 max_allowed_packet 的属性值,则会出现错误。

Oracle 中插入多条记录

INSERT ALL
INTO employee (employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (8, 'Jiang', 'William', 5500, '2017-04-05','M')
INTO employee (employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (9, 'Wang', 'Lucas', 3500, '2018-03-04','M')
INTO employee (employee_id, first_name, last_name, salary, enrolment_date, gender)
VALUES (10, 'Xie', 'Ivy', 7800, '2021-10-05','F')
SELECT * FROM dual;

你需要在末尾使用 SELECT * FROM dual,因为 INSERT ALL 需要SELECT语句。

从查询结果插入数据

INSERT INTO employee
(employee_id, first_name, last_name, salary)
SELECT employee_id, first_name, last_name, 5000
FROM new_employee
WHERE enrolment_date > '2017-01-01'

插入的列名称与目标表中的名称可以不同,但是对应的列的数据类型和列的数必须一样。在这个例子中,我们对所有新增的记录中的 salary 插入同一个值5000。

INSERT 插入去重

要避免插入重复的记录,我们可以使用子查询来过滤,例如要往 employee 表中插入表 new_employee 中的以下记录。
new_employee

INSERT INTO employee
(employee_id, first_name, last_name, salary, enrolment_date, gender)
SELECT (employee_id, first_name, last_name, salary, enrolment_date, gender)
FROM new_employee
WHERE NOT EXISTS 
(
	SELECT * 
	FROM employee
	WHERE employee.first_name = new_employee.first_name
	AND employee.last_name = new_employee.last_name 
)
SELECT * 
FROM employee --查询结果

去重插入
红色标识的记录已经存在于表 employee,所以这条记录没被插入到 employee。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驾驭信息纵横科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值