FC ConcursosFC Concursos

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:

  1. SELECT p.numero, m.data_mov

    FROM Processo p

    LEFT JOIN Mov m ON p.id_processo = m.id_processo;

  2. 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;

  3. 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);

  4. SELECT p.numero, m.data_mov

    FROM Processo p

    FULL JOIN Mov m ON p.id_processo = m.id_processo;

  5. 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

Continue aprendendo