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

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

Object Query Language - OQL

Apresentações semelhantes


Apresentação em tema: "Object Query Language - OQL"— Transcrição da apresentação:

1 Object Query Language - OQL
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<Struct N {string c1, string c2}> 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 SELECT nome_estúdio, ano_filme,
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 FROM Filmes f WHERE f.realizado_por = "Disney")

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

23 List<Filme> 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<Empregado> 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
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 "Object Query Language - OQL"

Apresentações semelhantes


Anúncios Google