Bancos de Dados
Mestrado em Engenharia de Computação
área de concentração Geomática
UERJ
© Oscar Luiz Monteiro de Farias
1
Cálculo Relacional, QUEL e QBE...
• Cálculo Relacional: é uma outra Linguagem Formal de Consultas
para criar novas relações e recuperar informações de bancos de
dados relacionais.
• QUEL e QBE são linguagens mais próximas do Cálculo
Relacional do que o SQL.
• Principal diferença entre o Cálculo Relacional e a Álgebra
Relacional:
–
–
–
–
No CR especifica-se uma consulta através de uma expressão declarativa.
Na AR, através de uma sequência de operações.
CR é uma linguagem declarativa ou não procedural
AR é procedural
• O poder de expressão das duas linguagens é idêntico.
UERJ
© Oscar Luiz Monteiro de Farias
2
Cálculo Relacional, QUEL e QBE...
• Uma Linguagem de Consultas Relacional L é dita Relationally
Complete se pudermos expressar em L qualquer consulta que
possa ser expressa no Cálculo Relacional.
• Relationally Complete tornou-se um padrão de comparação para
para aquilatar o poder de expressão de Linguagens de Consulta
de Alto Nível.
• A maioria das Linguagens de Consulta Relacionais são
Relacionalmente Completas, mas têm maior poder de expressão
que o CR ou a AR, por incluírem operações adicionais como:
Funções Agregadas, Grupamento e Ordenação.
UERJ
© Oscar Luiz Monteiro de Farias
3
Cálculo Relacional, QUEL e QBE...
• O CR é baseado no chamado Cálculo de Predicados (CP)
• Adaptações do CP de 1a ordem como linguagem de consulta para
BDs relacionais:
– Tuple Relational Calculus
– Domain Relational Calculus
UERJ
© Oscar Luiz Monteiro de Farias
4
Tuple Relational Calculus...
• Baseia-se na especificação de um número de tuples variables.
• Cada tuple variable usualmente assume valores sobre uma Relação
da base de dados, significando que a variável pode tomar como seu
valor qualquer tupla em particular da relação.
• Uma query simples é da forma:
{t | COND(t)}
onde: t é uma tupla
COND(t) é uma expressão condicional envolvendo t.
• O resultado da consulta é o conjunto de todas as tuplas que
satisfazem COND(t).
UERJ
© Oscar Luiz Monteiro de Farias
5
f
Tuple Relational Calculus...
• Exemplo: Recupere todas as tuplas de empregados com salário
maior que $50,000.00
{t | EMPLOYEE(t) and t.SALARY > 50000}
Relação que define o
domínio da variável de tupla t
Expressão condicional
envolvendo t.
• {t.FNAME, t.LNAME | EMPLOYEE(t) and t.SALARY>50000}
SELECT T.FNAME, T.LNAME
FROM
EMPLOYEE T
WHERE T.SALARY > 50000
UERJ
© Oscar Luiz Monteiro de Farias
6
Tuple Relational Calculus...
É preciso especificar as seguintes informações em uma expressão
do Tuple Relational Calculus:
 Para cada variável de tupla t, a relação R onde t assume seus
valores (range relation R) (~ cláusula FROM do SQL).
Este valor é especificado por uma condição da forma R(t).
 Uma condição para selecionar uma combinação particular de
tuplas (~ cláusula WHERE do SQL).
 Um conjunto de atributos a ser recuperado (requested attributes)
(~ cláusula SELECT do SQL).
UERJ
© Oscar Luiz Monteiro de Farias
7
Tuple Relational Calculus...
• QUERY 0: Recupere a data de nascimento e endereço do
empregado cujo nome é `John B. Smith`.
{t.BDATE, t. ADDRESS | EMPLOYEE(t) and t.FNAME=`John`
and t.MINIT=`B`and t.LNAME=`Smith`}
UERJ
© Oscar Luiz Monteiro de Farias
8
Tuple Relational Calculus...
Especificação Formal:
• Uma expressão do Tuple Relational Calculus é, em geral, da
forma:
{t1.A1, t2.A2, ..., tn.An | COND(t1, t2, ...,tn, tn+1, tn+2, ..., tn+m)}
onde:
- t1, t2, ...,tn, tn+1, tn+2, ..., tn+m são variáveis-tupla.
- cada Ai é um atributo da relação na qual ti assume valores
(ranges) e COND é uma condição ou fórmula do Tuple
Relational Calculus.
UERJ
© Oscar Luiz Monteiro de Farias
9
Tuple Relational Calculus...
• Uma fórmula é constituída por átomos do cálculo de predicados,
podendo ser:
 Um átomo da forma R(ti), onde R é o nome de uma relação e ti é
uma variável-tupla.
Este átomo identifica o conjunto de valores que podem ser
assumidos pela variável-tupla ti, como sendo as tuplas da relação
cujo nome é R.
 Um átomo da forma ti.A op tj.B
onde op é um dos operadores de comparação no conjunto {=, ,
, , , }, ti e tj são variáveis-tupla, A (B) é um atributo da
relação na qual ti (tj) pode assumir valores.
UERJ
© Oscar Luiz Monteiro de Farias
10
Tuple Relational Calculus...
 Um átomo da forma ti.A op c ou c op tj.B
onde op é um dos operadores de comparação no conjunto {=, , ,
, , }, ti e tj são variáveis-tupla, A (B) é um atributo da relação
na qual ti (tj) pode assumir valores e c é um valor constante.
 Cada um dos átomos precedentes é avaliado como TRUE ou
FALSE para uma combinação de tuplas específica (valor verdade
do átomo).
Para átomos do tipo , se à variável-tupla é atribuído uma tupla
que é membro da relação especificada R, o átomo é TRUE, em
caso contrário, FALSE.
UERJ
© Oscar Luiz Monteiro de Farias
11
Tuple Relational Calculus...
• Uma fórmula (condição) é constituída por um ou mais átomos
conectados pelos operadores lógicos and, or e not e é definida
recursivamente, como segue:
 Todo átomo é uma fórmula.
 Se F1 e F2 são fórmulas, então (F1 and F2) , (F1 or F2), not (F1) e
not (F2) são também fórmulas.
UERJ
© Oscar Luiz Monteiro de Farias
12
Tuple Relational Calculus...
Os valores verdades destas quatro fórmulas são derivados das
fórmulas componentes como segue:
 (F1 and F2) é TRUE se ambos F1 and F2 são TRUE; em caso
contrário é FALSE.
 (F1 or F2) é FALSE se ambos F1 and F2 são FALSE; em caso
contrário é TRUE.
 not (F1) É TRUE se F1 é FALSE; é FALSE se F1 é TRUE.
 not (F2) É TRUE se F2 é FALSE; é FALSE se F2 é TRUE.
UERJ
© Oscar Luiz Monteiro de Farias
13
Tuple Relational Calculus...
• Dois operadores adicionais chamados quantificadores podem
aparecer nas fórmulas:
– o quantificador universal ()
– o quantificador existencial ()
• Conceito (informal) de variáveis livres (free) e ligadas (bound).
Uma variável-tupla t é ligada (bound) se ela é quantificada, isto é,
se aparece em uma cláusula ( t) ou ( t); em caso contrário ela é
livre (free).
UERJ
© Oscar Luiz Monteiro de Farias
14
Tuple Relational Calculus...
Uma variável-tupla em uma fórmula é dita livre (free) ou ligada
(bound) de acordo com as seguintes regras:
 Uma ocorrência de uma variável-tupla t em uma fórmula F, que é
um átomo, é livre (free) em F.
 Uma ocorrência de uma variável-tupla t é livre (free) ou ligada
(bound) em uma fórmula constituída por conectivos lógicos
- (F1 and F2) , (F1 or F2), not (F1) e not (F2) - dependendo se ela é
livre ou ligada em F1 ou F2 (se ela ocorre em uma das fórmulas) .
UERJ
© Oscar Luiz Monteiro de Farias
15
Tuple Relational Calculus...
• Observe que em uma fórmula F = (F1 and F2) ou F = (F1 or F2),
uma variável-tupla t pode ser livre em F1 e ligada em F2 ou viceversa. Neste caso uma ocorrência da variável-tupla é ligada e a
outra é livre em F.
 Todas as ocorrências livres (free) de uma variável-tupla t em F são
ligadas (bound) em uma fórmula F’ do tipo F’= ( t) (F) ou
( t) (F).
A variável-tupla é ligada (bound) ao quantificador especificado em
F’.
UERJ
© Oscar Luiz Monteiro de Farias
16
Tuple Relational Calculus...
• Exemplo: F1: d.DNAME = `Research`
F2: ( t) (d.DNUMBER = t.DNO)
d é livre em F1 e F2 enquanto t é ligada ao quantificador
existencial em F2.
UERJ
© Oscar Luiz Monteiro de Farias
17
Tuple Relational Calculus...
• Uma fórmula (condição) ... é definida recursivamente, como
segue:
 Se F é uma fórmula, então ( t) (F) é também uma fórmula, onde
t é uma variável-tupla.
( t) (F) é TRUE se a fórmula F é avaliada como TRUE para
alguma (pelo menos uma) tupla atribuída a ocorrências livres de t
em F; em caso contrário ( t) (F) é FALSE.
 Se F é uma fórmula, então ( t) (F) é também uma fórmula, onde
t é uma variável-tupla.
( t) (F) é TRUE se a fórmula F é avaliada como TRUE para
todas as tuplas (no universo) atribuídas a ocorrências livres de t
em F; em caso contrário ( t) (F) é FALSE.
UERJ
© Oscar Luiz Monteiro de Farias
18
UERJ
© Oscar Luiz Monteiro de Farias
19
UERJ
© Oscar Luiz Monteiro de Farias
20
Tuple Relational Calculus...
• QUERY Q1: Recupere o nome e o endereço de todos os
empregados que trabalham para o departamento `Research`.
{t.FNAME, t.LNAME, t.ADDRESS | EMPLOYEE(t) and
(( d) DEPARTMENT(d) and d.DNAME = `Research` and
d.DNUMBER = t.DNO))}
• Atenção: As únicas variáveis-tuplas livres (free) em expressões do
Cálculo Relacional devem ser aquelas que aparecem no lado
esquerdo da barra “|”.
UERJ
© Oscar Luiz Monteiro de Farias
21
Tuple Relational Calculus...
• QUERY Q2: Para todos os projetos localizados em `Statford` liste
o no do projeto, o depto que o controla e o último nome, data do
nascimento e endereço do gerente do depto controlador.
{p.PNUMBER, p.DNUM, m.LNAME, m.BDATE, m.ADDRESS |
PROJECT(p) and EMPLOYEE(m) and
p.PLOCATION
= `Statford` and (( d) DEPARTMENT(d) and p.DNUM =
d.DNUMBER and d.MGRSSN = m.SSN))}
UERJ
© Oscar Luiz Monteiro de Farias
22
Tuple Relational Calculus...
• QUERY Q8: Para cada empregado recupere o seu primeiro e
último nome, além do primeiro e último nome do(a) seu(ua)
supervisor(a) imediato(a).
{e.FNAME, e.LNAME, s.FNAME, s.LNAME | EMPLOYEE(e)
and EMPLOYEE(s) and e.SUPERSSN = s.SSN}
• QUERY Q3’: Encontre o nome de cada empregado que trabalhe
em algum projeto controlado pelo depto no 5
{e.LNAME, e.FNAME | EMPLOYEE(e) and (( x) ( w)
(PROJECT(x) and WORKS_ON(w) and x.DNUM = 5 and
w.ESSN = e.SSN and x.PNUMBER = w.PNO))}
UERJ
© Oscar Luiz Monteiro de Farias
23
Tuple Relational Calculus...
• QUERY Q4: Faça uma lista de nos de projetos que envolvam um
empregado cujo último nome seja `Smith`, ou como um simples
trabalhador ou como gerente do depto que controla o projeto.
{p.PNUMBER, | PROJECT(p) and ((( e) ( w) (EMPLOYEE(e)
and WORKS_ON(w) and w.PNO = p.NUMBER and e.LNAME
= `Smith` and e.SSN = w.ESSN))
or
(( m) ( d) (EMPLOYEE(m) and DEPARTMENT(d) and
p.DNUM = d. DNUMBER and d.MGRSSN = m.SSN and
m.LNAME = `Smith`)))}
UERJ
© Oscar Luiz Monteiro de Farias
24
Tuple Relational Calculus...
• Transformações dos Quantificadores Existencial e Universal
 ( x) (P(x)) = (¬x) (not (P(x)))
 ( x) (P(x)) = not ( x) (not (P(x)))
 ( x) (P(x) and Q(X)) = (¬x) (not (P(x)) or not Q(x)))
 ( x) (P(x) or Q(X)) = (¬x) (not (P(x)) and not Q(x)))
 ( x) (P(x) or Q(x)) = not ( x) (not (P(x)) and not (Q(x)))
 ( x) (P(x) and Q(x)) = not ( x) (not (P(x)) or not (Q(x)))
Regras: i) transforme um quantificador no outro, precedendo-o
por not; ii) and e or substituem-se reciprocamente; iii) P(x) é
transformado em not (P(x)) e not (P(x)) em P(x).
UERJ
© Oscar Luiz Monteiro de Farias
25
Tuple Relational Calculus...
• ( x) (P(x))  (x) (P(x))
• (¬ x) (P(x))  not ( x) (P(x))
Todavia, a implicação abaixo NÃO É VERDADEIRA:
• not ( x) (P(x))  (¬ x) (P(x))
UERJ
© Oscar Luiz Monteiro de Farias
26
Tuple Relational Calculus...
• Regras para uso correto do Quantificador Universal
• QUERY Q3: Recupere os nomes dos empregados que trabalham
em todos os projetos controlados pelo depto no 5.
{e.LNAME, e.FNAME | EMPLOYEE(e) and ( x)
(not(PROJECT(x)) or (not (x.DNUM = 5) or
(( w) (WORKS_ON(w) and w.ESSN = e.SSN and
x.PNUMBER = w.PNO)))))}
UERJ
© Oscar Luiz Monteiro de Farias
27
Tuple Relational Calculus...
• Pode-se subdividir a QUERY Q3 da seguinte forma:
{e.LNAME, e.FNAME | EMPLOYEE(e) and F’}
F’ = ( x) (not (PROJECT(x)) or F1)
F1 = (not (x.DNUM = 5) or F2)
F2 = ( w) (WORKS_ON(w) and w.ESSN = e.SSN and
x.PNUMBER = w.PNO)
Dica: excluir do quantificador universal todas as tuplas em que
não estamos interessados.
If A então B é equivalente a: not A or B
UERJ
© Oscar Luiz Monteiro de Farias
28
Tuple Relational Calculus...
• Não desejamos selecionar tuplas da relação PROJECT que não sejam de
interesse. Queremos apenas aquelas controladas pelo depto 5...
Para a fórmula ( x) (F) ser verdadeira, deve-se ter a fórmula F verdadeira para
todas as tuplas no universo que podem ser atribuídas a x.
If PROJECT(x) então x.DNUM=5 ...
(not (PROJECT(x) or F1)
(not x.DNUM = 5) or F2)
F2: o empregado está presente em todas as tuplas da relação PROJECT que
ainda não foram excluídas.
(w) (WORKS_ON(w) and w.ESSN = e.SSN and x.PNUMBER = w.PNO)
UERJ
© Oscar Luiz Monteiro de Farias
29
Tuple Relational Calculus...
• Forma alternativa de se escrever a QUERY Q3A, transformandose o quantificador universal em existencial:
{e.LNAME, e.FNAME | EMPLOYEE(e) and
(not ( x) (PROJECT(X) and (x.DNUM = 5) and
not (w) (WORKS_ON(w) and w.ESSN = e.SSN and
x.PNUMBER = w.PNO))))}
• QUERY Q6: Encontre o nome de todos os empregados que não
possuem dependentes.
{e.LNAME, e.FNAME | EMPLOYEE(e) and
(not ( d) (DEPENDENT(d) and (e.SSN = d.ESSN)))}
UERJ
© Oscar Luiz Monteiro de Farias
30
Tuple Relational Calculus...
• QUERY Q6A: usando as regras de transformação..
{e.LNAME, e.FNAME | EMPLOYEE(e) and
(( d) (not (DEPENDENT(d)) or not (e.SSN = d.ESSN)))}
.
• QUERY Q7: Liste os nomes dos gerentes que tenham pelo menos
um dependente.
{e.LNAME, e.FNAME | EMPLOYEE(e) and (( d) ( p)
(DEPARTMENT(d) and DEPENDENT(p) and
(e.SSN = d.MGRSSN) and (p.ESSN = e.SSN))))}
UERJ
© Oscar Luiz Monteiro de Farias
31
A Linguagem QUEL...
• QUEL é uma DDL e DML originalmente desenvolvida para o
SGBD relacional INGRES (Interactive Graphics and Retrieval
System.
• Desenvolvido como um projeto de pesquisa na década de 70 na
Universidade da Califórnia em Berkeley.
• Comercialmente disponível desde 1980.
• Pode ser usada como uma linguagem de consultas interativa ou
ser embutida em linguagens de programação,
• funcionalidade similar às primeiras versões do SQL.
• Possui funções agregadas e de grupamento
UERJ
© Oscar Luiz Monteiro de Farias
32
A Linguagem QUEL...
• O comando CREATE e tipos de dados
CREATE EMPLOYEE
UERJ
(FNAME
MINIT
LNAME
SSN
BDATE
ADDRESS
SEX
SALARY
SUPERSSN
DNO
© Oscar Luiz Monteiro de Farias
= TEXT(15),
= C1,
= TEXT(15),
= C9,
= DATE,
= TEXT(30),
= C1,
= MONEY,
= C9,
= I4);
33
A Linguagem QUEL...
• O comando INDEX: utilizado para especificar um índice (só de
10 nível) em uma relação.
• Um índice de múltiplos níveis pode ser criado especificando-se
uma B-TREE sobre um índice já existente.
UERJ
MODIFY
INDEX ON
MODIFY
INDEX ON
MODIFY
EMPLOYEE
TO BTREE UNIQUE ON SSN;
EMPLOYEE IS NAME_INDEX (LNAME, FNAME);
DEPARTMENT TO HASH UNIQUE ON DNAME;
DEPARTMENT IS DNO_INDEX (DNO);
DNO_INDEX TO CBTREE UNIQUE ON DNO;
DESTROY
DNO_INDEX, NAME_INDEX;
© Oscar Luiz Monteiro de Farias
34
Visão geral de consultas em QUEL
• As consultas do tipo select-project-join são similar ao Tuple
Relational Calculus
• A cláusula RETRIEVE especifica os atributos a serem
recuperados
• Todos os atributos devem ser explicitamente qualificados ou pelo
nome da relação ou por uma variável-tupla declarada para
assumir valores na relação.
• Variáveis-tuplas são declaradas com o comando RANGE
• A cláusula WHERE especifica as condições de seleção das tuplas
e de JOIN
UERJ
© Oscar Luiz Monteiro de Farias
35
Consultas em QUEL...
• QUERY Q0: Recupere a data de nascimento e endereço do
empregado cujo nome é `John B. Smith`.
RETRIEVE (EMPLOYEE.BDATE, EMPLOYEE.ADDRESS)
WHERE
EMPLOYEE.FNAME=`John` AND EMPLOYEE.MINIT=`B`
AND EMPLOYEE.LNAME=`SMith`
• Especificação de variáveis-tuplas com RANGE
RANGE OF
UERJ
E,S IS EMPLOYEE,
D IS DEPARTMENT,
P IS PROJECT,
W IS WORK_ON,
DEP IS DEPENDENT,
DL IS DEPT_LOCATIONS
© Oscar Luiz Monteiro de Farias
36
Consultas em QUEL...
• QUERY Q1: Recupere o nome e o endereço de todos os
empregados que trabalham para o departamento `Research`.
RETRIEVE (E.FNAME, E.LNAME, E.ADDRESS)
WHERE
D.DNAME=`Research` AND D.DNUMBER = E.DNO
• QUERY Q2: Para todos os projetos localizados em `Statford` liste
o no do projeto, o depto que o controla e o último nome, data do
nascimento e endereço do gerente do depto controlador.
RETRIEVE (P.PNUMBER, P.DNUM, E.LNAME, E.BDATE, E.ADDRESS)
WHERE
P.DNUM=D.DNUMBER AND D.MGRSSN=E.SSN
AND P.PLOCATION=`STATFORD`
UERJ
© Oscar Luiz Monteiro de Farias
37
Consultas em QUEL...
• QUERY Q8: Para cada empregado recupere o seu primeiro e
último nome, além do primeiro e último nome do(a) seu(ua)
supervisor(a) imediato(a).
RETRIEVE (E.FNAME, E.LNAME, S.FNAME, S.LNAME)
WHERE
E.SUPERSSN = S.SSN
• Para recuperar todos os atributos das tuplas selecionadas, usa-se a
keyword ALL
• QUERY Q1D: Para cada empregado do depto `Research` recupere
todos os seus atributos, juntamente com os do depto.
RETRIEVE (E.ALL, D.ALL)
WHERE
D.DNAME=`Research` AND E.DNO = D.DNUMBER
UERJ
© Oscar Luiz Monteiro de Farias
38
Consultas em QUEL...
• Para se eliminar tuplas duplicatas no resultado da consulta, usa-se a
keyword UNIQUE.
• QUERY Q11: Liste todos os salários dos empregados, mantendo os
valores duplicados.
RETRIEVE (E.SALARY)
• QUERY Q11A: Liste todos os salários dos empregados, eliminando
valores duplicados.
RETRIEVE UNIQUE
UERJ
(E.SALARY)
© Oscar Luiz Monteiro de Farias
39
Consultas em QUEL...
• QUERY Q3’: Recupere os nomes dos empregados que trabalhem
em algum projeto que seja controlado pelo depto 5.
RETRIEVE UNIQUE (E.FNAME, E.LNAME)
WHERE
P.DNUM=5 AND P.PNUMBER=W.PNO AND
W.ESSN=E.SSN
• Em QUEL qualquer variável RANGE aparecendo na cláusula
WHERE e que não apareça na cláusula RETRIEVE é
implicitamente quantificado pelo quantificador existencial (tuplas
P e W no exemplo acima).
• Para consultas que envolvam quantificadores universais, ou a
negação de quantificadores existenciais, deve-se usar as funções
COUNT ou ANY.
UERJ
© Oscar Luiz Monteiro de Farias
40
Consultas em QUEL...
• Funções buit-in de QUEL: COUNT, SUM, MIN, MAX, AVG
• As funções buit-in COUNTU, SUMU e AVG eliminam as tuplas
duplicatas antes da aplicação de COUNT, SUM e AVG.
• Todas as funções QUEL podem ser usadas ou na cláusula
RETRIEVE ou na cláusula WHERE.
• Sempre que uma função é usada na cláusula RETRIEVE deve-se
fornecer um nome de atributo independente, o qual aparecerá como
o nome de uma coluna no resultado da consulta.
• QUERY Q15: Recupere a soma dos salários de todos empregados,
os salários máximo, mínimo e médio.
RETRIEVE (SUMSAL=SUM(E.SALARY), MAXSAL=MAX(E.SALARY),
MINSAL=MIN(E.SALARY), AVGSAL=AVG(E.SALARY))
UERJ
© Oscar Luiz Monteiro de Farias
41
Consultas em QUEL...
• QUERY Q17: Recupere o no total de empregados na empresa.
RETRIEVE (TOTAL_EMPS = COUNT (E.SSN))
• QUERY Q18: Recupere o no de empregados no depto `Research`.
RETRIEVE (RESEARCH_EMPS = COUNT (E.SSN WHERE
E.DNO=D.DNUMBER AND D.DNAME = `Research`))
• Em QUEL o qualificador BY pode ser utilizado dentro da
especificação de cada função, para determinar um particular
agrupamento de tuplas. Por isso, diferentes grupamentos podem
ser usados na mesma consulta.
UERJ
© Oscar Luiz Monteiro de Farias
42
Consultas em QUEL...
• Cada função pode ter seus próprios atributos de grupamento, suas
próprias condições WHERE e grupamentos podem ser usados ou
na cláusula RETRIEVE ou na cláusula WHERE.
• QUERY Q20: Para cada depto, recupere o no do depto, o no de
empregados no depto e o seu salário médio.
RETRIEVE (E.DNO, NO_OF_EMPS = COUNT (E.SSN BY E.DNO),
AVG_SAL = AVG (E.SALARY BY E.DNO))
• QUERY Q21: Para cada projeto recupere o no do projeto, o nome
do projeto e o no de empregados que trabalham no projeto.
RETRIEVE (W.PNO, P.PNAME, NO_OF_EMPS = COUNT (W.ESSN
BY W.PNO, P.PNAME WHERE W.PNO = P.PNUMBER))
UERJ
© Oscar Luiz Monteiro de Farias
43
Consultas em QUEL...
• QUERY Q22: Para cada projeto no qual trabalham mais de dois
empregados, recupere o no do projeto, o nome do projeto e o no de
empregados que trabalham no projeto.
RETRIEVE (W.PNO, NO_OF_EMPS = COUNT (W.ESSN BY W.PNO))
WHERE
COUNT (W.ESSN BY W.PNO) > 2
• A keyword ANY é usada para especificar o quantificador existencial
• ANY é aplicada a uma subquery. Se o resultado incluir pelo menos
uma tupla, ANY retorna “1”; em caso contrário retorna “0”.
• ANY é similar à função EXISTS (retorna TRUE ou FALSE) do
SQL.
UERJ
© Oscar Luiz Monteiro de Farias
44
Consultas em QUEL...
• QUERY Q12: Recupere o nome de cada empregado que tenha
um dependente com o mesmo first name e sexo do empregado.
RETRIEVE (E.FNAME, E.LNAME)
WHERE ANY (DEP.DEPENDENT_NAME BY E.SSN
WHERE E.SSN = DEP.ESSN AND
E.FNAME = DEP_DEPENDENT_NAME AND
E.SEX = DEP.SEX) =1
• QUERY 6: Recupere os nomes de todos os empregados que não
tenham dependentes.
RETRIEVE (E.FNAME, E.LNAME)
WHERE ANY (DEP.DEPENDENT_NAME BY E.SSN
WHERE E.SSN = DEP.ESSN) = 0
UERJ
© Oscar Luiz Monteiro de Farias
45
Consultas em QUEL...
• QUERY 3: Recupere o SSN de cada empregado que trabalhe em todos os
projetos controlados pelo depto de no 5.
RETRIEVE (E.SSN)
WHERE
ANY (P.PNUMBER
WHERE (P.DNUM = 5)
AND
ANY (W.PNO BY E.SSN
WHERE E.SSN = W.E.SSN AND
P.PNUMBER = W.PNO) = 0) = 0)
UERJ
© Oscar Luiz Monteiro de Farias
46
Consultas em QUEL...
• Na comparação de strings em QUEL, “*” substitui qualquer
seqüência arbitrária de caracteres e “?” substitui um único caracter
arbitrário.
• QUERY Q25: Recupere todos os empregados com endereço em ‘Houston, TX’
RETRIEVE (E.LNAME, E.FNAME)
WHERE
E.ADDRESS = ‘*Houston, TX’)
• QUEL permite o uso dos operadores aritméticos padrões “+”, “-”,
“*”e “/”.
UERJ
© Oscar Luiz Monteiro de Farias
47
Consultas em QUEL...
• Em QUEL é possível recuperar-se o resultado de uma consulta diretamente
para uma relação.
QUERY Q27: Mostre os salários que resultariam, se a todos os trabalhadores
que trabalham no projeto ‘ProductX’ fosse dado um aumento de 10%.
Exemplo: Para armazenar o resultado de Q27 em uma relação denominada
PRODUCTX_RAISES, a qual inclui o salário corrente em cada tupla, mas
uma coluna chamada PROJ cujo valor é ‘ProductX’ para todas as tuplas,
teríamos:
RETRIEVE INTO PRODUCTX_RAISES (PROJ = ‘ProductX’, E.FNAME,
E.LNAME, CURRENT_SALARY = E.SALARY,
PROPOSED_SALARY = E.SALARY * 1.1)
WHERE E.SSN = W.ESSN AND W.PNO = P.PNUMBER AND
P.PNAME=‘ProductX’
UERJ
© Oscar Luiz Monteiro de Farias
48
Consultas em QUEL...
• QUEL possui uma cláusula SORT BY semelhante à cláusula
ORDER BY do SQL.
• QUEL possui facilidades para definir VISÕES sobre um banco
de dados e mecanismos para embutir o QUEL em uma linguagem
de programação (EQUEL).
• Em QUEL os comandos utilizados para alterar um banco de
dados são: APPEND, DELETE e REPLACE.
• Exemplo: Adicionar uma nova tupla na relação EMPLOYEE.
APPEND TO EMPLOYEE (FNAME=‘Richard’, MINIT=‘K’,
LNAME=‘Marini’, SSN=‘653298653’, BDATE=‘30-DEC-52’,
ADDRESS=‘98 Oak Forest, Katy, TX’, SEX=‘M’,
SALARY=37000, SUPERSSN=‘987654321’, DNO=4)
UERJ
© Oscar Luiz Monteiro de Farias
49
Consultas em QUEL...
• O comando APPEND permite a inserção de múltiplas tuplas em uma relação,
como resultado de uma seleção de tuplas efetuadas em outra consulta.
• DELETE é usado para remover tuplas
DELETE EMPLOUEE
WHERE E.LNAME = ‘Brown’
----DELETE EMPLOYEE
WHERE E.DNO=D.DNUMBER AND D.NAME = ‘Research’
• REPLACE é usado para modificar os valores dos atributos
REPLACE PROJECT (PLOCATION = ‘Belaire’, DNUM = 5)
WHERE P.PNUMBER = 10
UERJ
© Oscar Luiz Monteiro de Farias
50
QUEL x SQL...
 Tanto QUEL quanto SQL são fundamentadas em variações do Tuple
Relational Calculus (QUEL é mais próxima do TRC).
 Em SQL o aninhamento de blocos SELECT ... FROM ... WHERE pode ser
repetido em um número de níveis arbitrario; Em QUEL o aninhamento está
restrito a apenas um nível.
 Tanto QUEL quanto SQL usam implicitamente quantificadores existenciais.
Ambas expressam a quantificação universal em termos da quantificação
existencial equivalente.
 Em QUEL a cláusula para grupamento BY ... WHERE pode ocorrer qualquer
número de vezes em cláusulas RETRIEVE ou WHERE, permitindo
diferentes grupos em uma mesma consulta.
 Em SQL somente um grupamento simples por consulta é permitido, via a
cláusula GROUP ... BY ... HAVING. Assim o aninhamento de consultas é
necessário para se obter diferentes grupamentos.
UERJ
© Oscar Luiz Monteiro de Farias
51
QUEL x SQL
• SQL provê algumas operações explícitas da AR sobre conjuntos,
como o operador UNION.
• Em QUEL, operadores similares não estão disponíveis e deve-se
usar condições de seleção e de join mais complexas.
• QUEL permite a especificação de arquivos temporários para
receber o resultado de uma consulta em um único comando; em
SQL deve-se utilizar um comando CREATE TABLE.
• O operador ANY retorna, em QUEL, um valor inteiro “0” ou “1”.
EM SQL o operador EXISTS retorna um valor “TRUE” ou
“FALSE”.
• SQL evoluiu muito e tornou-se um padrão “de fato” para SGBDs
relacionais
UERJ
© Oscar Luiz Monteiro de Farias
52
Domain Relational Calculus (DRC)...
• Trata-se de outro tipo de linguagem de consulta a Bancos de
Dados Relacionais baseada no Cálculo de Predicados.
• Há uma linguagem de consulta comercial - Query by Example
(QBE) - que está de algum modo relacionada ao DRC.
• Historicamente, todavia, a especificação formal do DRC é
posterior ao surgimento da QBE.
• O DRC difere do TRC quanto ao tipo de variáveis utilizadas em
suas fórmulas.
• No TRC as variáveis assumem valores sobre as tuplas, enquanto
no DRC, elas assumem valores sobre os domínios dos atributos.
UERJ
© Oscar Luiz Monteiro de Farias
53
Domain Relational Calculus (DRC)...
• Para formar uma relação de grau “n” como resultado de uma
consulta, deve-se ter “n” desssas variáveis de domínio (domain
variables).
• Uma expressão do DRC é da forma:
{x1, x2, ..., xn | COND (x1, x2, ..., xn, xn+1, xn+2, ..., xn+m}
onde x1, x2, ..., xn, xn+1, xn+2, ..., xn+m são variáveis de domínio
que assumem valores sobre domínios (de atributos) e COND é
uma condição ou fórmula do DRC.
• Uma fórmula é constituída por átomos, ligeiramente diferentes
daqueles do TRC.
UERJ
© Oscar Luiz Monteiro de Farias
54
Domain Relational Calculus (DRC)...
Átomos no DRC podem ser:
1. Um átomo da forma R(x1, x2, ..., xj), onde R é o nome de uma
relação de grau j, e cada xi , 1  i  j é uma variável de domínio.
A semântica deste átomo diz que uma lista de valores < x1, x2,
..., xn> deve ser uma tupla na relação de nome R, em que xi é o
valor do i-ésimo atributo da tupla. Para fins de abreviação,
despreza-se as vírgulas e escreve-se uma expressão do DRC
como:
{x1x2...xn | R (x1x2 ...xn) and ...}, ao invés de
{x1, x2, ..., xn | R (x1, x2, ...xn) and ...}
2. Um átomo da forma xi op xj, onde op é um dos operadores de
comparação no conjunto {=, ,, , , }, xi e xj são variáveis
de domínio.
UERJ
© Oscar Luiz Monteiro de Farias
55
Domain Relational Calculus (DRC)...
3.
•
•
•
•
UERJ
Um átomo da forma xi op c ou c op xj, onde op é um dos
operadores de comparação no conjunto {=, ,, , , }, xi e xj são
variáveis de domínio e c é um valor constante.
Como no TRC, os átomos são avaliados como TRUE ou FALSE
para um conjunto específico de valores, chamados os valoresverdade dos átomos.
Em “1”, se as variáveis de domínio assumem valores
correspondentes a uma tupla pertencente à relação R, então o
átomo é TRUE.
Nos casos “2” e “3”, se as variáveis de domínio assumem valores
que satisfazem a condição (de comparação) então o átomo é
TRUE.
Fórmulas são feitas de átomos, variáveis e quantificadores (~TRC).
© Oscar Luiz Monteiro de Farias
56
Queries em DRC...
• QUERYQ0: Recupere a data de nascimento e endereço do
empregado cujo nome é `John B. Smith`.
{uv | ( q) ( r) ( s)
(EMPLOYEE(qrstuvwxyz) and q=‘John’, and r=‘B’ and s=‘Smith’)}
• QUERY Q0A: alternativa à query Q0:
{uv | EMPLOYEE(‘John’, ‘B’, ‘Smith’, tuvwxyz)}
• QUERY Q1: Recupere o nome e o endereço de todos os
empregados que trabalham no departamento ‘Research’.
{qsv | ( z) (EMPLOYEE(qrstuvwxyz) and ( l) ( m)
(DEPARTMENT(lmno) and l=‘Research’ and m=z))}
UERJ
© Oscar Luiz Monteiro de Farias
57
Queries em DRC...
• QUERY Q2: Para todo projeto localizado em ‘Stafford’, liste o no
do projeto, o no do dpto que o controla, o último nome do gerente,
a data de seu nascimento e o seu endereço.
{iksuv | ( j) (PROJECT(hijk) and ( t) (EMPLOYEE(qrstuvwxyz) and
( m) ( n) (DEPARTMENT(lmno) and k= m and n=t and j=‘Stafford’)))}
• QUERY 6: Recupere o nome de todos os empregados que não tenham
dependentes.
{qs | ( t) (EMPLOYEE(qrstuvwxyz) and (not ( l)(DEPENDENT(lmnop)
and t=l)))}
UERJ
© Oscar Luiz Monteiro de Farias
58
Queries em DRC
• QUERY 6A: Query Q6, usando o quantificador universal.
{qs | ( t) (EMPLOYEE(qrstuvwxyz) and (( l) (not (DEPENDENT(lmnop)
or not (t=l))))}
• QUERY 7: Liste os nomes dos gerentes que tenham pelo menos um dependente.
{sq | ( t) (EMPLOYEE(qrstuvwxyz) and ( j) (DEPARTMENT(hijk) and
l)(DEPENDENT(lmnop) and t=j and l=t)))))}
UERJ
© Oscar Luiz Monteiro de Farias
(
59
Visão Geral da Linguagem QBE...
• Linguagem de consultas para BDs relacionais desenvolvida pela
IBM.
• Parte da Query Management Facility (QMF), opção de interface
do DB2.
• A consulta é formulada através do preenchimento, pelo usuário,
de uma série de templates.
• Constantes e variáveis são colocadas nas colunas dos templates
para construir um exemplo relacionado à consulta ou a
atualização.
• QBE é relacionado ao DRC e demonstra-se que é relacionalmente
completo.
UERJ
© Oscar Luiz Monteiro de Farias
60
Visão Geral da Linguagem QBE...
• Constantes são introduzidas nos templates da mesma forma
como se escrevem.
• Os valores exemplos são antecedidos por “_”. Representam
variáveis de domínio livres.
• Não há necessidade de se especificar valores exemplos para as
colunas cujos atributos não temos interesse em recuperar.
• Os valores exemplos são completamente arbitrários e pode-se
especificar qualquer valores para eles.
• O prefixo “P. “ indica que um valor particular é para ser
recuperado.
UERJ
© Oscar Luiz Monteiro de Farias
61
Visão Geral da Linguagem QBE...
• QUERYQ0: Recupere a data de nascimento e endereço do
empregado cujo nome é `John B. Smith`.
{uv | ( q) ( r) ( s)
(EMPLOYEE(qrstuvwxyz) and q=‘John’, and r=‘B’ and s=‘Smith’)}
UERJ
© Oscar Luiz Monteiro de Farias
62
Visão Geral da Linguagem QBE...
• Cada coluna de um template pode ser pensada como uma variável
de domínio implícita.
• Na consulta QBE, a coluna com “P.” no template corresponde a
variáveis especificadas à esquerda da “|” no DRC.
• As colunas com valores constantes correspondem a variáveis de
domínio com condições de seleção de igualdade.
• A condição EMPLOYEE(qrstuvwxyz) e os quantificadores existenciais
estão implícitos, porque o template correspondente a relação EMPLOYEE está
sendo utilizado.
• Os operadores de comparação devem ser explicitados no template.
• Para condições mais complexas o usuário pode utilizar um condition box (IBM)
UERJ
© Oscar Luiz Monteiro de Farias
63
Visão Geral da Linguagem QBE...
• QUERY Q0A: Liste os SSNs dos empregados que trabalham mais
de 20 horas semanais no projeto de no “1”.
UERJ
© Oscar Luiz Monteiro de Farias
64
Visão Geral da Linguagem QBE...
• QUERY Q0B: Liste os SSNs dos empregados que trabalham mais
de 20 horas semanais ou no projeto de no “1”, ou no projeto de no
“2”.
UERJ
© Oscar Luiz Monteiro de Farias
65
Visão Geral da Linguagem QBE...
• Todas as condições especificadas na mesma linha são conectadas
pelo operador lógico and.
• As condições especificadas em linhas distintas são conectadas
pelo operador lógico or.
UERJ
© Oscar Luiz Monteiro de Farias
66
Download

QUEL