A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

II- Padrão ODMG Object Query Language - OQL. A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da linguagem.

Apresentações semelhantes


Apresentação em tema: "II- Padrão ODMG Object Query Language - OQL. A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da linguagem."— Transcrição da apresentação:

1 II- Padrão ODMG Object Query Language - OQL

2 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da linguagem SQL com o paradigma de programa ç ão OO Apresenta ç ão by example

3 Consultas Intra-Classe Qual o ano do filme "E o vento levou? – f é uma variável do tipo Filme que "varre" o repositório Filmes (isto é, pode receber cada valor da repositório corrente Filmes) SELECT f.ano FROM Filmes f WHERE f.título = "E o vento levou?"

4 Consultas Inter-Classes Quais os nomes das estrelas do filme "Casablanca"? –Note o tratamento unificado para atributos e relacionamentos SELECT e.nome FROM Filmes f, f.estrelado_por e WHERE f.título = "Casablanca" For each f in Filmes do If f.título = "Casablanca" then For each e in f.estrelado_por then Add e.nome to output bag

5 Consultas Com Método Quais os títulos e anos dos filmes com mais de 2 horas de duração? –Note o tratamento unificado para atributos, relacionamentos e m é todos SELECT f.título, f.ano FROM Filmes f WHERE f.duração_em_horas( ) > 2.0; /* pode ser também duração_em_horas(f) */

6 Path Expressions Se o denota um objeto pertencendo a uma classe C, e p é uma propriedade da classe, então o.p é o resultado de aplicar p a o –Se p é um atributo, então o.p é o valor do atributo no objeto o –Se p é um relacionamento, então o.p é o objeto ou cole ç ão de objetos relacionados com o atrav é s do relacionamento p –Se p é um m é todo (talvez, com parâmetros), então o.p é o resultado de aplicar o m é todo a o Pode ser usado o s í mbolo -> em lugar do ponto

7 O valor de meu_filme.dura ç ão é a dura ç ão do filme, isto é, o valor do atributo dura ç ão para o objeto Filme denotado por meu_filme O valor de meu_filme.dura ç ão_em_horas() é um n ú mero real, a dura ç ão do filme em horas, calculada pela aplica ç ão do m é todo dura ç ão_em_horas() ao objeto meu_filme

8 O valor de meu_filme.estrelado_por é o conjunto de objetos Estrela que estrelaram o filme meu_filme A expressão meu_filme.estrelas (nomes) não retorna valor (em C++, o tipo de fun ç ão void). Entretanto retorna o conjunto dos nomes das estrelas de meu_filme (parâmetro de sa í da nomes, do tipo cole ç ão) O que significa meu_filme.realizado_por.nome?

9 Expressões OQL Estilo SQL –Select-From-Where A palavra-chave SELECT seguida por uma lista de expressões A palavra-chave FROM seguida por uma ou mais declara ç ões de vari á veis simples. Uma vari á vel é declarada por dar –uma expressão cujo valor tem um tipo cole ç ão, isto é, um conjunto, ou bag, ou lista, ou array –A palavra-chave opcional AS –O nome da vari á vel simples, que varre a cole ç ão

10 Tipicamente, a expressão de (a) é o reposit ó rio de alguma classe, como o reposit ó rio Filmes da classe Filme. Entretanto, qualquer expressão que produza uma cole ç ão de objetos pode ser utilizada, incluindo outra expressão Select-From-Where A palavra-chave WHERE e uma expressão booleana. Este expressão, como a expressão seguindo o SELECT, pode usar somente constantes e vari á veis declaradas na cl á usula FROM Uma consulta produz um bag de objetos

11 Eliminação de Duplicatas SELECT DISTINCT e.nome FROM Filmes f, f.estrelado_por e WHERE f.realizado_por.nome = "Disney"

12 Objetos Complexos Set N1 N1 = SELECT DISTINCT Struct(estrela1: e1.nome, estrela2: e2.nome) FROM Estrelas e1, Estrelas e2 WHERE e1.endereço = e2.endereço AND e1.nome < e2.nome

13 Sub-consultas SELECT DISTINCT e.nome FROM (SELECT f FROM Filmes f WHERE f.realizado_por.nome = "Disney") d, d.estrelado_por e

14 Resultado como Lista SELECT f FROM Filmes f WHERE f.realizado_por.nome = "Disney" ORDER BY f.duração, f.título

15 Expressões com Quantificadores FOR ALL x IN C : C(x), onde C é um conjunto, x é uma vari á vel, e C(x) é uma condi ç ão SELECT e FROM Estrelas e WHERE ALL f IN e.estrelou_em : f.realizado_por.nome = "Disney"

16 EXISTS x IN C : C(x) SELECT e FROM Estrelas e WHERE EXISTS f IN e.estrelou_em : f.realizado_por.nome = "Disney"

17 Expressões com Agregação OQL usa os mesmos cinco operadores de agrega ç ão usados em SQL: AVG, COUNT, SUM, MIN, e MAX. –Aplic á veis a qualquer cole ç ão cujos membros são de tipos apropriados SELECT... AVG(SELECT f.duração FROM Filmes f)...

18 Expressões com GROUP BY A forma de uma cl á usula GROUP BY em OQL é –As palavras chave GROUP BY –Uma lista de atributos-parti ç ão ("partition attributes"). Cada atributo-parti ç ão consiste de Um nome de uma vari á vel (um crit é rio de agrega ç ão) Dois pontos Uma expressão mencionando uma vari á vel na cl á usula FROM

19 Na lista do SELECT, s ó podem aparecer os crit é rios de agrega ç ão, e os valores agregados O valor retornado pela cl á usula GROUP BY é um conjunto de estruturas Cada estrutura tem a forma Struct(critério_agregação1:v1,..., critério_agregaçãon:vn, lista_de_valores_agregados)

20 Os valores agregados referem-se a uma parti ç ão (um conjunto de valores de atributos-parti ç ão) SELECT nome_estúdio, ano_filme, média_durações: AVG(SELECT p.f.duração FROM partition p) FROM Filmes f GROUP BY nome_estúdio: f.realizado_por.nome, ano_filme: f.ano HAVING MAX(SELECT p.f.duração FROM partition p) > 120

21 Operadores sobre Coleções Pode-se aplicar os operadores de união (UNION), interse ç ão (INTERSECT) e diferen ç a (EXCEPT) a duas cole ç ões compat í veis de objetos (SELECT DISTINCT f FROM Filmes f, f.estrelado_por e WHERE e.nome = "Harrison Ford") EXCEPT (SELECT DISTINCT f FROM Filmes f WHERE f.realizado_por = "Disney")

22 Variáveis Hospedeiras (Binding) Set Velhos_filmes Velhos_filmes = SELECT DISTINCT f FROM Filmes f WHERE f.ano < 1920;

23 List Minha_lista Minha_lista = SELECT f FROM Filmes f ORDER BY f.título, f.ano

24 Extraindo o Elemento de uma Coleção Unitária Filme Meu_filme Meu_filme = ELEMENT(SELECT f FROM Filmes f WHERE f.título = "E o Vento Levou")

25 Exercícios Considere a classe

26 Class Empregado (extent Empregados key matricula) { attribute string matricula; attribute string nome; attribute float salario; relationship Set gerencia inverse Empregado::eh_gerenciado_por; relationship Empregado eh_gerenciado_por inverse Empregado::gerencia;...; }

27 Escreva em OQL Quais o nome e o sal á rio do gerente de Natasha?

28 Seja o esquema de filmes, estrelas e est ú dios visto em aula. Escrever em OQL as seguintes perguntas –Quais os estúdios que realizaram algum filme com duração maior que a duração de cada filme realizado pela Eurofilmes? –Quais os estúdios que realizaram mais filmes? –Quais os estúdios que não realizaram filmes antes de 1960?

29 –Quais as estrelas dos filmes com duração maior que pelo menos a de um filme realizado pela Disney? –Quais as estrelas que estrelaram em todos os filmes do estúdio Cinecittá? –Quais os estúdios que menos realizaram filmes?

30 Omissões da Linguagem OQL Não oferece abstra ç ões como visões SQL Linguagem de consulta stricto sensu


Carregar ppt "II- Padrão ODMG Object Query Language - OQL. A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da linguagem."

Apresentações semelhantes


Anúncios Google