您的位置:

Oracle将一个表的数据插入到另一个表

一、准备工作

在使用Oracle将一个表的数据插入到另一个表前,首先需要创建两张表并插入数据。

下面我们以学生成绩表和学生表为例,创建两张表并向其中插入数据。

/* 创建学生成绩表 */
CREATE TABLE student_score(
  student_id NUMBER(5),                         -- 学生ID
  subject VARCHAR2(20),                         -- 学科
  score NUMBER(3)                               -- 成绩
);

/* 创建学生表 */
CREATE TABLE student(
  student_id NUMBER(5),                         -- 学生ID
  student_name VARCHAR2(50),                    -- 学生姓名
  student_gender VARCHAR2(2),                   -- 学生性别
  student_age NUMBER(3)                         -- 学生年龄
);

/* 向学生成绩表中插入数据 */
INSERT INTO student_score VALUES(1, '数学', 88);
INSERT INTO student_score VALUES(1, '语文', 95);
INSERT INTO student_score VALUES(2, '数学' ,90);
INSERT INTO student_score VALUES(2, '语文' ,98);
INSERT INTO student_score VALUES(3, '数学', 78);
INSERT INTO student_score VALUES(3, '语文', 80);

/* 向学生表中插入数据 */
INSERT INTO student VALUES(1, '小明', '男', 18);
INSERT INTO student VALUES(2, '小红', '女', 19);
INSERT INTO student VALUES(3, '小华', '男', 20);

二、使用INSERT INTO SELECT语句

在Oracle中,将一个表的数据插入到另一个表可以使用INSERT INTO SELECT语句。

INSERT INTO SELECT语句的基本使用格式如下:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1;

其中,table1表示数据来源表,table2表示目标表。通过SELECT语句,可以选取table1中的特定列或者所有列,将其插入到table2中特定的列或者所有列。

三、将学生成绩表数据插入到学生表

在本例中,我们需要将学生成绩表中的学生ID、学生姓名、学生性别、学生年龄插入到学生表中,可以使用如下的INSERT INTO SELECT语句:

INSERT INTO student (student_id, student_name, student_gender, student_age)
SELECT student_id, '未知', '未知', 0
FROM student_score
GROUP BY student_id;

上述语句会将学生成绩表中所有不同的学生ID插入到学生表中,并分别用'未知'和0填充学生姓名、性别和年龄列。

四、将学生成绩表中成绩数据插入到学生表中

在本例中,我们需要将学生成绩表中的所有成绩插入到学生表中的成绩列中,可以使用如下的UPDATE语句:

UPDATE student s
SET s.score = (SELECT AVG(score) FROM student_score ss WHERE ss.student_id = s.student_id);

上述语句会将学生成绩表中每个学生的平均成绩插入到学生表中对应学生的成绩列中。

五、小结

通过以上几个步骤,我们可以将一个表的数据插入到另一个表中。在实际开发中,如果数据来源表和目标表之间存在一些不一致的列,可以使用一些技巧(如使用SELECT语句中的别名)将其转换成相同的列。同时,也要注意避免数据类型不一致等问题,以确保数据插入正常进行。