Oracle三张表之间的多对多关系实现(oracle三张表多对多)

Oracle三张表之间的多对多关系实现

在Oracle数据库中,多对多关系是非常常见的。如果要创建一个多对多关系,我们就需要使用3张表并建立它们之间的关联关系。本文将介绍如何在Oracle数据库中实现三张表之间的多对多关系。

我们需要创建3张表。在这个例子中,我们将创建一个“学生(students)”表、一个“课程(courses)”表和一个“选课(enrollments)”表。这些表的结构如下:

CREATE TABLE students (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
eml VARCHAR2(50) NOT NULL
);
CREATE TABLE courses (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
credits NUMBER(2) NOT NULL
);

CREATE TABLE enrollments (
student_id NUMBER(10) REFERENCES students(id),
course_id NUMBER(10) REFERENCES courses(id),
grade VARCHAR2(2),
PRIMARY KEY (student_id, course_id)
);

在上述三张表中,学生表和课程表都有一个id列作为主键。在enrollments表中,由于多个学生和多个课程都可以有多次选课,我们需要将联合主键设置为学生id和课程id,以确保每个学生只能在同一课程上选择一次,并且每个课程只能由同一学生选一次。

下一步是创建各自表的数据,为了简化本示例,我们只插入了一些测试数据:

INSERT INTO students (id, name, eml) 
VALUES (1, '张三', 'zhangsan@example.com');

INSERT INTO students (id, name, eml)
VALUES (2, '李四', 'lisi@example.com');
INSERT INTO courses (id, name, credits)
VALUES (1, '数据库', 3);
INSERT INTO courses (id, name, credits)
VALUES (2, 'Java', 4);
INSERT INTO enrollments (student_id, course_id, grade)
VALUES (1, 1, 'A');
INSERT INTO enrollments (student_id, course_id, grade)
VALUES (1, 2, 'B');
INSERT INTO enrollments (student_id, course_id, grade)
VALUES (2, 1, 'C');
INSERT INTO enrollments (student_id, course_id, grade)
VALUES (2, 2, 'B');

现在我们已经创建了三张表并向它们中添加了数据,下一步是检索它们并执行一些查询操作。

假设你想知道哪些学生选择了某些课程,我们可以使用以下查询语句:

SELECT students.name, courses.name
FROM students
JOIN enrollments ON students.id = enrollments.student_id
JOIN courses ON courses.id = enrollments.course_id
WHERE courses.name IN ('数据库', 'Java');

这个查询语句将返回所有选了“数据库”和“Java”这两门课程的学生姓名和课程名称。信息如下:

张三 数据库
张三 Java
李四 数据库
李四 Java

同时,如果想知道某门课程的所有选修学生成绩,可以使用以下查询语句:

SELECT students.name, enrollments.grade
FROM students
JOIN enrollments ON students.id = enrollments.student_id
JOIN courses ON courses.id = enrollments.course_id
WHERE courses.name = 'Java';

此语句返回“Java”此门课程所有学生成绩,信息如下:

张三 B
李四 B

在Oracle数据库中,实现多对多关系是一件非常容易的事情。我们只需要建立三张表,正确地设置每个表之间的关联关系,并执行适当的查询语句即可。


数据运维技术 » Oracle三张表之间的多对多关系实现(oracle三张表多对多)