Considere o comando SQL a seguir. SELECT a.X, b.Y FROM T1 a, T2 b WHERE a.R = b.S Dado que essa consulta pode ser expressa usando as operações primitivas da Álgebra Relacional, a lista que contém as operações necessárias e suficientes para essa conversão é, em ordem alfabética:
- A)Diferença, Produto, Projeção;
Errada, porque Diferença não é usada nessa conversão e o conjunto está incompleto para montar o filtro e a lista de colunas.
- B)Produto, Projeção, União;
Errada, porque União não aparece na consulta e falta a Seleção, que é essencial para aplicar a condição do WHERE.
- C)Projeção, União;
Errada, porque União não tem relação com a consulta apresentada e também falta Produto e Seleção.
- D)Produto, Projeção, Seleção;
Certa, pois a consulta é expressa por Produto, Seleção e Projeção, que bastam para representar o filtro e a saída pedida.
- E)Seleção, União.
Errada, porque União não é necessária e, sem Produto e Projeção, a consulta não pode ser reconstruída corretamente.
Gabarito: D
Essa consulta SQL faz três coisas bem clássicas: junta as tabelas, filtra as linhas que casam e depois mostra só as colunas pedidas. Em álgebra relacional primitiva, isso vira exatamente Produto, Seleção e Projeção. Primeiro vem o produto cartesiano de T1 por T2, depois a seleção com a condição a.R = b.S, e por fim a projeção de a.X e b.Y. A lógica é simples: o SQL do tipo FROM T1 a, T2 b WHERE a.R = b.S já é o retrato de um join interno. Como o join pode ser expresso a partir das operações primitivas, você não precisa de operador de junção para resolver a questão. Basta combinar produto + seleção + projeção. Por isso o gabarito é a alternativa D. Em ordem alfabética, entre as operações necessárias e suficientes, aparecem Produto, Projeção e Seleção. É a fórmula básica da álgebra relacional para esse tipo de consulta: cruzar, filtrar e enxugar.