Questão FC890514
Considere o script SQL a seguir. CREATE TABLE Processo ( id_processo INT PRIMARY KEY, numero VARCHAR(20) NOT NULL); CREATE TABLE mov ( id_mov SERIAL PRIMARY KEY, id_processo INT NO
Linguagem SQL
FGV · 2026
Considere o script SQL a seguir.
CREATE TABLE Processo (
id_processo INT PRIMARY KEY,
numero VARCHAR(20) NOT NULL);
CREATE TABLE mov (
id_mov SERIAL PRIMARY KEY,
id_processo INT NOT NULL,
data_mov DATE NOT NULL,
FOREIGN KEY (id_processo) REFERENCES
processo(id_processo) );
INSERT INTO Processo (id_processo, numero) VALUES
(1, 'P1'),
(2, 'P2'),
(3, 'P3'),
(4, 'P4');
INSERT INTO Mov (id_processo, data_mov) VALUES
(1, '2023-05-10'),
(1, '2023-06-01'),
(2, '2023-08-15'),
(3, '2024-02-20');
Para listar o número do processo e a última data de movimentação, exibindo somente os processos que possuem movimentação, deve-se utilizar a query:
- SELECT p.numero, m.data_mov
FROM Processo p
LEFT JOIN Mov m ON p.id_processo = m.id_processo;
- SELECT p.numero, m.data_mov
FROM Processo p
RIGHT JOIN Mov m ON p.id_processo = m.id_processo
WHERE m.data_mov IS NOT NULL;
- SELECT p.numero, m.data_mov
FROM Processo p
INNER JOIN Mov m ON p.id_processo = m.id_processo
WHERE m.data_mov = (SELECT MAX(m2.data_mov) FROM Mov
m2 WHERE m2.id_processo = p.id_processo);
- SELECT p.numero, m.data_mov
FROM Processo p
FULL JOIN Mov m ON p.id_processo = m.id_processo;
- SELECT p.numero, m.data_mov
FROM Processo p
CROSS JOIN Mov m
WHERE m.id_processo = p.id_processo and m.data_mov IS
NOT NULL;
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
A consulta da alternativa C combina corretamente junção e subconsulta para retornar o número do processo e a última data de movimentação apenas para processos que têm movimentações.
O uso de INNER JOIN entre Processo e Mov garante que sejam exibidos somente processos que possuem movimentação, pois descarta processos sem registro em Mov.
A subconsulta correlacionada (SELECT MAX(m2.data_mov) ... WHERE m2.id_processo = p.id_processo) calcula, para cada processo, a maior data de movimentação. Ela referencia a linha externa via p.id_processo, fazendo a comparação por processo.
O filtro WHERE m.data_mov = (subconsulta) mantém apenas a linha de Mov cuja data coincide com essa data máxima, retornando assim a última movimentação de cada processo com movimentação.
Conteúdo do catálogo FC Concursos · Atualizado em