Questão nº 62
Questão de Tecnologia da Informação · CESGRANRIO Transpetro PSP-RH-2018.1 (nº 62)
As Tabelas a seguir fazem parte do esquema de um banco de dados de uma escola de nível médio, que deseja controlar os resultados de seus alunos nos exames simulados do ENEM.
CREATE TABLE ALUNO ( MATRICULA NUMBER(5) NOT NULL, NOME VARCHAR2(50) NOT NULL, ANO NUMBER(1) NOT NULL, TURMA CHAR(1) NOT NULL, CONSTRAINT ALUNO_PK PRIMARY KEY (MATRICULA) ) CREATE TABLE SIMULADO ( CODIGO NUMBER(5) NOT NULL, DESCRICAO VARCHAR2(80) NOT NULL, DATA DATE NOT NULL, CONSTRAINT SIMULADO_PK PRIMARY KEY (CODIGO) ) CREATE TABLE PARTICIPACAO ( MATRICULA NUMBER(5) NOT NULL, CODIGO NUMBER(5) NOT NULL, PONTOS NUMBER(4), CONSTRAINT PART_PK PRIMARY KEY (MATRICULA,CODIGO), CONSTRAINT PART_FK1 FOREIGN KEY (MATRICULA) REFERENCES ALUNO (MATRICULA), CONSTRAINT PART_FK2 FOREIGN KEY (CODIGO) REFERENCES SIMULADO (CODIGO) )Considere que:
• A Tabela PARTICIPACAO registra a inscrição de alunos nos exames simulados promovidos pela escola. Um aluno pode inscrever-se em muitos simulados, e um simulado pode ter muitos alunos inscritos.
• Todas as vezes em que um aluno se inscrever em um simulado uma linha será inserida na tabela PARTICIPACAO.
• Após a correção de um simulado, os pontos obtidos pelos alunos inscritos são atualizados na tabela PARTICIPACAO.
Seja o seguinte comando SQL:
SELECT P.MATRICULA
FROM PARTICIPACAO P, SIMULADO S
WHERE S.DATA='02/06/2017' AND S.CODIGO=P.CODIGO
Que sequência de operações da Álgebra Relacional produz o mesmo resultado que o comando SQL acima?
- A`σ_DATA = '02/06/2017' (π_MATRICULA (SIMULADO ⋈_SIMULADO.CODIGO=PARTICIPACAO.CODIGO PARTICIPACAO))`
- B`σ_MATRICULA ((⋈_DATA = '02/06/2017' (SIMULADO)) π_CODIGO=PARTICIPACAO.CODIGO PARTICIPACAO)`
- C`π_MATRICULA ((σ_DATA = '02/06/2017' (SIMULADO)) σ_CODIGO=PARTICIPACAO.CODIGO PARTICIPACAO)`
- D`σ_MATRICULA ((π_DATA = '02/06/2017' (SIMULADO)) ⋈_CODIGO=PARTICIPACAO.CODIGO PARTICIPACAO)`
- E`π_MATRICULA ((σ_DATA = '02/06/2017' (SIMULADO)) ⋈_CODIGO=PARTICIPACAO.CODIGO PARTICIPACAO)` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Conceito-chave: A Álgebra Relacional é uma linguagem formal para consultar bancos de dados, onde cada operação (como para projetar colunas, para filtrar linhas e para juntar tabelas) é aplicada sobre relações (tabelas). A ordem das operações importa: primeiro filtramos (σ) e depois juntamos (⋈), para só então projetar (π) as colunas desejadas.
- (A) Incorreta: A seleção está aplicada sobre o resultado da projeção , mas a projeção foi feita antes da junção, o que elimina a coluna
CODIGOnecessária para o join, e a ordem das operações está invertida. - (B) Incorreta: A notação está malformada (faltam parênteses e a seleção não está aplicada corretamente sobre a tabela
SIMULADO), e a projeção está ausente no resultado final. - (C) Incorreta: A junção (seleção) foi usada no lugar da junção natural (), o que é um erro conceitual — a operação de junção é , não , e a projeção está aplicada antes da junção, perdendo a coluna
CODIGO. - (D) Incorreta: A projeção está aplicada sobre a condição
DATA = '02/06/2017', o que é inválido (projeção projeta colunas, não condições), e a ordem das operações está errada. - (E) Correta: Esta é a sequência correta: primeiro filtra os simulados com
DATA = '02/06/2017'usando , depois junta comPARTICIPACAOpela condiçãoCODIGO = CODIGOusando , e por fim projeta apenas a colunaMATRICULAcom . Isso reproduz exatamente o resultado do SQL, que seleciona as matrículas dos alunos que participaram de simulados naquela data.
Fonte: CESGRANRIO Transpetro PSP-RH-2018.1 Analista de Sistemas Júnior - Infraestrutura. Reproduzida para fins de estudo.