兩個多星期前,個人導師佈置了一道做業,就是利用對象查詢語言(OQL)對常規的SQL需求進行求解。而對於我一個在面向對象數據庫方面,經驗可謂無足輕重的新手來講,確實難如下手。不用說,我確定在拿到題目的瞬間,就想到網上查看有沒有相似的答案,但是也基本是瞬間讓我倒吸了口冷水:目前有的大部分都是SQL語言的,而就連OQL方面的內容卻也是零星散亂的,更加不要說是答案了。不過幸虧,在通過兩三天都苦熬到凌晨1、兩點鐘的狀況下,本身對OQL有了基本的看法。在做業完成以後,也獲得了導師的承認,因此我以爲有必要分享一下我的的解題思路和看法。數據庫
這裏明明不是說該怎麼解題嗎,爲何提起面向對象數據庫設計過程了呢?因爲導師僅給了題目,而沒有對對象數據庫的結構和聯繫進行描述,也就是說解題的範圍很廣。因此,只有明確了對象查詢語言(OQL)的應用,是在整個面向對象數據庫設計過程的那一階段,才能幫助咱們更好地「憑空」造出一個對象數據庫,進而更好地理解題目。數據庫設計
首先,對象數據庫的設計過程分爲五步走: 需求分析 -> 畫對象聯繫圖,即OR圖 -> 創建模型 -> ADT建庫 -> OQL數據操做 。總體來看,OQL數據操做的確與對象數據庫的設計過程關係不大,但我此處申明的是:要先有庫,才能查詢。spa
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="李強");