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 a 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.
CREATE VIEW V_Medicos_Congressos AS
SELECT M.nome AS medico, C.nome AS congresso, C.local, P.papel
FROM Medicos M
JOIN Participacoes P ON M.id_medico = P.id_medico
JOIN Congressos C ON P.id_congresso = C.id_congresso;
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
);