ii- padrão odmg object query language - oql. ii.3 a linguagem oql consultas a reposit ó rios de...
TRANSCRIPT
![Page 1: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/1.jpg)
II- Padrão ODMGII- Padrão ODMGII- Padrão ODMGII- Padrão ODMG
Object Query Language - OQLObject Query Language - OQL
![Page 2: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/2.jpg)
II.3 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
![Page 3: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/3.jpg)
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.anoFROM Filmes fWHERE f.título = "E o vento levou?"
![Page 4: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/4.jpg)
Consultas Inter-Classes• Quais os nomes das estrelas do filme
"Casablanca"?
– Note o tratamento unificado para atributos e relacionamentos
SELECT e.nomeFROM Filmes f, f.estrelado_por eWHERE 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
![Page 5: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/5.jpg)
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.anoFROM Filmes fWHERE f.duração_em_horas( ) > 2.0;
/* pode ser também duração_em_horas(f) */
![Page 6: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/6.jpg)
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
![Page 7: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/7.jpg)
Path Expressions (2) • 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
![Page 8: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/8.jpg)
Path Expressions (3)• 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?
![Page 9: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/9.jpg)
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
![Page 10: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/10.jpg)
Expressões OQL• 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
![Page 11: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/11.jpg)
Eliminação de Duplicatas
SELECT DISTINCT e.nomeFROM Filmes f, f.estrelado_por eWHERE f.realizado_por.nome =
"Disney"
![Page 12: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/12.jpg)
Objetos ComplexosSet<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
![Page 13: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/13.jpg)
Sub-consultasSELECT DISTINCT e.nomeFROM (SELECT f FROM Filmes f WHERE f.realizado_por.nome
= "Disney") d, d.estrelado_por e
![Page 14: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/14.jpg)
Resultado como ListaSELECT fFROM Filmes fWHERE f.realizado_por.nome =
"Disney"ORDER BY f.duração, f.título
![Page 15: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/15.jpg)
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"
![Page 16: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/16.jpg)
Expressões com Quantificadores (2)
• EXISTS x IN C : C(x)
SELECT e FROM Estrelas e WHERE EXISTS f IN e.estrelou_em : f.realizado_por.nome = "Disney"
![Page 17: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/17.jpg)
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)...
![Page 18: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/18.jpg)
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
![Page 19: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/19.jpg)
Expressões com GROUP BY (2)
• 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)
![Page 20: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/20.jpg)
Expressões com GROUP BY (3)
• 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
![Page 21: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/21.jpg)
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")
![Page 22: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/22.jpg)
Variáveis Hospedeiras (Binding)
Set<Filme> Velhos_filmes
Velhos_filmes = SELECT DISTINCT f FROM Filmes f WHERE f.ano <
1920;
![Page 23: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/23.jpg)
Variáveis Hospedeiras (Binding) (2)
List<Filme> Minha_lista
Minha_lista = SELECT f FROM Filmes f ORDER BY f.título, f.ano
![Page 24: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/24.jpg)
Extraindo o Elemento de uma Coleção
UnitáriaFilme Meu_filme
Meu_filme = ELEMENT(SELECT f FROM Filmes f WHERE f.título = "E o Vento
Levou")
![Page 25: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/25.jpg)
Exercícios • Considere a
classe
![Page 26: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/26.jpg)
Exercícios (2)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; ...;}
![Page 27: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/27.jpg)
Exercícios (3)Escreva em OQL Quais o nome e o
salário do gerente de Natasha?
![Page 28: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/28.jpg)
Exercícios (4)• 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?
![Page 29: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/29.jpg)
Exercícios (5)
– 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?
![Page 30: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da](https://reader035.vdocuments.com.br/reader035/viewer/2022062312/552fc0f9497959413d8b6414/html5/thumbnails/30.jpg)
Omissões da Linguagem OQL
• Não oferece abstrações como visões SQL
• Linguagem de consulta stricto sensu