Tendo como referência as informações precedentes, julgue o i...

Próximas questões
Com base no mesmo assunto
Q1902775 Banco de Dados
Em um banco de dados relacional, foram criadas as seguintes relações, posteriormente transformadas e preenchidos seus dados em tabelas. As chaves primárias estão realçadas em itálico.

professor (cpf_professor, nome, titulação, salario)

curso (cod_curso, titulo, objetivo, cpf_professor_coord)

contrato (cpf_professor, cod_curso, data_inicio)

Tendo como referência as informações precedentes, julgue o item subsecutivo.


O comando SQL a seguir cria uma visão com todos os dados dos professores e dos respectivos cursos que eles coordenam, não incluindo os cursos sem um professor com a função de coordenador.

create view coordenador_curso as

select * from professor p left outer join curso s on true

where p.cpf_professor = s.cpf_professor_coord; 

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: C - certo

O tema desta questão é a criação de visões (views) em SQL e o entendimento do funcionamento dos joins. Para resolver a questão, é necessário conhecer o conceito de left outer join e como ele é utilizado para combinar registros de duas tabelas.

A visão coordenador_curso é criada corretamente para atender ao requisito de mostrar todos os dados dos professores e dos respectivos cursos que eles coordenam. O comando left outer join é especialmente relevante aqui, pois ele retorna todos os registros da tabela da esquerda (no caso, professor) e os registros correspondentes da tabela da direita (no caso, curso). Quando não há correspondência, os resultados da tabela da direita têm valores NULL. Entretanto, o uso do left outer join é complementado pela condição no ON, que está sempre verdadeira (ON true), e a filtragem real acontece no WHERE, assegurando que apenas professores que sejam coordenadores de cursos sejam incluídos na visão.

A expressão WHERE p.cpf_professor = s.cpf_professor_coord garante que a visão incluirá apenas as linhas em que o cpf_professor da tabela professor corresponde ao cpf_professor_coord da tabela curso, excluindo assim cursos sem um professor coordenador. A visão criada é, portanto, correta e está alinhada com a descrição fornecida na pergunta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Gabarito: CERTO.

O comando SQL apresentado cria uma visão chamada "coordenador_curso". Uma visão é uma tabela virtual que é definida por uma consulta SQL. Quando você cria uma visão, está basicamente criando uma tabela virtual que contém os dados que você precisa. Esses dados não são armazenados fisicamente, mas sim são resultado da consulta que foi definida para a visão.

A consulta SQL que foi definida para a visão "coordenador_curso" tem duas tabelas envolvidas: a tabela "professor" e a tabela "curso". A cláusula "LEFT OUTER JOIN" indica que todos os registros da tabela "professor" serão mantidos, mesmo que não haja um correspondente na tabela "curso".

A condição que liga as duas tabelas é a igualdade entre o campo "cpf_professor" da tabela "professor" e o campo "cpf_professor_coord" da tabela "curso". Isso significa que a visão "coordenador_curso" conterá todas as informações dos professores e dos cursos que eles coordenam.

Porém, como a cláusula "LEFT OUTER JOIN" está sendo utilizada, a visão incluirá também os registros dos professores que não estão coordenando nenhum curso. Isso porque a cláusula "LEFT OUTER JOIN" garante que todos os registros da tabela da esquerda ("professor") serão mantidos, mesmo que não haja correspondência na tabela da direita ("curso").

Por fim, a cláusula "WHERE p.cpf_professor = s.cpf_professor_coord" é usada para filtrar apenas os registros que têm correspondência entre as duas tabelas. Nesse caso, a cláusula WHERE pode ser substituída pela cláusula "ON true", que garante que todas as linhas da tabela da esquerda (professor) serão mantidas, mesmo se não houver uma correspondência na tabela da direita (curso).

imagina dois diagramas de ven que se intercedem no meio, quando ele da um "professor LEFT OUTER JOIN curso", ele pega todo o círculo esquerdo incluindo a intersecção, ou seja, todos os professores sem curso e todos os professores com curso, em que o "on true" é o mesmo que "p.key = s.key", quando vem o "where p.cpf_professor = s.cpf_professor_coord" ele faz mais uma limitação, dizendo que não quer qualquer professor que tenha curso, mas apenas os professores coordenadores.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo