Questão FC90577
1. CREATE TABLE IF NOT EXISTS 'software' ( 2. 'id' int NOT NULL, 3. 'nome' varchar(70) NOT NULL, 4. PRIMARY KEY ('id') 5. ) DEFAULT CHARSET=utf8; 6. INSERT INTO 'software' ('id', '
Linguagem SQL
CEBRASPE (CESPE) · 2018
2. 'id' int NOT NULL,
3. 'nome' varchar(70) NOT NULL,
4. PRIMARY KEY ('id')
5. ) DEFAULT CHARSET=utf8;
6. INSERT INTO 'software' ('id', 'nome') VALUES
7. ('1', 'Programa ABC'),
8. ('2', 'Programa WYZ'),
9. ('3', 'Programa DFG');
10. CREATE TABLE IF NOT EXISTS 'vsoftware' (
11. 'idsoft' int UNSIGNED NOT NULL REFERENCES software(id),
12. 'versao' int(3) NOT NULL,
13. 'descricao' varchar(70) NOT NULL,
14. PRIMARY KEY ('idsoft','versao'));
15. INSERT INTO 'vsoftware' ('idsoft', 'versao', 'descricao') VALUES
16. ('1', '1', 'criacao do programa.'),
17. ('2', '1', '1a versao.'),
18. ('1', '2', 'atualizacao na tela A.'),
19. ('1', '3', 'adicao da tela C.'),
20. ('2', '2', 'adicao da tela D.');
Com base nos comandos MySQL 5.6 precedentes, julgue o item a seguir:
Especialmente devido à expressão na linha 11, o comando a seguir, após executado, retornará três registros.
SELECT a.idsoft, a.versao, a.descricao
FROM 'vsoftware' a
INNER JOIN (
SELECT idsoft, MAX(versao) versao
FROM 'vsoftware'
GROUP BY idsoft ) b ON a.idsoft = b.idsoft
AND a.versao = b.versao;
Mostrar resposta e comentário
Gabarito
Errado
Comentário do professor
1️⃣ O que a consulta faz?
A consulta tem duas partes principais:
1️⃣ Subconsulta (
b)- Ela encontra a maior versão (
MAX(versao)) para cada software (idsoft). - Isso significa que para cada
idsoft, apenas a versão mais alta será retornada.
2️⃣ Consulta principal (
a)- Ela faz um INNER JOIN com a subconsulta para trazer as informações completas (
idsoft,versao,descricao). - O JOIN ocorre quando a versão (
a.versao) for igual à maior versão (b.versao) encontrada para aqueleidsoft.
2️⃣ O erro da questão
O erro está na afirmação de que a consulta retorna três registros. O que realmente acontece:
- O número de registros retornados depende do número de softwares distintos (
idsoft) na tabelavsoftware. - A consulta sempre retorna apenas um registro por
idsoft, pois ela filtra somente a maior versão de cada software. - Se houver menos de três
idsoftdiferentes na tabelavsoftware, então a consulta retornará menos de três registros.
O erro da questão foi afirmar que sempre serão três registros, quando na verdade o número de registros depende da quantidade de softwares diferentes no banco.
Conteúdo do catálogo FC Concursos · Atualizado em