Oracle中对三张表数据的深度查询(Oracle中3个表查询)
Oracle中对三张表数据的深度查询
在Oracle中进行数据查询是非常常见的操作,而对于多张表的数据深度查询则是一个更为复杂和重要的操作。本文将介绍如何在Oracle数据库中对三张表的数据进行深度查询。
我们需要创建三张表,并且在它们之间建立有关联的关系。为了方便演示,我们选择创建三张包含学生、课程和选课信息的表,其中选课信息表作为关联三张表的中间表。具体建表语句如下:
CREATE TABLE student(
id NUMBER PRIMARY KEY, name VARCHAR2(20) NOT NULL,
age NUMBER(2) NOT NULL, gender VARCHAR2(2) NOT NULL,
major VARCHAR2(20) NOT NULL);
CREATE TABLE course( id NUMBER PRIMARY KEY,
name VARCHAR2(20) NOT NULL, credit NUMBER(3) NOT NULL,
teacher VARCHAR2(20) NOT NULL);
CREATE TABLE select_course( id NUMBER PRIMARY KEY,
student_id NUMBER NOT NULL, course_id NUMBER NOT NULL,
FOREIGN KEY(student_id) REFERENCES student(id), FOREIGN KEY(course_id) REFERENCES course(id)
);
接下来,我们需要向这三张表中添加一些测试数据,以便于进行数据查询。以下是我们添加的测试数据:
INSERT INTO student(id, name, age, gender, major) VALUES(1, 'Tom', 20, 'M', 'Computer Science');
INSERT INTO student(id, name, age, gender, major) VALUES(2, 'Lisa', 22, 'F', 'Math');INSERT INTO student(id, name, age, gender, major) VALUES(3, 'Jack', 21, 'M', 'Economics');
INSERT INTO student(id, name, age, gender, major) VALUES(4, 'Lily', 20, 'F', 'Finance');
INSERT INTO course(id, name, credit, teacher) VALUES(1, 'Mathematics', 4, 'John');INSERT INTO course(id, name, credit, teacher) VALUES(2, 'Database', 3, 'Amy');
INSERT INTO course(id, name, credit, teacher) VALUES(3, 'Economy', 5, 'Betty');INSERT INTO course(id, name, credit, teacher) VALUES(4, 'Finance', 2, 'David');
INSERT INTO select_course(id, student_id, course_id) VALUES(1, 1, 1);INSERT INTO select_course(id, student_id, course_id) VALUES(2, 2, 2);
INSERT INTO select_course(id, student_id, course_id) VALUES(3, 3, 3);INSERT INTO select_course(id, student_id, course_id) VALUES(4, 4, 4);
INSERT INTO select_course(id, student_id, course_id) VALUES(5, 1, 2);INSERT INTO select_course(id, student_id, course_id) VALUES(6, 2, 3);
INSERT INTO select_course(id, student_id, course_id) VALUES(7, 3, 4);INSERT INTO select_course(id, student_id, course_id) VALUES(8, 4, 1);
现在我们已经创建了三张表并且添加了测试数据,接下来我们可以进行数据查询。假设我们需要查询所有选了“Database”课程的学生信息,包括姓名、年龄、性别、专业以及所选课程的学分和教师信息,可以使用以下查询语句:
SELECT s.name, s.age, s.gender, s.major, c.credit, c.teacher
FROM student s, course c, select_course scWHERE s.id = sc.student_id AND c.id = sc.course_id AND c.name = 'Database';
执行以上查询语句后,我们可以得到以下结果:
NAME AGE GENDER MAJOR CREDIT TEACHER
------- ------- ------ ----------------- ------ ------Tom 20 M Computer Science 3 Amy
Lisa 22 F Math 3 Amy
以上查询语句使用了多表连接查询,同时也使用了WHERE子句进行多条件筛选,其中s.id = sc.student_id和c.id = sc.course_id用于关联三张表,而c.name = ‘Database’用于筛选出选修“Database”课程的学生信息。
除了以上示例,还有很多其他类型的多表深度查询操作,如多表连接查询、子查询、存在性查询、联合查询等等。在实际的数据查询工作中,需要根据需求进行灵活组合和调整,以最终实现期望的数据输出结果。