A partir do código SQL (Structured Query Language) acima, ju...
SELECT d.nome, d.data_contratacao, c.nome, c.data_contratacao
FROM dentista d JOIN dentista c
ON (d.cro_chefe = c.cro)
WHERE d.data_contratacao < c.data_contratacao;
A partir do código SQL (Structured Query Language) acima, julgue o item subsecutivo.
A consulta mostra o nome e a data de contratação de todos os dentistas que foram contratados antes de seus chefes,
contendo ainda o nome e a data de contratação de seus chefes.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: C - Certo
Vamos desvendar juntos o porquê dessa alternativa estar correta. Ao examinar o comando SQL dado, notamos que ele realiza uma operação de JOIN (junção) na tabela dentista consigo mesma. Isso é feito com o intuito de correlacionar cada dentista com seu respectivo chefe, baseando-se na condição d.cro_chefe = c.cro
, onde presumimos que cro_chefe
é a chave de referência para o cro
(registro profissional) do chefe do dentista na mesma tabela.
A cláusula WHERE é utilizada para filtrar essa junção, selecionando apenas as linhas onde a data de contratação do dentista (d.data_contratacao
) é anterior à data de contratação de seu chefe (c.data_contratacao
). Isso significa que a consulta está projetada para retornar os nomes e as datas de contratação dos dentistas que foram contratados antes de seus respectivos chefes, cumprindo exatamente o que foi afirmado na questão.
Além disso, é importante observar que a consulta solicita os nomes e datas de contratação tanto do dentista quanto do chefe, o que é alcançado pelo SELECT que lista d.nome, d.data_contratacao, c.nome, c.data_contratacao
. Dessa forma, a saída da consulta satisfaz integralmente a descrição fornecida no enunciado, o que justifica a resposta como correta.
Ao entender essa questão, você exercita conceitos essenciais de SQL como a realização de junções de tabelas e a aplicação de filtros condicionais. Essas são habilidades fundamentais para a manipulação e consulta eficiente de bancos de dados relacionais, que são frequentemente testadas em concursos públicos na área de tecnologia da informação, especialmente aqueles com foco em funções que envolvem o trabalho com Banco de Dados.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
De fato o gabarito é certo. Mas não foi tão fácil enchergar isso de primeira. Uma dica é pensar na tabela dentista com os campos apresentado na questão.
A tabela dentista teria os seguintes campos DENTISTA(CRO, NOME, DATA_CONTRATACAO, CRO_CHEFE) ou seja, para cada dentista XPTO terá o CRO de seu chefe associado a ele. E o CRO do próprio chefe está na tabela.
Então poderiamos ter a seguinte situação
CRO | NOME | DATA_CONTRATACAO | CRO_CHEFE
1 | ANA | 20/12/2016 | 4
2 | BOB | 01/05/2017 | 4
3 | JO | 30/10/2016 | 4
4 | EMY | 02/03/2017 | NULL
Logo os nomes que seriam retornados juntamente com os demais campos seriam ANA e JO
Complementando a resposta de Wesley Nunes:
CREATE TABLE dentista (
cro INTEGER PRIMARY KEY,
nome TEXT NOT NULL,
data_contratacao DATE NOT NULL,
cro_chefe INTEGER,
FOREIGN KEY (cro_chefe) REFERENCES dentista (cro) ON UPDATE CASCADE
);
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo