Exercicio 1 – AULA 24
SELECT DISTINCT E.Idade, E.Periodo
FROM ESTUDANTE E
GROUP BY E.Idade, E.Periodo
HAVING E.Periodo IN
(SELECT E1.Periodo
FROM ESTUDANTE E1
WHERE E1.Idade = E.Idade
GROUP BY E1.Periodo
HAVING COUNT(*) >= ALL (
SELECT COUNT(*)
FROM ESTUDANTE E2
WHERE E1.Idade = E2.Idade
GROUP BY E2.Periodo)
)
a)
Sequência de blocos simples produzidos pelo parser do SQL
Bloco 1 (mais interno)
SELECT COUNT(*)
FROM ESTUDANTE E2
WHERE E1.Idade = E2.Idade
GROUP BY E2.Periodo
Resultado produzido pelo bloco 1 = Relação temporária T1(A)
Bloco 2
SELECT E1.Periodo
FROM ESTUDANTE E1
WHERE E1.Idade = E.Idade
GROUP BY E1.Periodo
HAVING COUNT(*) >= ALL (T1)
Resultado produzido pelo bloco 2 = Relação temporária T2(Periodo)
Bloco 3
SELECT DISTINCT E.Idade, E.Periodo
FROM ESTUDANTE E
GROUP BY E.Idade, E.Periodo
HAVING E.Periodo IN T2
Resultado produzido pelo bloco 2 = Relação Final T3(Idade,Período)
b) Estime o tamanho da resposta de cada bloco simples, sabendo que a
relação estudante tem 1000 páginas.
Bloco 1 (mais interno)
SELECT COUNT(*)
FROM ESTUDANTE E2
WHERE E1.Idade = E2.Idade
GROUP BY E2.Periodo
Resultado produzido pelo bloco 1 = Relação temporária T1(A)
•
•
•
A relação T1 contém uma única coluna.
O número de tuplas de T1 é no máximo igual ao número de valores do
atributo Periodo.
Assim, claramente o tamanho de T1 é 1 página.
Bloco 2
SELECT E1.Periodo
FROM ESTUDANTE E1
WHERE E1.Idade = E.Idade
GROUP BY E1.Periodo
HAVING COUNT(*) >= ALL (T1)
Resultado produzido pelo bloco 2 = Relação temporária T2(Periodo)
• Relação Estudante tem 1000 páginas
• A condição de seleção E1.Idade = E.Idade reduz estas 1000 páginas para
1000/X, onde X = número de valores do atributo Idade na relação Estudantes,
supondo que estes valores estão distribuídos uniformemente, isto é, para cada
valor de Idade, temos aproximadamente o mesmo número de estudantes com
esta idade.
• O comando Group by E1. Periodo só agrupa estas 1000/X páginas por periodo
• O comando Having COUNT(*) >= ALL (T1) elimina todos os grupos relativos a
periodos < ALL(T1). Na pior das hipóteses nenhum grupo é eliminado. E temos
como resultado as 1000/X páginas.
• Ao se projetar as 1000/X páginas sobre o atributo Periodo, teremos como resultado um
total estimado de (1000/X)/5), já que a relação Estudantes tem 5 atributos e estamos supondo
que todos os campos têm o mesmo tamanho.
Assim, o tamanho da relação T2 é 200/X páginas, onde X = número de valores do
atributo Idade na relação Estudantes.
Bloco 3
SELECT DISTINCT E.Idade, E.Periodo
FROM ESTUDANTE E
GROUP BY E.Idade, E.Periodo
HAVING E.Periodo IN T2
Resultado produzido pelo bloco 2 = Relação Final T3(Idade,Período)
• A relação E tem 1000 páginas
• Agrupando esta relação por Idade, Periodo, continuamos com as mesmas
1000 páginas
• O comando HAVING E.Periodo IN T2 elimina subgrupos dentro de cada
grupo de idade, onde os periodos não estão em T2.
• Na pior das hipóteses nenhum grupo é eliminado.
• O resultado final é 1000*2/5 = 100 páginas
•Assim, o tamanho estimado (por alto) da relação T3 é 100 páginas.
Download

Solução