SQL 数据插入

SQL 数据插入学习笔记

数据插入是 SQL 中用于向表中添加新记录的操作。SQL 提供了多种数据插入方式,包括单行插入、批量插入、子查询插入、INSERT ALL 和 INSERT FIRST。

1. 数据插入的类型

(1)单行插入

单行插入用于向表中插入一条记录。

语法:
1
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
示例:
1
2
3
4
5
6
-- 插入一条记录到表 A
INSERT INTO A (empno, ename, hiredate, deptno)
VALUES (1, '小强', TO_DATE('1993-07-01', 'yyyy-mm-dd'), 10);

-- 插入一条记录到表 A(插入所有列)
INSERT INTO A VALUES (4, '卷毛', '职员', 2, TO_DATE('1997-02-23', 'yyyy-mm-dd'), 800, 0, 10, 9, '女');

注意:

  • 如果插入所有列,可以省略列名。
  • 如果插入部分列,必须指定列名。

(2)批量插入

批量插入用于将多条记录一次性插入表中。

语法:
1
2
INSERT INTO 表名 (列1, 列2, ...)
SELECT 列1, 列2, ... FROM 源表 WHERE 条件;
示例:
1
2
3
4
5
6
-- 将部门编号为 10 的员工插入到表 A
INSERT INTO A SELECT * FROM tmp_emp WHERE deptno = 10;

-- 将部门编号为 20 的员工的部分列插入到表 A
INSERT INTO A (empno, ename, deptno)
SELECT empno, ename, deptno FROM tmp_emp WHERE deptno = 20;

(3)子查询插入

子查询插入用于将子查询的结果插入到表中。

语法:
1
2
INSERT INTO 表名 (列1, 列2, ...)
SELECT 列1, 列2, ... FROM 源表 WHERE 条件;
示例:
1
2
3
4
5
6
7
-- 将部门编号为 30 的员工的部分列插入到表 A
INSERT INTO A (empno, ename, deptno)
SELECT empno, ename, deptno FROM tmp_emp WHERE deptno = 30;

-- 子查询限定条件插入
INSERT INTO (SELECT empno, ename, deptno, sal FROM A WHERE deptno = 60 WITH CHECK OPTION)
VALUES (7, '李..', 60, 1000);

注意:

  • WITH CHECK OPTION 用于确保插入的数据满足子查询的条件。

(4)INSERT ALL

INSERT ALL 用于将一条记录插入到多个表中。

语法:
1
2
3
4
INSERT ALL
INTO 表1 VALUES (列1, 列2, ...)
INTO 表2 VALUES (列1, 列2, ...)
SELECT 列1, 列2, ... FROM 源表;
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 创建两张表 A1 和 A2
CREATE TABLE A1 AS SELECT empno, ename, sal FROM tmp_emp WHERE 0 <> 0;
CREATE TABLE A2 AS SELECT ename, deptno, job FROM tmp_emp WHERE 0 <> 0;

-- 清空表数据
TRUNCATE TABLE A1;
TRUNCATE TABLE A2;

-- 将 tmp_emp 的数据插入到 A1 和 A2
INSERT ALL
INTO A1 VALUES (empno, ename, sal)
INTO A2 VALUES (ename, deptno, job)
SELECT * FROM tmp_emp;

注意:

  • INSERT ALL 会将子查询的结果分别插入到多个表中。

(5)INSERT FIRST

INSERT FIRST 用于将满足条件的记录插入到第一个匹配的表中。

语法:
1
2
3
4
5
INSERT FIRST
WHEN 条件1 THEN INTO 表1 VALUES (列1, 列2, ...)
WHEN 条件2 THEN INTO 表2 VALUES (列1, 列2, ...)
ELSE INTO 表3 VALUES (列1, 列2, ...)
SELECT 列1, 列2, ... FROM 源表;
示例:
1
2
3
4
5
6
7
8
9
-- 创建表 A3
CREATE TABLE A3 AS SELECT sal, age, comm FROM tmp_emp WHERE 0 <> 0;

-- 将 tmp_emp 的数据插入到 A1、A2 或 A3
INSERT FIRST
WHEN sal > 3000 THEN INTO A1 VALUES (empno, ename, sal)
WHEN sal > 2000 THEN INTO A2 VALUES (ename, deptno, job)
ELSE INTO A3 VALUES (sal, age, comm)
SELECT * FROM tmp_emp;

注意:

  • INSERT FIRST 只会将记录插入到第一个满足条件的表中。

2. 综合示例

(1)复制表结构并插入数据

1
2
3
4
5
-- 复制表结构
CREATE TABLE A AS SELECT * FROM tmp_emp WHERE 0 <> 0;

-- 插入数据
INSERT INTO A SELECT * FROM tmp_emp WHERE deptno = 10;

(2)使用 INSERT ALL 插入数据

1
2
3
4
5
6
7
8
9
-- 创建两张表
CREATE TABLE A1 AS SELECT empno, ename, sal FROM tmp_emp WHERE 0 <> 0;
CREATE TABLE A2 AS SELECT ename, deptno, job FROM tmp_emp WHERE 0 <> 0;

-- 插入数据
INSERT ALL
INTO A1 VALUES (empno, ename, sal)
INTO A2 VALUES (ename, deptno, job)
SELECT * FROM tmp_emp;

(3)使用 INSERT FIRST 插入数据

1
2
3
4
5
6
7
8
9
-- 创建表 A3
CREATE TABLE A3 AS SELECT sal, age, comm FROM tmp_emp WHERE 0 <> 0;

-- 插入数据
INSERT FIRST
WHEN sal > 3000 THEN INTO A1 VALUES (empno, ename, sal)
WHEN sal > 2000 THEN INTO A2 VALUES (ename, deptno, job)
ELSE INTO A3 VALUES (sal, age, comm)
SELECT * FROM tmp_emp;

3. 总结

  1. 单行插入:向表中插入一条记录。
  2. 批量插入:将多条记录一次性插入表中。
  3. 子查询插入:将子查询的结果插入到表中。
  4. INSERT ALL:将一条记录插入到多个表中。
  5. INSERT FIRST:将满足条件的记录插入到第一个匹配的表中。

SQL 数据插入
https://blog.pangcy.cn/2018/09/12/数据库相关/Oracle/SQL 语法/SQL 数据插入/
作者
ziYang | 子洋
发布于
2018年9月12日
许可协议