Oracle三表求交集获得共同数据(oracle三张表交集)
Oracle三表求交集:获得共同数据
在Oracle数据库中,我们常常需要对多个表进行联合查询,以获得更完整的数据。而当我们需要从三个或更多的表中获得共同数据时,就需要用到交集查询。
交集查询是指,选取两个或多个表中相同的行,返回结果集中包含这些行的数据。在Oracle中,我们可以使用INNER JOIN语句实现三表求交集。
下面以三张学生表、课程表、成绩表为例,演示如何使用INNER JOIN语句实现三表求交集:
创建学生表
CREATE TABLE students
(
student_id NUMBER(10) PRIMARY KEY,
student_name VARCHAR2(50) NOT NULL,
student_age NUMBER(3),
student_gender VARCHAR2(10)
);
插入学生数据
INSERT INTO students VALUES (1, ‘小明’, 18, ‘男’);
INSERT INTO students VALUES (2, ‘小芳’, 19, ‘女’);
INSERT INTO students VALUES (3, ‘小李’, 20, ‘男’);
INSERT INTO students VALUES (4, ‘小红’, 18, ‘女’);
创建课程表
CREATE TABLE courses
(
course_id NUMBER(10) PRIMARY KEY,
course_name VARCHAR2(50) NOT NULL,
course_teacher VARCHAR2(50)
);
插入课程数据
INSERT INTO courses VALUES (1, ‘数学’, ‘张老师’);
INSERT INTO courses VALUES (2, ‘语文’, ‘王老师’);
INSERT INTO courses VALUES (3, ‘英语’, ‘李老师’);
INSERT INTO courses VALUES (4, ‘物理’, ‘赵老师’);
创建成绩表
CREATE TABLE scores
(
score_id NUMBER(10) PRIMARY KEY,
student_id NUMBER(10) NOT NULL,
course_id NUMBER(10) NOT NULL,
score NUMBER(3)
);
插入成绩数据
INSERT INTO scores VALUES (1, 1, 1, 90);
INSERT INTO scores VALUES (2, 1, 2, 80);
INSERT INTO scores VALUES (3, 1, 3, 70);
INSERT INTO scores VALUES (4, 1, 4, 60);
INSERT INTO scores VALUES (5, 2, 1, 85);
INSERT INTO scores VALUES (6, 2, 2, 75);
INSERT INTO scores VALUES (7, 2, 3, 65);
INSERT INTO scores VALUES (8, 2, 4, 55);
INSERT INTO scores VALUES (9, 3, 1, 95);
INSERT INTO scores VALUES (10, 3, 2, 85);
INSERT INTO scores VALUES (11, 3, 3, 75);
INSERT INTO scores VALUES (12, 3, 4, 65);
INSERT INTO scores VALUES (13, 4, 1, 70);
INSERT INTO scores VALUES (14, 4, 2, 60);
INSERT INTO scores VALUES (15, 4, 3, 50);
INSERT INTO scores VALUES (16, 4, 4, 40);
现在,我们需要从这三个表中获得选修了数学课程的学生信息和成绩。我们可以使用以下SQL语句实现:
SELECT students.student_name, students.student_age, scores.score
FROM students
INNER JOIN scores ON students.student_id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.course_id
WHERE courses.course_name = ‘数学’;
运行以上SQL语句,我们可以得到以下结果:
| student_name | student_age | score |
|————–|————-|——-|
| 小明 | 18 | 90 |
| 小芳 | 19 | 85 |
| 小李 | 20 | 95 |
| 小红 | 18 | 70 |
通过以上SQL语句,我们可以从三个表中获取选修了数学课程的学生信息和成绩。在INNER JOIN语句中,我们连接了学生表、成绩表和课程表。接下来,在WHERE子句中,我们筛选出课程名为“数学”的记录行。我们从结果集中选取了学生名字、年龄和成绩三列,并将它们作为查询结果呈现。
可以看出,使用INNER JOIN语句可以帮助我们快速实现跨多个表的联合查询,从而获得更为完整的数据。同时,我们也应该注意掌握如何合理运用WHERE子句,以便从结果集中筛选出我们所需要的记录行。