FC ConcursosFC Concursos

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

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', '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 aquele idsoft.

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 tabela vsoftware.
  • 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 idsoft diferentes na tabela vsoftware, 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

Continue aprendendo