FCC - 2025 - Analista Judiciário (TRT 6ª Região)
Em um banco de dados Oracle aberto e em condições ideais, o comando utilizado para adicionar uma coluna custas do tipo NUMBER (10,2) à tabela processo, estabelecendo uma restrição que impede que valores de custas menores ou iguais a 10000 sejam inseridos, é
ALTER TABLE processo ADD custas NUMBER (10,2) CONSTRAINT processo_custas_ck CHECK (custas > 10000);
FCC - 2025 - Analista Judiciário (TRT 6ª Região)
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
- A - está incorreto, pois não existe a instrução RIGHT OUTER JOIN no Oracle, mas sim OUTER JOIN.
- B - exibirá o id, nome, local e número de colaboradores de cada departamento, incluindo aqueles sem colaboradores.
- C - exibirá o id, nome, local dos departamentos e o id dos colaboradores agrupando os colaboradores por departamento.
- D - contará 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.
- E - exibirá 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.
Vamos analisar essa questão de banco de dados juntos. A alternativa correta é a B.
Para entender o porquê, vamos desmembrar o comando SQL em três partes principais e ver o que cada uma faz:
1. A Junção: RIGHT OUTER JOIN
- O trecho
FROM colaboradores e RIGHT OUTER JOIN departamentos dé o coração dessa questão. - Em um
RIGHT JOIN, o banco de dados garante que todas as linhas da tabela à direita do comando (neste caso,departamentos) sejam exibidas no resultado final, mesmo que não haja correspondência na tabela à esquerda (colaboradores). - Isso significa que todos os departamentos aparecerão, até mesmo aqueles que ainda não têm nenhum colaborador alocado.
2. O Agrupamento: GROUP BY
- O comando
GROUP BY d.departamento_id, d.departamento_nome, d.local_idjunta os dados para que não tenhamos linhas repetidas para o mesmo departamento. Ele cria "grupos" para cada departamento único.
3. A Contagem: COUNT(e.colaborador_id)
- Para cada "grupo" de departamento criado acima, a função
COUNTvai contar quantos IDs de colaboradores existem ali. - Se um departamento não tiver colaboradores (trazido pelo
RIGHT JOIN), o valor dee.colaborador_idserá nulo (NULL). A funçãoCOUNT(coluna)ignora valores nulos, retornando0.
Por que as outras alternativas estão erradas?
- A: ❌ Incorreta. O Oracle Database suporta perfeitamente as cláusulas
LEFT OUTER JOIN,RIGHT OUTER JOINeFULL OUTER JOIN, que são padrões da linguagem SQL. - C: ❌ Incorreta. O comando
SELECTpede oCOUNT (e.colaborador_id)(a quantidade), e não o ID individual de cada colaborador. - D: ❌ Incorreta. O
GROUP BYgarante que a contagem seja feita por departamento, e não o total geral de todos os colaboradores do banco. A junção também não contém erros. - E: ❌ Incorreta. Se trocássemos por
LEFT OUTER JOIN, a tabela prioritária passaria a sercolaboradores. O comando exibiria todos os colaboradores (incluindo os sem departamento, se houver), mas ocultaria os departamentos vazios.