对象查询语言(OQL)的应用实例
一、绪论
两个多星期前,我的导师布置了一道作业,就是利用对象查询语言(OQL)对常规的SQL需求进行求解。而对于我一个在面向对象数据库方面,经验可谓无足轻重的新手来说,确实难以下手。不用说,我肯定在拿到题目的瞬间,就想到网上查看有没有类似的答案,可是也基本是瞬间让我倒吸了口冷水:目前有的大部分都是SQL语言的,而就连OQL方面的内容却也是零星散乱的,更加不要说是答案了。不过幸好,在经过两三天都苦熬到凌晨一、两点钟的情况下,自己对OQL有了基本的见解。在作业完成之后,也得到了导师的认可,所以我觉得有必要分享一下个人的解题思路和见解。
二、面向对象数据库设计过程
这里明明不是说该怎么解题吗,为什么提起面向对象数据库设计过程了呢?由于导师仅给了题目,而没有对对象数据库的结构和联系进行描述,也就是说解题的范围很广。所以,只有明确了对象查询语言(OQL)的应用,是在整个面向对象数据库设计过程的那一阶段,才能帮助我们更好地“凭空”造出一个对象数据库,进而更好地理解题目。
首先,对象数据库的设计过程分为五步走: 需求分析 -> 画对象联系图,即OR图 -> 建立模型 -> ADT建库 -> OQL数据操作 。整体来看,OQL数据操作的确与对象数据库的设计过程关系不大,但我此处申明的是:要先有库,才能查询。
三、题目与答案
1.检索"英语"专业学生所学课程的信息,包括学号、姓名、课程名和分数。
SELECT S.student_number,S.student_name,S.C.course_name,S.C.grade FROM student S WHERE S.M.major_name="英语";
2检索”数据库原理”课程成绩高于90分的所有学生的学号、姓名、专业和分数。
SELECT S.student_number,S.student_name,S.M.major_name,S.C.grade FROM student S WHERE S.C.course_name="数据库原理" AND S.C.grade>90;
3检索不学课程号为“C123”课程的学生信息,包括学号,姓名和专业。
SELECT S.student_number,S.student_name,S.M.major_name FROM student S WHERE S.student_number NOT IN ( SELECT S.student_number FROM S.course C WHERE C.course_number="C123");
4检索没有任何一门课程成绩不及格的所有学生的信息,包括学号、姓名和专业。
SELECT S.student_number,S.student_name,S.M.major_name FROM student S WHERE S.student_number NOT IN ( SELECT S.student_number FROM S.course C WHERE C.grade < 60);
5检索至少选修了李强同学所选修的全部课程的学生姓名。
SELECT DISTINCT S.student_number FROM student S WHERE S.C.course_number IN ( SELECT S.C.course_number FROM student S WHERE S.student_name="李强");