山东大学数据库实验六2021最新版.docx
根据提供的文档内容,我们可以归纳出一系列关于Oracle数据库视图创建的知识点。这些示例主要涉及视图的创建、数据选择、连接操作以及条件过滤等关键技能。下面将逐一解析每个实验任务中的知识点。 ### 实验任务 6-1 #### 创建视图 `test6_01` **SQL 语句**: ```sql CREATE VIEW test6_01 AS SELECT sid, name, dname FROM pub.student WHERE dname = '物理学院' AND age < 20 ORDER BY sid; ``` **知识点**: 1. **视图创建**:通过`CREATE VIEW`语句来定义视图。 2. **基本选择**:使用`SELECT`从`pub.student`表中选取指定字段。 3. **条件过滤**:利用`WHERE`子句限制结果集,仅包括“物理学院”的学生且年龄小于20岁的记录。 4. **排序**:`ORDER BY`子句对结果进行排序,本例按学生ID(`sid`)排序。 ### 实验任务 6-2 #### 创建视图 `test6_02` **SQL 语句**: ```sql CREATE VIEW test6_02 AS SELECT sid, name, SUM(score) sum_score FROM pub.student LEFT OUTER JOIN pub.student_course USING (sid) WHERE class = 2009 AND dname = '软件学院' GROUP BY sid, name; ``` **知识点**: 1. **左外连接**:通过`LEFT OUTER JOIN`操作将两个表连接起来,并保留左侧表的所有记录,即使右侧表没有匹配项。 2. **聚合函数**:使用`SUM()`函数来计算每名学生的总分数。 3. **多条件过滤**:`WHERE`子句同时包含`class`和`dname`的条件,以精确筛选出所需数据。 4. **分组**:`GROUP BY`用于按学生ID和姓名进行分组。 ### 实验任务 6-3 #### 创建视图 `test6_03` **SQL 语句**: ```sql CREATE VIEW test6_03 AS SELECT sid, name, score FROM pub.student NATURAL JOIN pub.student_course WHERE class = 2010 AND dname = '计算机科学与技术学院' AND cid = 300005; ``` **知识点**: 1. **自然连接**:使用`NATURAL JOIN`自动匹配两个表中的公共列。 2. **多条件过滤**:`WHERE`子句包含多个条件,用于进一步筛选结果。 ### 实验任务 6-4 #### 创建视图 `test6_04` **SQL 课程**: ```sql CREATE VIEW test6_04 AS SELECT sid, name FROM pub.student NATURAL JOIN pub.student_course WHERE cid = 300003 AND score > 90; ``` **知识点**: 1. **自然连接**:同样采用`NATURAL JOIN`方式连接表。 2. **条件过滤**:筛选出特定课程(`cid = 300003`)且成绩大于90的学生。 ### 实验任务 6-5 #### 创建视图 `test6_05` **SQL 语句**: ```sql CREATE VIEW test6_05 AS SELECT sid, cid, name, score FROM pub.course NATURAL JOIN ( SELECT sid, cid, score FROM pub.student NATURAL JOIN pub.student_course WHERE name = '李龙' ); ``` **知识点**: 1. **嵌套查询**:使用子查询来先筛选出特定学生(`name = '李龙'`)的相关信息。 2. **多表连接**:结合`NATURAL JOIN`与`NATURAL JOIN`连接多个表。 ### 实验任务 6-6 #### 创建视图 `test6_06` **SQL 语句**: ```sql CREATE VIEW test6_06 AS (SELECT sid, name FROM pub.students WHERE NOT EXISTS ( (SELECT cid FROM pub.course) MINUS (SELECT cid FROM pub.student_courset WHERE s.sid = t.sid) )); ``` **知识点**: 1. **不存在条件**:使用`NOT EXISTS`来排除那些存在某些课程的学生。 2. **集合运算**:在Oracle中使用`MINUS`来排除第一个查询结果中出现在第二个查询结果中的行。 ### 实验任务 6-7 #### 创建视图 `test6_07` **SQL 语句**: ```sql CREATE VIEW test6_07 AS SELECT sid, name, score FROM test6_06 NATURAL JOIN pub.student_course GROUP BY sid, name HAVING MIN(score) >= 60; ``` **知识点**: 1. **视图的再利用**:使用已创建的视图`test6_06`。 2. **聚合函数与HAVING子句**:`MIN()`函数与`HAVING`子句结合使用,确保每位学生的所有成绩都达到及格标准。 ### 实验任务 6-8 #### 创建视图 `test6_08` **SQL 语句**: ```sql CREATE OR REPLACE VIEW test6_08 AS SELECT cid, name FROM pub.course a WHERE EXISTS (SELECT cid FROM pub.course WHERE cid = a.fcid AND credit = 2); CREATE VIEW test6_08 AS SELECT cid, name FROM pub.course JOIN (SELECT cid cid1 FROM pub.courset1 JOIN pub.courset2 WHERE t1.fcid = t2.cid AND t2.credit = 2) WHERE pub.course.fcid = cid1; ``` **知识点**: 1. **EXISTS 子句**:`EXISTS`用于检查是否存在满足条件的记录。 2. **多重表连接**:通过多次连接不同表来获取所需数据。 ### 实验任务 6-9 #### 创建视图 `test6_09` **SQL 语句**: ```sql CREATE OR REPLACE VIEW test6_09 AS SELECT sid, name, SUM(sum_credit) sum_credit FROM pub.student NATURAL JOIN ( SELECT sid, SUM(credit) sum_credit FROM pub.student_course NATURAL JOIN pub.course GROUP BY sid, cid HAVING MAX(score) >= 60 ) WHERE class = 2010 AND dname = '化学与化工学院' GROUP BY sid; ``` **知识点**: 1. **嵌套子查询**:使用嵌套子查询来计算每位学生通过的课程的总学分。 2. **多重聚合**:通过两次使用`SUM()`函数和一次`MAX()`函数来计算和筛选数据。 ### 实验任务 6-10 #### 创建视图 `test6_10` **SQL 语句**: ```sql CREATE OR REPLACE VIEW test6_10 AS SELECT cid, name FROM pub.course a WHERE EXISTS ( SELECT cid FROM pub.course b WHERE cid = a.fcid AND EXISTS ( SELECT cid FROM pub.course WHERE cid = b.fcid ) ); ``` **知识点**: 1. **嵌套 EXISTS 子句**:通过嵌套`EXISTS`子句来查找满足特定条件的记录。 2. **关联查询**:使用多个表之间的关联来获取最终结果。 以上实验任务涵盖了Oracle数据库中创建视图的多种场景和技术要点,包括基本的表连接、条件过滤、聚合操作、嵌套查询等高级特性。这些实验不仅帮助学生熟悉数据库操作的基本语法,还能够培养解决复杂问题的能力。
- 粉丝: 99
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助