Considerando as tabelas Competidor e Disputa, descritas ant...
Excetuados os títulos, o número de linhas produzidas pela execução desse comando é:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
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
Essa é bem chatinha, mas quebrando um pouco a cabeça da para entender:
select c1.nome, c2.nome from competidor c1, competidor c2
Essa consulta é o produto cartesiano da tabela competidor com ela mesma, então como a tabela tem 6 linhas o produto cartesiano terá 36 linhas com todas as combinações possiveis.
A A, A B, A C, A D, A E, A F, B A, B B .....
select * from disputa d where d.azul = c2.nome and d.verde = c1.nome
Esse subselect aqui se você reparar bem vai ver que está selecionando os registros da tabela de disputa que batem com algum registro do resultado do produto cartesiano ali em cima. Aí que está o pulo do gato, como o produto cartesiano vai produzir todos os resultados possíveis então todos os resultados da tabela de disputa serão retornados (6).
Por fim, o where not exists pede para desconsiderar os registros que foram retornados no subselect anterior.
Ou seja, o resultado final será o produto cartesiano (36 linhas) menos as linhas da tabela de disputa (6) linhas, resultando em um total de 30 linhas.
O produto cartesiano gera todos as combinações entre competidores = 36 combinações. A cláusula where remove as que já estão na tabela disputa (considerar apenas as combinações distintas) = 6. O total de tuplas retornadas é, portanto, 36 - 6 = 30
A consulta SQL tem como objetivo encontrar pares de competidores \( c1 \) e \( c2 \) onde não existe uma disputa registrada com \( c2 \) vestindo a camisa azul e \( c1 \) vestindo a camisa verde. A consulta analisa todos os pares possíveis entre competidores e exclui aqueles onde uma disputa inversa específica (c2 como azul e c1 como verde) já ocorreu.
### Passos da Consulta:
1. **Seleção de Pares**: A consulta gera um produto cartesiano entre todos os competidores, criando todos os pares possíveis, incluindo competidores pareados consigo mesmos.
2. **Filtro de Exclusão**: Utiliza-se uma subconsulta dentro de `WHERE NOT EXISTS` para excluir pares onde \( c2 \) já competiu contra \( c1 \) com \( c2 \) de azul e \( c1 \) de verde.
3. **Resultado Final**: Os pares restantes são aqueles para os quais não existe registro na tabela Disputa que desqualifique o par segundo as condições da subconsulta.
### Contagem dos Resultados:
- Há um total de 6 competidores: A, B, C, D, E, F.
- O produto cartesiano inicial gera \( 6 \times 6 = 36 \) combinações.
- Excluímos 6 combinações onde um competidor é pareado consigo mesmo, restando 30 combinações possíveis.
- A condição de exclusão remove apenas os pares onde as condições específicas da disputa inversa (c2 de azul contra c1 de verde) são encontradas, o que não impacta diretamente no número de 30, pois já removemos combinações diretas.
Portanto, a consulta resulta em 30 pares de competidores que não se enfrentaram nas condições inversas especificadas.
chatgpt
revisar
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo