基本介紹
- 中文名:對象查詢語言
- 外文名:Object Query Language
- 組成:運算元和操作符
- 套用領域:資料庫
- 優點:簡化了複雜的數據密集型套用等
- 常見特徵:SQL SFW風格等
概述,OQL的特點和設計規則,OQL查詢表達式,查詢定義的聲明,路徑表達式,基本表達式select-from-where,量詞表達式,聚合表達式,分組表達式,HAVING子句,集合運算符,常見特徵,SQL SFW風格,路徑表達式,繼承支持,顯式連線(explicit join),集合值(set_value)屬性,嵌套查詢,聚合函式,修改,
概述
查詢語言一直是資料庫系統知識庫系統研究的重要內容。一般而言 , 查詢相當於是一個作用在庫上的函式, 而返回值為滿足條件的內容。傳統上的關係查詢語言,是一種基於值的說明性的高級語言, 其查詢獨立於庫中數據的變化並且其查詢目標與結果均基於關係元組。 而對象查詢語言作為面向對象資料庫管理系統(OODBMS)的一個有機組成部分 , 其查詢的目標是庫中的對象,由於面向對象數據模型綜合了包括語義數據模型 、嵌套關係數據模型等模型的特點 , 因而其查詢語言更加完備、高效與複雜,與關係查詢語言相比 , 其優點表現在:
- 基於對象標識符(OID)的導航式查詢與基於值的相聯式查詢同時存在, 並互為補充。
- 數據定義語言(DOL)與數據操作語言(DML)有機集成,即查詢語言與資料庫程式設計語言的統一性 , 消除了語義失配的現象 , 從而簡化了複雜的數據密集型套用的實現過程。
- 表達能力強 、語義豐富,例如在查詢語言中繼承語義的體現。
由於類層次結構 , 複雜對象與動態行為、方法的引人,使得面向對象數據模型的複雜性遠高於其它數據模型 , 至今仍缺乏有效的形式語義刻劃。造成了對象查詢語言設計與實現上的困難。不過 , 迄今為止 , 人們已設計出10多個對象查詢語言 , 它們在查詢模型、 設計風格 、 對象、代數以及查詢最佳化等方面作了不少有益的探索。
所以 , 對象查詢語言的設計途徑可分為:
在單純的說明性SQL或QUEL語言的基礎上進行面向對象(OO)風格的擴充 例如Iris的OSQL語言。
在OODB程式設計語言的基礎上增加查詢的功能 , 其中包括SQL與非SQL兩種風格。例如,OQL[C++]以C++作為宿主語言進行查詢擴充 , 仍舊保留了SQL風格 , 而OQL[UF]則丟棄了SQL風格。
OQL的特點和設計規則
OQL是一種面對對象的數據查詢語言,它具備傳統SQL的主要功能,又能與傳統的宿主語言,如C++、JAVA等,自由地結成一個整體,既可以將宿主語言和OQL查詢混合起來,能夠嵌入量詞和方法。它的設計原則主要包括:
- OQL是專門為ODMG對象模型定製的查詢語言,以ODMG為對象模型為基礎。
- OQL的語法和SQL-92非常類似,也做了不少擴展,增加了有關ODMG概念的特徵,包括對象標識,複合對象、路徑表達式、多態、操作調用、繼承、滯後聯編等。
- OQL提供高層原語,用於處理對象集合、結構體和列表。
- OQL是一種函式式語言,只要運算元遵循ODL類型系統的規範,操作符可以任意的自由組合。
- OQL是一種簡單的查詢語言,並不具備計算完備性。
- OQL不提供顯式的更新操作符,而是通過在對象中定義相關的操作函式來實現更新操作。
- OQL提供對對象的訪問,並依靠這種訪問特性最佳化查詢。
- OQL的形式語義易於定義。
OQL查詢表達式
查詢定義的聲明
路徑表達式
基本表達式select-from-where
- select後跟著表達式的列表。
- from後跟著一個或多個變數說明的列表,其值是聚集類型的表達式和變數名。
- where後跟著布爾表達式。
查詢將產生對象的包。在嵌套的循環中,通過考查FROM子句中所有可能的值來計算這個包。如果這些變數值的任何組合都滿足WHERE子句的條件,那么就把SELECT子句所描述的對象加到包中,該包就是select-from-where語句的結果。
量詞表達式
聚合表達式
- COUNT可以套用於任何聚集
- SUM和AVG可以用於算術類型的聚集
- MIN和MAX可以用於任何可比較的的類型(例如算術值或者字元串)的聚集