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.