Title: SGBDOO - Padr
1SGBDOO - Padrão ODMG
- Componentes
- Modelo de objetos
- Linguagem de especificação dos objetos
- ODL - Object Definition Language
- Linguagem de Consulta
- OQL - Object Query Language
- Declarativa, não procedural para consulta e
atualização da base de dados - Baseada no SQL
- Ligações (bindings) com LPOO
- C, Smalltalk e Java
3. Padrão ODMG
2SGBDOO - Padrão ODMG Arquitetura
3. Padrão ODMG
3Modelo de Objetos ODMGTipos
- Primitivas básicas
- Objeto possui identificador único
- Literal não possui identificador
- Tanto objetos quanto literais podem ser
categorizados por um tipo - Estado de Objeto
- Definido pelo conjunto de propriedades atributos
e relacionamentos
3. Padrão ODMG
4Modelo de Objetos ODMGTipos
- Tipo dois aspectos
- uma especificação externa - definição abstrata de
- operações que podem ser chamadas
- propriedades de cada objeto
- exceções que podem ser sinalizadas
- uma ou mais implementações
- cada uma define como as operações
- estão implementadas e outros
- detalhes internos
3. Padrão ODMG
5Modelo de Objetos ODMG Tipos
- Tipos de Especificações
- Definição de Interface
- define apenas comportamento e não possui
instâncias - ex. interface Empregado ...
- Definição de literal
- define apenas estado e possui instâncias
- inclui a definição do tipo struct e dos tipos
primitivos boolean, char, short, long, float,
double, octet, string, any - ex. struct Complexo float re float mi
3. Padrão ODMG
6Modelo de Objetos ODMG Tipos
- Tipos de Especificações (cont.)
- Definição de Classe
- define comportamento e estado
- possui instâncias
- ex. class Pessoa ...
- Tipos de Implementação
- Representação da especificação em uma linguagem
específica de programação - Definição de um método para cada operação
abstrata definida na especificação
3. Padrão ODMG
7Modelo de Objetos ODMG Tipos - Herança
Empregado
- Herança IS-A (é um)
- Exemplos
- interface Empregado ...
- interface Professor Empregado ...
- class Professor_Titular Professor ...
- Pode haver herança múltipla
- Apenas a interface é herdada (comportamento)
- classes podem herdar de interfaces
- interfaces podem herdar de interfaces
Professor
Professor Titular
3. Padrão ODMG
8Modelo de Objetos ODMG Tipos - Herança
- Herança de Estado (extends)
- Semelhante a herança em LPOO
- Não admite herança múltipla
- Somente entre classes
- class Pessoa
- attribute string nome
- attribute Date dataNasc
- class EmpregadoPess extends Pessoa
Empregado - attribute Date dataContr
- attribute Currency sal...
herança extends (estado comportamento)
herança IS-A (de comportamento)
3. Padrão ODMG
9Modelo de Objetos ODMG Tipos
- Extensão de um tipo (extent)
- conjunto de todas as instâncias do tipo que
existem no BD - equivalente ao conceito de tabela no modelo
relacional - lista mantida automaticamente pelo BD
- Chave
- apesar do modelo OO não conter o conceito de
chave, ele é útil em SGBD - Chave um ou mais atributos cujos valores
identificam uma instância dentro de uma extensão
3. Padrão ODMG
10Modelo de Objetos ODMG Tipos
- Métodos do objeto
- new( ) usado para criação de objetos
- same_as( ) verifica se dois objetos tem o mesmo
identificador - copy( ) faz uma cópia do objeto em questão
- delete( ) remove o objeto da memória e do BD
- Nome de Objeto
- identificador fornecido pelo usuário
- serve para dar nomes a objetos raiz
3. Padrão ODMG
11Modelo de Objetos ODMG Tipos
- Objetos persistentes e transientes
- objetos de mesmo tipo podem ser persistentes ou
transientes - podem ser manipulados com as mesmas operações
- Coleções
- Set lttgt (conjunto)
- sem ordenação e sem duplicatas
- Bag lttgt (sacola)
- sem ordenação e admite duplicatas
- List lttgt (lista ordenada)
- com ordenação e admite duplicatas
3. Padrão ODMG
123.1 Modelo de Objetos ODMG Tipos
- Coleções
- Array lttgt (arranjo)
- com ordenação e admite duplicatas
- localiza elementos por posição
- Dictionary ltt,vgt (lista indexada)
- com ordenação e admite duplicatas
- localização por chave associada a cada elemento
- Tipos estruturados (structured_object)
- Date, Interval, Time, TimeStamp
3. Padrão ODMG
13Modelo de Objetos ODMG Tipos
- Literal
- atomic literal
- boolean, char, short, long, float, double, octet,
string, any - enum (enumeração)
- attribute enum sexo (masculino, feminino)
- collection literal
- sem OID
- set, bag, list, array, dictionary
- tipo Table (tabela)
- equivalente a uma tabela no modelo relacional
- mesmo que uma coleção de struct
3. Padrão ODMG
14Modelo de Objetos ODMG Tipos
- Literal
- structured literal
- Pré-definidos date, interval, time, timestamp
- Definidos pelo usuário
- struct endereço
- string rua
- string no
- string complemento
- null literal
- exemplo nullable_float, nullable_set,...
3. Padrão ODMG
15Linguagem de Definição - ODLEstado e
Comportamento de tipos
- Estado
- Atributo
- valor pertence a um tipo
- não tem propriedade nem participa de
relacionamentos - não pode ser especializado
- interface Pessoa
- attribute short idade
- attribute string nome
- attribute enum sexo (masculino, feminino)
- attribute address home_address
- attribute set ltPhone_nogt phones
- attribute Department dept
atributo literal atômico
atributo objeto (referência a um OID)
3. Padrão ODMG
16Linguagem de Definição - ODLEstado e
Comportamento de tipos
- Estado
- Relacionamento
- somente relacionamentos binários 11, 1n, mn
- definido sobre dois tipos
- cada tipo participante tem que possuir OID
(literais não participam) - relacionamento não é um objeto
- relacionamento é definido implicitamente por
caminhos de travessia entre objetos - integridade referencial é mantida automaticamente
pelo SGBD -
3. Padrão ODMG
17Linguagem de Definição - ODLEstado e
Comportamento de tipos
- Estado
- interface Professor
- ...
- relationship SetltCursogt ministra
- inverse Curso ehministrado_por
- ...
- interface Curso
- ...
- relationship Professor eh_ministrado_por
- inverse Professorministra
- ...
para muitos (set)
para um
3. Padrão ODMG
18Linguagem de Definição - ODLEstado e
Comportamento de tipos
- Atributo Referência
- referência a um objeto (relacionamento
unidirecional) - não é relacionamento ODMG
- interface Pessoa
- attribute short idade
- attribute string nome
- attribute enum sexo (masculino, feminino)
- attribute address home_address
- attribute set ltPhone_nogt phones
- attribute Department dept
atributo objeto (referência a um objeto - OID)
3. Padrão ODMG
19Linguagem de Definição - ODLEstado e
Comportamento de tipos
- Operações
- Além de atributos e relacionamentos, o restante
da especificação do tipo contém um conjunto de
assinaturas de operação - Assinatura de operação
- nome da operação
- nome e tipo de cada argumento
- tipo de valor retornado
- exceções que podem ser sinalizadas pela operação
3. Padrão ODMG
20Linguagem de Definição - ODLExemplo ODL -
Universidade
Salário
Estudante
Empregado
ltltextendsgtgt
ltltextendsgtgt
IF_Estudante
Monitor
Professor
auxilia
pré-req
matrícula
Disciplina
Parte
partes
ministra
3. Padrão ODMG
21Linguagem de Definição - ODL Exemplo ODL -
Universidade
- class Disciplina
- (extent disciplinas)
-
- attribute string nome
- attribute string numero
- relationship listltPartegt asPartes
- inverse Parte aDiscip
- relationship setltDisciplinagt temPreReq
- inverse Disciplina ePreReq
- relationship setltDisciplinagt ePreReq
- inverse Disciplina temPreReq
- relationship setltIF_Estudantegt osEstud
- inverse ID_EstudanteasDiscip
- boolean oferecer (in unsigned short semestre)
raises (ja_oferec) - boolean cancelar (in unsigned short semestre)
raises (nao_oferec) -
3. Padrão ODMG
22Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Parte (extent partes) attribute string
numero relationship Monitor oMonitor inverse
Monitor asPartes relationship Professor
oProf inverse Professor asPartes relationshi
p Disciplina aDiscip inverse Disciplina
asPartes
3. Padrão ODMG
23Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Salario attribute float
base attribute float hora_extra attribute
float bonus
3. Padrão ODMG
24Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Empregado (extent empregados) attribute
string nome attribute short id relationship
Salario oSalario void contratar() void
demitir() raises (não_existe_emp)
3. Padrão ODMG
25Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Professor (extent professores) attribute
enum Nivel(titular, adjunto, assistente)
nivel relationship setltPartegt
asPartes inverse Parte oProf void
promocao() raises (inelegivel_promo)
3. Padrão ODMG
26Linguagem de Definição - ODL Exemplo ODL -
Universidade
interface IF_Estudante struct Endereco
string casa string numero attribute
Endereco end_dorm attribute string
nome attribute string id relationship
setltDisciplinagt asDiscip inverse Disciplina
osEstud boolean inscreve_disc(in Disciplina
discip) raises (sem_pre_req, sem_vagas) void
cancela_disc(in Disciplina discip) raises
(não_inscrito) )
3. Padrão ODMG
273.2 Linguagem de Definição - ODL Exemplo ODL -
Universidade
class Monitor extends Empregado
IF_Estudante attribute Endereco
end_dorm attribute string nome attribute
string id relationship setltDisciplinagt
asDiscip inverse Disciplina
osEstud relationship setltPartegt
asPartes inverse Parte oMonitor ) class
Estudante IF_Estudante (extent
estudantes) attribute Endereco
end_dorm attribute string nome attribute
string id relationship setltDisciplinagt
asDiscip inverse Disciplina osEstud
estado é redefinido, já que IF_Estudante é uma
interface (não especifica estado)
3. Padrão ODMG
283.2 Linguagem de Definição - ODL Exemplo ODL -
BD Genealogia
class Pessoa (extent pessoas) attribute string
nome attribute struct Address unsigned short
numero, string rua, Cidade cidade
endereco relationship Pessoa conjuge
inverse Pessoa conjuge relationship
setltPessoagt filhos inverse Pessoa
pais relationship listltPessoagt pais inverse
Pessoa filhos void nascim (in string
nome_pessoa boolean casamento (in string
nome_pessoa) raises (não_há_pessoa) unsigned
short descendentes (out setltPessoagt
todos_desc) raises (não_há_pessoa)
3. Padrão ODMG
293.2 Linguagem de Definição - ODL Exemplo ODL -
BD Genealogia
class Cidade (extent cidades key
cep) attribute unsigned short cep attribute
string nome attribute setltPessoagt população
3. Padrão ODMG
30Exercício - ODLCriar as Classes
Pessoa
Funcionário
Aluno
n
n
1
usa
usa
gerencia
1
n
Escritório
Prédio
Sala
n
n
n
Sala de Aula
comp. de
313.3. Linguagem de Consulta OQL Visão Geral
- Características de OQL - Object Query Language
- linguagem associativa de consultas
- a consulta é especificada no SGBD através de uma
expressão - SGBD passa ao usuário apenas os objetos que
resolvem a consulta - baseada no modelo de objetos do ODMG
- baseada em SQL-92 com extensões de orientação a
objetos - provê primitivas para manipular coleções
- linguagem funcional com expressões aninhadas
3. Padrão ODMG
323.3. Linguagem de Consulta OQL Visão Geral
- Características de OQL - Object Query Language
- não é linguagem completa para desenvolvimento de
aplicações - baseada no mesmo sistema de tipos de uma LPOO
- consultas OQL podem ser embutidas na LPOO
- consultas OQL podem chamar operações programadas
na LPOO - não possui comandos de alteração
- uso da LPOO para alterações
- Objeto consultado coleções
- objetos com nomes (pontos de entrada no BD)
- extensões de classes (extent)
3. Padrão ODMG
333.3. Linguagem de Consulta OQL Visão Geral
- Modelo para exemplos
- extent de Pessoa é pessoas
- extent de Empregado é empregados
- Presidente é nome de um objeto de pessoa
subordinação
1
Pessoa
Empregado
subordinados
nome data_nasc sexo
salário
0..
nível()
idade()
3. Padrão ODMG
343.3. Linguagem de Consulta OQL Visão Geral
- Conjunto no resultado
- select distinct p.idade
- from Pessoas p
- where p.nome José
- Obtém um conjunto com as diferentes idades de
pessoas com nome José - o resultado é do tipo setltintegergt
- cláusula distinct faz com que seja obtido set e
não bag
3. Padrão ODMG
353.3. Linguagem de Consulta OQL Visão Geral
- Estrutura no resultado, uso de operação
- select distinct struct (idp.idade, sxp.sexo)
- from Pessoas p
- Obtém um par com a idade e o sexo de cada pessoa
- o resultado é do tipo setltstructgt
- uso da operação idade() na consulta OQL como se
fosse atributo
3. Padrão ODMG
363.3. Linguagem de Consulta OQL Visão Geral
- Consulta aninhada no resultado
- select distinct struct
- (nomeemp.nome,
- altos_emp
- (select s
- from emp.subordinados s
- where s.salario gt 5000))
- from Empregados emp
- Para cada empregado, obter um par formado por seu
nome e pelo conjunto dos empregados que a ele
estão subordinados e cujo salário é maior que
5.000 - tipo do resultado
- setltstruct(nomestring, altos_empbagltEmpregadogt)gt
3. Padrão ODMG
373.3. Linguagem de Consulta OQL Visão Geral
- Consulta aninhada no resultado
- select distinct struct
- (nomeemp.nome,
- altos_emp
- (select s
- from emp.subordinados s
- where s.salario gt 5000))
- from Empregados emp
Empregado é especialização de pessoa herança de
propriedades
distinct set
consulta aninhada no resultado
relacionamento subordinados de emp retorna
conjunto de subordinados
sem distinct bag
3. Padrão ODMG
383.3. Linguagem de Consulta OQL Visão Geral
- Consulta aninhada no from
- select struct (idemp_grad.idade,
sxemp_grad.sexo) - from (select emp
- from Empregados emp
- where emp.nível 10) as emp_grad
- where emp_grad.salario gt 1000
- Obtém a idade e o sexo de cada empregado de nível
10 com salário gt 1000
3. Padrão ODMG
393.3. Linguagem de Consulta OQL Visão Geral
- Consultas sem select
- Nomes de objetos ou de extents podem ser usados
diretamente - Exemplos
- Obter o presidente
- Presidente
- Obter os subordinados do presidente
- Presidente.subordinados
- Obter o conjunto de todas as pessoas
- Pessoas
3. Padrão ODMG
403.3. Linguagem de Consulta OQL Visão Geral
- Objetos e literais no resultado da consulta
- OID do objeto pode ser
- OID do objeto no BD
- select emp from Empregados...
- OID gerado pelo processador de consultas
- select Pessoa(nome..., data_nasc...)...
3. Padrão ODMG
413.3. Linguagem de Consulta OQL Visão Geral
- Expressões de caminho - path expression
- notações
- pess.conjuge
- pess-gtconjuge
- exemplo (BD genealógico)
- pess.conjuge.endereco.cidade.nome
um atributo nome
uma cidade, navegação de relacionamento
um atributo endereço
outra pessoa, obtida por navegação de
relacionamento
uma pessoa
3. Padrão ODMG
423.3. Linguagem de Consulta OQL Visão Geral
- Path Expressions e relacionamentos NN
- pess.filhos.nome
- consulta incorreta pois
- pess.filhos é um conjunto de pessoas
(setltPessoagt) - a lista não tem o atributo nome, e sim cada
elemento da lista - Forma correta
- select filho.nome
- from pess.filhos as filho
- Resultado bagltstringgt
3. Padrão ODMG
433.3. Linguagem de Consulta OQL Visão Geral
- Cláusula From com várias coleções
- select filho.endereço
- from Pessoas pess,
- Pess.filhos filho
- Os dois elementos do from são interrelacionaods
- Pessoas pess indica que a consulta varre todo o
extent de Pessoa - pess.filhos filho indica que, para cada pessoa
pess, será varrido o conjunto de seus filhos
(pess.filhos)
3. Padrão ODMG
443.3. Linguagem de Consulta OQL Visão Geral
- Cláusula WHERE - relação entre coleções
-
- select fil.endereço
- from Pessoas pess,
- Pess.filhos fil
- where pess.endereco.rua Beco das Tamancas
- and count(pess.filhos) gt 1
- and pess.endereco.cidade
fil.endereco.cidade -
- Obtém o conjunto de endereços dos filhos de
pessoas com mais de um filho que vivem (pais) no
Beco das Tamancas e cujos filhos vivem na mesma
cidade
3. Padrão ODMG
453.3. Linguagem de Consulta OQL Visão Geral
- Cláusula WHERE - Junção
- select pess
- from Pessoas pess, Cidades cid
- where pess.nome cid.nome
- Obtém as pessoas cujo nome é idêntico a um nome
de cidade
3. Padrão ODMG
463.3. Linguagem de Consulta OQL Visão Geral
- Tratamento de valores vazios - (nil)
- o resultado do acesso a nil é UNDEFINED
- Regras
- . ou -gt aplicado sobre UNDEFINED resulta
UNDEFINED - comparação (, !, lt,...) com operandos UNDEFINED
resulta em FALSE - is_defined(predicado) e is_undefined(predicado)
testam se um predicado é definido ou não - qualquer outra operação sobre UNDEFINED resulta
em erro de execução
3. Padrão ODMG
473.3. Linguagem de Consulta OQL Visão Geral
- Tratamento de valores vazios - (nil)
- Exemplo 1 obter os empregados de Curitiba
- select emp
- from Empregados emp
- where emp.endereco.cidade Curitiba
- Exemplo 2 erro - um dos empregados não possui
endereço - select emp.endereco.cidade
- from Empregados emp
- Exemplo 3 forma correta
- select emp.endereco.cidade
- from Empregados emp
- where is_defined(emp.endereco.cidade)
3. Padrão ODMG
483.3. Linguagem de Consulta OQL Visão Geral
- Chamada de Operações
- Operações podem ser referenciadas na mesma
posição em que atributos são usados - o usuário não necessita saber se a chamada é a um
atributo ou método (a menos que existam
parâmetros) - Exemplo
- select max( select filho.idade
- from pess.filhos filho)
- from Pessoas pess
- where pess.nome José da Silva
referência a uma operação
3. Padrão ODMG
493.3. Linguagem de Consulta OQL Visão Geral
- Chamada de Operações
- Supor que
- primogênito() é um método de pessoa que retorna
uma instância de pessoa - vive_em(string) retorna true se a pessoa vive na
cidade dada como parâmetro -
- select pess.primogenito.endereco.rua
- from Pessoas pess
- where pess.vive_em(Curitiba) and
- count(pess.filhos) gt 0
referência a uma operação
3. Padrão ODMG
503.3. Linguagem de Consulta OQL Visão Geral
- Polimorfismo
- O método a ser chamado é decidido em tempo de
execução (late binding) -
- select pess.atividades
- from Pessoas pess
3. Padrão ODMG
513.3. Linguagem de Consulta OQL Visão Geral
- Definição estática de classe
- Type casting
- indicação de que um objeto pertence a uma
subclasse específica -
- select ((Estudante)pess).média
- from Pessoas pess
- where estudar in pess.atividades
3. Padrão ODMG
523.3. Linguagem de Consulta OQL Visão Detalhada
- OQL é linguagem funcional e tipada
- cada expressão envolve um operador e seus
operandos tipados - uma expressão (consulta) retorna um objeto ou um
literal - operandos podem ser expressões
- uma expressão tem um tipo (estático) derivado
- da estrutura da consulta
- da definição de tipo dentro da consulta
- de tipos de objetos e literais consultados
3. Padrão ODMG
533.3. Linguagem de Consulta OQL Visão Detalhada
- Consultas nomeadas
- consultas usadas frequentemente podem ser
armazenadas no BD sob um nome (visão em SQL) - consultas nomeadas podem ter parâmetros
- Exemplo
- define idade_de(x) as
- select pess.idade
- from Pessoas pess
- where pess.nome x
- Uso idade_de(Jose da Silva)
3. Padrão ODMG
543.3. Linguagem de Consulta OQL Visão Detalhada
- Tipos de expressões OQL
- Expressão elementar
- Construtor
- Expressão de tipo atômico
- Expressão de objeto
- Expressão de coleção
- Select-from-where
- Operadores Group by e Order by
- Expressão de coleção indexada
- Operação de coleção
- Chamada de função
3. Padrão ODMG
553.3. Linguagem de Consulta OQL Visão Detalhada
- Expressão elementar
- Literal Atômico
- referência vazia nil
- boolean true false
- integer 27 3789
- Float 3.14 345.55e-2
- Character x
- String João
- Objeto nomeado
- Extent da classe Estudantes
- nome definido para o objeto Presidente
3. Padrão ODMG
563.3. Linguagem de Consulta OQL Visão Detalhada
- Expressão elementar
- Variável de iteração
- Cláusula FROM
- select ... from Pessoas as p
- select ... from Pessoas p
- select ... from p in Pessoas
- p é uma variável de iteração
- pode ser usada como uma expressão elementar
3. Padrão ODMG
573.3. Linguagem de Consulta OQL Visão Detalhada
- Construtor
- Expressão que retorna uma nova instância de um
tipo - Exemplos
- Empregado (nomeJosé da Silva,
- sexoM
- data_nasc13/9/98
- salario 325
- chefe Presidente)
- struct(nomeJosé da Silva, sexoM)
- set(1,2,4)
- list(1,4,3,6)
- list(3..5)
- bag(1,5,6,8)
- array(1,4,6)
-
3. Padrão ODMG
583.3. Linguagem de Consulta OQL Visão Detalhada
- Expressão de tipo atômico
- retorna um objeto atômico
- Operadores unários
- , -, abs, not
- Exemplo 5, not(salario gt 10)
- Operadores binários
- aritméticos , -, , /, mod
- relacionais , !, lt, lt,gt,gt
- booleanos and, or
- string , (concatenação), like
- Exemplos
- José Silva ou José Silva
- s in José
- José3 retorna s
- José24 retorna osé
- nome like J?s
3. Padrão ODMG
593.3. Linguagem de Consulta OQL Visão Detalhada
- Expressões de Objeto
- Referência a propriedades e operações
-
- pess.nome
- emp.chefe
- emp.chefe.chefe
- pess.idade
3. Padrão ODMG
603.3. Linguagem de Consulta OQL Visão Detalhada
- Expressões de coleção
- Quantificador Universal (for all)
- for all est in Estudantes est.id !
- Quantificador Existencial (exists)
- exists disc in EstudFulano.asDiscip
- exists part in disc.asPartes
part.oProf.nomeCodd - select disc.nome
- from disciplinas disc
- where exists
- (select part.numero
- from part in disc.asPartes
- where part.oProf.nomeCodd)
3. Padrão ODMG
613.3. Linguagem de Consulta OQL Visão Detalhada
- Expressões de Coleção
- Teste de contenção em coleção
- pess in Pessoas
- Funções de Agregação (mesmas do SQL, porém
ortogonais!) - min, max, count, sum, avg
- Sintaxe
- ltopergt (ltegt) onde ltegt é uma expressão que retorna
uma coleção - Exemplos
- max(select salário from Professores)
- sum(select salário from Professores)
- avg(select salário from Professores)
- count(Professores)
3. Padrão ODMG
623.3. Linguagem de Consulta OQL Visão Detalhada
- Select-From-Where
- Uso de variáveis de iteração no from
-
- from Estudantes as est
- select Professor_alunostruct
(estudanteest_nome, professorparte.oProf.nome
) - from Estudantes as est,
- est.asDiscip as disc,
- disc.asPartes as parte
- where parte.oProf.nivel Titular
-
-
3. Padrão ODMG
633.3. Linguagem de Consulta OQL Visão Detalhada
- Select-From-Where
- Uso de variáveis de iteração no from
- select
- from Estudantes as est,
- est.asDiscip as disc,
- disc.asPartes as parte
- where parte.oProf.nivel Titular
- retorna triplas formadas por um estudante, uma
disciplina e uma parte de tipo - bagltstruct(estEstudante, discDisciplina,
parteParte)gt
3. Padrão ODMG
643.3. Linguagem de Consulta OQL Visão Detalhada
- Cláusula Group by
- Resultado é um struct que contém as variáveis de
agrupamento e uma coleção com as instâncias de
valor comum - Exemplos
- select
- from Professores prof
- group by nivnível
- Resultado
- setltstruct(nivenum, partitionbagltstruct(profPro
fessor)gt)gt -
partition
niv
prof
titular
prof
...
partition
niv
prof
adjunto
prof
...
...
3. Padrão ODMG
653.3. Linguagem de Consulta OQL Visão Detalhada
- Cláusula Group by
-
- select departamento,
- sal_medavg( select part.salario
- from partition as part)
- from Empregados emp
- group by departamentoemp.deptno
- having avg( select part.salario
- from partition as part)gt 3000
3. Padrão ODMG
663.3. Linguagem de Consulta OQL Visão Detalhada
- Cláusula Order by
- Resultado lista
- Exemplo select pess
- from Pessoas pess
- order by pess.idade, pess.nome
- Expressões de Coleção Indexada
- Obtendo o i-ésimo elemento de uma lista
- list(a,b,c,d) 1
- retorna b (primeiro elemento é indexado por 0)
3. Padrão ODMG
673.3. Linguagem de Consulta OQL Visão Detalhada
- Expressões de Coleção Indexada
- element( select disc from Disciplinas disc
- where disc.nome Cálculo and
- disc.numero 101).temPreReq 2
- retorna o terceiro pré-requisito de Cálculo 101
- Obtendo o primeiro ou último elemento de uma
lista (first/last) - First(element( select disc from Disciplinas
disc - where disc.nome Cálculo and
- disc.numero 101).temPreReq)
- Concatenando listas
- list(1,2) list(2,3) retorna list(1,2,2,3)
3. Padrão ODMG
683.3. Linguagem de Consulta OQL Visão Detalhada
- Operações sobre coleções
- Union, Intersect, Except
-
- bag (2,3,3) union bag(3,3,2) retorna
bag(2,3,3,3,3,2) -
- bag (2,3,3) intersect bag(3,3,2) retorna
bag(2,3) - Estudante except Monitor
- Inclusão de coleções lt,lt,gt,gt
- set(1,2,3) lt set (3,4,2,1) retorna true
3. Padrão ODMG
693.3. Linguagem de Consulta OQL Visão Detalhada
- Operações sobre coleções
- Expressões de conversão
- element (t) resulta no único elemento da coleção
operando (Caso a coleção contenha mais que um
elemento resulta em erro) - element(select p from professores p where p.nome
Codd) - Conversão de lista para conjunto
- listtoset(list(1,2,3))
- Remoção de duplicatas
- distinct(list(1,2,2,3)) retorna set(1,2,3)
- Achatamento de coleções
- flatten(list(1,2,3),set(3,2,5,6),set(7)) retorna
set(1,2,3,5,6,7)
3. Padrão ODMG
703.3. Linguagem de Consulta OQL Visão Detalhada
- Type Casting
- Considere a consulta abaixo
- select e.oSalario
- from Estudantes e
- where e in (select part.oMonitor from Partes
part) - Esta consulta resulta em erro
- O SGBD não tem como verificar que todo estudante
em questão é um monitor e por isso possui um
salário - Solução type casting
- select (Empregado)e).oSalario
- from Estudantes e
- where e in (select part.oMonitor from Partes
part)
3. Padrão ODMG
71Exercício OQL
- Obter nome das pessoas e quantidade de filhos que
a pessoa tem para aquelas que têm mais de 2
filhos - Obter as idades das pessoas e todas as pessoas do
sexo feminino que possuem aquela idade. - Mesma consulta anterior mas apenas para idades
com mais de 10 pessoas
72Exercício OQL - BD genealógico
- select struct(nome pess.nome, no_filhos
count(pess.filhos)) - from Pessoas pess
- where count(pess.filhos)gt2
- select
- from Pessoas pess
- where pess.sexo F
- group by id pess.idade
- select
- from Pessoas pess
- where pess.sexo F
- group by id pess.idade
- having count(partition) gt 10