Три манифеста баз данных ретроспектива и перспективы



         

Входные данные и результаты запросов


Как утверждается в стандарте ODMG 3.0, “OQL -запрос является функцией, вырабатывающей объект, тип которого может быть выведен на основе операций, которые участвуют в выражении запроса”.

34

Вот несколько примеров простых OQL -запросов (мы будем использовать в этих примерах определенные в предыдущем подразделе классы DEPT и EMP в предположении, что DEPARTMENTS и EMPLOYEES являются именами экстентов этих классов).

Пример 2.1. Найти даты рождения служащих, зарплата которых превышает 20000 руб.

SELECT DISTINCT E.EMP_BDATE

  

FROM EMPLOYEES E

  

WHERE E.EMP_SAL > 20000.00

Легко видеть, что этот запрос по своему виду ничем не отличается от соответствующего запроса к таблице EMP , выраженного на языке SQL . В данном случае результатом запроса будет литеральное значение типа set < date > , т.е. литеральное значение-множество, элементами которого являются значения типа date.

Пример 2.2. Найти имена и даты рождения служащих, зарплата которых превышает 20000 руб.

SELECT DISTINCT STRUCT (name: E.EMP_NAME, bdate: E.EMP_BDATE)

  

FROM EMPLOYEES E

 

WHERE E.EMP_SAL > 20000.00

Запрос снова очень похож на соответствующий запрос на языке SQL, а результатом запроса является литеральное значение-множество, элементами которого являются значения типа struct { string <20> name ; date bdate }. Наверное, для конечного пользователя языка OQL строгий вывод типа результата запроса может показаться избыточным, но для программистов приложений это свойство является очень важным.

Если предположить, что в классе EMP определена операция age , значением которой является возраст соответствующего служащего, то результатом запроса

SELECT DISTINCT STRUCT (name: E.EMP_NAME, age: E.age)

    

FROM EMPLOYEES E

    

WHERE E.EMP_SAL > 20000.00

будет литеральное значение-множество, элементами которого являются значения типа struct { string <20> name ; interval age } (пример 2.2a ).

Пример 2.3. Получить номера менеджеров отделов и тех сотрудников их отделов, зарплата которых превышает 20000 руб.




Содержание  Назад  Вперед