FC ConcursosFC Concursos

Questão FC670726

O Hospital Campo Grande do Norte deseja gerenciar a participação de seus médicos em congressos médicos. Para isso, um banco de dados relacional foi projetado com as tabelas seguir.

Linguagem SQL

QUADRIX · 2025

O Hospital Campo Grande do Norte deseja gerenciar a participação de seus médicos em congressos médicos. Para isso, um banco de dados relacional foi projetado com as tabelas seguir.

 

CREATE TABLE Medicos (        id_medico INT PRIMARY KEY,        nome VARCHAR(100) NOT NULL,        especialidade VARCHAR(50) NOT NULL );

CREATE TABLE Congressos (        id_congresso INT PRIMARY KEY,        nome VARCHAR(100) NOT NULL,        local VARCHAR(100) NOT NULL,        data_inicio DATE NOT NULL,        data_fim DATE NOT NULL CHECK (data_fim > = data_inicio) );

CREATE TABLE Participacoes (         id_medico INT,         id_congresso INT,         papel VARCHAR(50) CHECK (papel IN (‘Palestrante’, ‘Ouvinte’, ‘Organizador)),         data_inscricao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,         PRIMARY KEY (id_medico, id_congresso),         FOREIGN KEY (id_medico) REFERENCES Medicos(id_medico) ON DELETE CASCADE,        FOREIGN KEY (id_congresso) REFERENCES Congressos(id_congresso) ON DELETE CASCADE         );

Além disso, para facilitar consultas, foi criada a seguinte view.

 

Com base nessa situação hipotética, julgue o item a seguir.

O comando a seguir encontra todos os médicos que participaram de congressos em 2023, mas não participaram de nenhum congresso em 2024.

SELECT DISTINCT M.nome FROM Medicos M JOIN Participacoes P ON M.id_medico = P.id_medico JOIN Congressos C ON P.id_congresso = C.id_congresso WHERE EXTRACT(YEAR FROM C.data_inicio) = 2023 AND M.id_medico NOT IN ( SELECT P2.id_medico FROM Participacoes P2 JOIN Congressos C2 ON P2.id_congresso = C2.id_congresso WHERE EXTRACT(YEAR FROM C2.data_inicio) = 2024 );

Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

A consulta principal usa JOIN e EXTRACT(YEAR FROM C.data_inicio) = 2023 para formar o conjunto A de médicos que participaram de congressos iniciados em 2023. O DISTINCT evita nomes repetidos quando um médico teve várias participações.

A subquery retorna o conjunto B de médicos com congressos iniciados em 2024. O predicado NOT IN remove do conjunto A todos os elementos que aparecem em B, realizando a diferença de conjuntos \(A - B\).

Importante: o campo id_medico em Participacoes integra a PRIMARY KEY, logo é NOT NULL, eliminando a clássica falha lógica do NOT IN causada por valores nulos. Assim, a consulta está correta para o enunciado.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo