Logo Passei Direto
Buscar
Considere uma tabela em um banco de dados relacional. A tabela apresenta três atributos do tipo texto, sendo CPF o campo chave. Cliente(CPF, Nome, Endereco) Considerando-se que homônimos são pessoas que possuem o mesmo nome, mas CPF diferentes, a expressão SQL que resulta na lista dos Clientes que têm homônimos, juntamente com o número de homônimos, é:

a. SELECT C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.CPF <> C2.CPF AND C1.Nome = C2.Nome GROUP by C1.Nome, C1.CPF HAVING count(*) > 0
b. SELECT DISTINCT C1.Nome, C1.CPF, COUNT(C2) FROM Cliente C1, Cliente C2 WHERE C1.Nome = C2.Nome AND C1.CPF <> C2.CPF
c. SELECT TOP 1 C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.Nome = C2.Nome AND C1.CPF <> C2.CPF
d. SELECT Nome, CPF, (SELECT COUNT(*) FROM Cliente C1 WHERE C.Nome = C1.Nome AND C.CPF <> C1.CPF) FROM Cliente C
e. SELECT Nome, CPF, COUNT(Cliente) FROM Cliente GROUP BY Nome, CPF HAVING COUNT(*) > 1
User badge image
Desenvolvendo com Questões

há 11 meses

Respostas

User badge image

Ed Verified user icon

há 11 meses

Para encontrar a lista de clientes que têm homônimos, precisamos comparar os registros na tabela "Cliente" onde o nome é o mesmo, mas o CPF é diferente. Vamos analisar cada uma das opções: a) SELECT C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.CPF <> C2.CPF AND C1.Nome = C2.Nome GROUP BY C1.Nome, C1.CPF HAVING COUNT(*) > 0 Esta consulta parece correta, pois conta os homônimos e agrupa pelo nome e CPF, mas o HAVING COUNT(*) > 0 não é necessário, pois o GROUP BY já garante que haverá resultados. b) SELECT DISTINCT C1.Nome, C1.CPF, COUNT(C2) FROM Cliente C1, Cliente C2 WHERE C1.Nome = C2.Nome AND C1.CPF <> C2.CPF Esta consulta não agrupa os resultados, o que pode levar a resultados incorretos, pois COUNT(C2) não está sendo agrupado corretamente. c) SELECT TOP 1 C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.Nome = C2.Nome AND C1.CPF <> C2.CPF Esta consulta limita os resultados a apenas um registro (TOP 1), o que não atende ao requisito de listar todos os homônimos. d) SELECT Nome, CPF, (SELECT COUNT(*) FROM Cliente C1 WHERE C.Nome = C1.Nome AND C.CPF <> C1.CPF) FROM Cliente C Esta consulta pode funcionar, mas não está agrupando os resultados, o que pode resultar em múltiplas linhas para o mesmo cliente. e) SELECT Nome, CPF, COUNT(Cliente) FROM Cliente GROUP BY Nome, CPF HAVING COUNT(*) > 1 Esta consulta conta os clientes, mas não considera a condição de CPF diferente, portanto não atende ao requisito de homônimos. Após analisar todas as opções, a que melhor atende ao requisito de listar clientes com homônimos e contar quantos homônimos cada um tem é a a), embora tenha um pequeno detalhe no HAVING que poderia ser removido. Portanto, a resposta correta é: a) SELECT C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.CPF <> C2.CPF AND C1.Nome = C2.Nome GROUP BY C1.Nome, C1.CPF HAVING COUNT(*) > 0

Essa resposta te ajudou?

0
Dislike0
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar essa resposta. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Ainda com dúvidas?

Envie uma pergunta e tenha sua dúvida de estudo respondida!

Essa pergunta também está no material:

Mais perguntas desse material

Um administrador de dados deseja fazer o seguinte relatório: Todas as pessoas, os mesmos quais já trabalharam e o total recebido por cada filme. Se uma pessoa nunca trabalhou num filme, ela deve aparecer no relatório. A atividade que a pessoa exerceu no filme (ex: ator, diretor, câmera etc.) não é importante para o relatório. Qual consulta retorna o conjunto resposta correto?

a. SELECT T.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa LEFT OUTER JOIN Filme F
b. SELECT P.nomePessoa, F.nomeFilme, sum(T.salário) total FROM Pessoa P INNER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa INNER JOIN Filme F ON F.nomeFilme = T.nomeFilme WHERE T.atividade IS NOT NULL AND T.salário > 0 GROUP BY P.nomePessoa, F.nomeFilme
c. SELECT P.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa GROUP BY P.nomePessoa, T.nomeFilme HAVING sum(T.salário) > 0
d. SELECT P.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa GROUP BY P.nomePessoa, T.nomeFilme
e. SELECT T.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P INNER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa GROUP BY T.nomePessoa, T.nomeFilme

Mais conteúdos dessa disciplina