Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025

Banco de DadosConsultas e Comandos em SQL
Código
fc150335
Banca
FCC
Órgão
TRT 6
Ano
2025
Cargo
AJ TRT6
Considere que as tabelas, relacionamentos, atributos e restrições utilizadas no comando abaixo existem em um banco de dados Oracle aberto e em condições ideais.   SELECT d.departamento_id, d.departamento_nome, d.local_id, COUNT (e.colaborador_id) FROM colaboradores e RIGHT OUTER JOIN departamentos d ON e.departamento_id = d.departamento_id GROUP BY d.departamento_id, d.departamento_nome, d.local_id;   Este comando
  1. Aestá incorreto, pois não existe a instrução RIGHT OUTER JOIN no Oracle, mas sim OUTER JOIN.
  2. Bexibirá o id, nome, local e número de colaboradores de cada departamento, incluindo aqueles sem colaboradores.
  3. Cexibirá o id, nome, local dos departamentos e o id dos colaboradores agrupando os colaboradores por departamento.
  4. Dcontará o número total de colaboradores e exibirá como se fosse de cada departamento, juntamente com o id, nome e local do departamento, pois há um erro na junção.
  5. Eexibirá o nome, local e número de colaboradores de cada departamento somente se a instrução RIGHT OUTER JOIN for trocada por LEFT OUTER JOIN.
Revelar gabarito e comentário

GabaritoB — exibirá o id, nome, local e número de colaboradores de cada departamento, incluindo aqueles sem colaboradores.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Consultas SQL: RIGHT OUTER JOIN e agrupamento com COUNT

Gabarito: letra B. O comando SELECT d.departamento_id, d.departamento_nome, d.local_id, COUNT(e.colaborador_id) FROM colaboradores e RIGHT OUTER JOIN departamentos d ON e.departamento_id = d.departamento_id GROUP BY d.departamento_id, d.departamento_nome, d.local_id; exibirá o id, nome, local e o número de colaboradores de cada departamento, incluindo aqueles sem colaboradores. O RIGHT OUTER JOIN preserva todos os registros da tabela à direita (departamentos), mesmo que não haja correspondência na tabela à esquerda (colaboradores), e o COUNT(e.colaborador_id) conta apenas os colaboradores que existem, retornando 0 para departamentos sem colaboradores.

O RIGHT OUTER JOIN é uma das variações do OUTER JOIN (junção externa) e é totalmente suportado pelo Oracle. A diferença fundamental entre os tipos de junção está em quais linhas são preservadas quando não há correspondência entre as tabelas. No INNER JOIN, apenas as linhas com correspondência em ambas as tabelas são retornadas. No LEFT OUTER JOIN, todas as linhas da tabela à esquerda são preservadas, mesmo sem correspondência na direita. No RIGHT OUTER JOIN, todas as linhas da tabela à direita são preservadas, mesmo sem correspondência na esquerda. No FULL OUTER JOIN, todas as linhas de ambas as tabelas são preservadas.

Nesta consulta, a tabela departamentos é a tabela à direita da junção. Portanto, todos os departamentos aparecerão no resultado, independentemente de terem ou não colaboradores associados. Para cada departamento, a função de agregação COUNT(e.colaborador_id) contará quantos colaboradores existem naquele departamento. Como a coluna e.colaborador_id será NULL para departamentos sem colaboradores, o COUNT retornará 0 para esses casos, pois a função COUNT ignora valores NULL quando recebe uma coluna específica como argumento.

A cláusula GROUP BY agrupa os resultados por d.departamento_id, d.departamento_nome, d.local_id, garantindo que cada departamento apareça uma única vez no resultado, com a contagem de seus colaboradores. A consulta está sintaticamente correta e semanticamente adequada ao objetivo de listar todos os departamentos com suas respectivas contagens de colaboradores.

A pegadinha desta questão está em confundir o comportamento do RIGHT OUTER JOIN com o LEFT OUTER JOIN ou com o INNER JOIN. O candidato pode pensar que, por ser um RIGHT OUTER JOIN, a tabela colaboradores é a que terá todas as linhas preservadas, mas é o contrário: a tabela à direita (departamentos) é a que tem todas as linhas preservadas. Além disso, é comum confundir o COUNT(e.colaborador_id) com um COUNT(*), que contaria também as linhas com NULL, mas aqui a contagem é apenas dos colaboradores existentes.

OUTER JOIN
  • 1LEFT
    • Preserva tabela à esquerda
  • 2RIGHT
    • Preserva tabela à direita
  • 3FULL
    • Preserva ambas
  • 4COUNT(coluna)
    • Ignora NULL
    • Conta apenas existentes
  • 5Consulta (RIGHT JOIN departamentos)
    • Todos os departamentos
    • COUNT(colaborador_id)
      • Com colaboradores: nº
      • Sem colaboradores: 0
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que o Oracle não possui a instrução RIGHT OUTER JOIN, mas sim OUTER JOIN. Isso é falso: o Oracle suporta RIGHT OUTER JOIN, LEFT OUTER JOIN e FULL OUTER JOIN. A sintaxe OUTER JOIN sozinha não é válida; é necessário especificar o lado (LEFT, RIGHT ou FULL). A alternativa confunde a sintaxe do Oracle com a de outros SGBDs ou com uma versão mais antiga da sintaxe.

Alternativa B — ✅ Correta ⟵ GABARITO

A consulta exibirá o id, nome, local e o número de colaboradores de cada departamento, incluindo aqueles sem colaboradores. O RIGHT OUTER JOIN preserva todos os departamentos, e o COUNT(e.colaborador_id) conta apenas os colaboradores existentes, retornando 0 para departamentos sem colaboradores. O GROUP BY agrupa os resultados por departamento, garantindo uma linha por departamento.

Alternativa C — ❌ Incorreta

Afirma que a consulta exibirá o id dos colaboradores agrupados por departamento. Isso está errado: a consulta não seleciona e.colaborador_id na lista de colunas, apenas o utiliza dentro da função COUNT. O resultado exibirá o id, nome e local do departamento, além da contagem de colaboradores, não o id de cada colaborador.

Alternativa D — ❌ Incorreta

Afirma que a consulta contará o número total de colaboradores e exibirá como se fosse de cada departamento, devido a um erro na junção. Isso é falso: a junção está correta e o GROUP BY garante que a contagem seja feita por departamento, não o total geral. O COUNT(e.colaborador_id) é calculado para cada grupo de departamento, não para o conjunto todo.

Alternativa E — ❌ Incorreta

Afirma que a consulta exibirá o nome, local e número de colaboradores de cada departamento somente se o RIGHT OUTER JOIN for trocado por LEFT OUTER JOIN. Isso é falso: o RIGHT OUTER JOIN já produz o resultado desejado, preservando todos os departamentos. Trocar por LEFT OUTER JOIN mudaria a tabela preservada (passaria a preservar colaboradores), o que não atenderia ao objetivo de listar todos os departamentos.

Gabarito: letra B

Link permanente: /questoes/fc150335