0Pricing
SQL Academy · Aula

Funcionários e gerentes

Um exemplo clássico de hierarquia.

Funcionários e gerentes é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

O que é uma junção da tabela consigo mesma

Uma junção da tabela consigo mesma ocorre quando uma tabela é associada a si mesma. Isso pode parecer incomum, mas é extremamente útil quando as linhas de uma tabela têm uma relação com outras linhas da mesma tabela.

O exemplo clássico é uma tabela de funcionários na qual cada funcionário pode ter um gerente — e esse gerente também é um funcionário armazenado na mesma tabela.

A tabela de funcionários

Vamos criar uma tabela simples employees. Cada funcionário tem um id, um name e um manager_id que aponta para outra linha da mesma tabela.

Quando manager_id é NULL, o funcionário não tem gerente — está no topo da hierarquia (por exemplo, o CEO).

CREATE TABLE employees (
  id         INT PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  manager_id INT REFERENCES employees(id)
);

Inserindo dados de exemplo

Vamos preencher a tabela com uma pequena hierarquia empresarial. Alice é a CEO (não tem gerente). Bob e Carol se reportam a Alice. Dave e Eve se reportam a Bob.

INSERT INTO employees (id, name, manager_id) VALUES
  (1, 'Alice',   NULL),
  (2, 'Bob',     1),
  (3, 'Carol',   1),
  (4, 'Dave',    2),
  (5, 'Eve',     2),
  (6, 'Frank',   3);

Consultando sem uma junção

Se simplesmente selecionarmos todas as linhas, veremos os números brutos de manager_id — não os nomes dos gerentes. Isso é difícil de ler e não é útil para os usuários finais.

SELECT id, name, manager_id
FROM employees;

Escrevendo a junção da tabela consigo mesma

Para exibir o nome do gerente ao lado de cada funcionário, associamos a tabela employees a si mesma. Atribuímos um nome alternativo diferente a cada cópia: e para o funcionário e m para o gerente.

A condição da junção conecta o manager_id do funcionário ao id do gerente.

SELECT
  e.name   AS employee,
  m.name   AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

Incluindo funcionários sem gerente

A INNER JOIN acima oculta Alice porque o manager_id dela é NULL — não há uma linha correspondente no lado direito. Para incluir todos (até mesmo o funcionário no topo da hierarquia), use uma LEFT JOIN.

Alice aparecerá com NULL na coluna do gerente.

SELECT
  e.name              AS employee,
  m.name              AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Usando COALESCE para facilitar a leitura

NULL na coluna do gerente pode causar confusão. Podemos usar COALESCE para substituir NULL por um rótulo legível, como 'Sem gerente', deixando o resultado mais claro para relatórios.

SELECT
  e.name                              AS employee,
  COALESCE(m.name, 'No Manager')      AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY manager, employee;

Encontrando subordinados diretos

Podemos inverter a consulta para perguntar: quem se reporta a um gerente específico? Isso é chamado de encontrar subordinados diretos. Aqui, encontramos todos os funcionários que se reportam diretamente a Alice (ID = 1).

SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;

Contando subordinados por gerente

Combinar uma junção da tabela consigo mesma com GROUP BY e COUNT permite ver quantos subordinados diretos cada gerente tem. Isso é útil para analisar a carga de trabalho.

SELECT
  m.name          AS manager,
  COUNT(e.id)     AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;

Dois níveis de profundidade

Para ver dois níveis da hierarquia ao mesmo tempo — o funcionário, seu gerente e o gerente do seu gerente — podemos associar a tabela uma terceira vez. Cada junção adiciona outro nível à hierarquia.

SELECT
  e.name   AS employee,
  m.name   AS manager,
  gm.name  AS grand_manager
FROM employees e
LEFT JOIN employees m  ON e.manager_id  = m.id
LEFT JOIN employees gm ON m.manager_id  = gm.id;

Quando as junções da tabela consigo mesma têm limitações

As junções da tabela consigo mesma funcionam bem para hierarquias fixas e rasas (de 1 a 3 níveis). Se a profundidade for desconhecida ou ilimitada — como em um organograma empresarial que pode ter 10 níveis — você precisará de CTE recursivas.

Para a maioria das consultas práticas sobre funcionários e gerentes, a abordagem de junção da tabela consigo mesma apresentada nesta lição é a ferramenta adequada.

Verificação rápida

Teste sua compreensão das junções da tabela consigo mesma e da hierarquia de funcionários e gerentes.

Recapitulação da lição

Nesta lição, você aprendeu a usar uma junção da tabela consigo mesma para modelar e consultar uma hierarquia clássica de funcionários e gerentes armazenada em uma única tabela.

Principais pontos:

  • Uma junção da tabela consigo mesma associa uma tabela a si mesma usando dois nomes alternativos diferentes.
  • A condição da junção conecta manager_id a id na mesma tabela.
  • Use INNER JOIN para ver apenas os funcionários que têm um gerente e LEFT JOIN para incluir todos.
  • COALESCE pode substituir valores NULL do gerente por um rótulo legível.
  • Para hierarquias de profundidade ilimitada, considere usar CTE recursivas.

Perguntas Frequentes

A aula “Funcionários e gerentes” é grátis?

Sim — o texto completo de “Funcionários e gerentes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Funcionários e gerentes”?

Um exemplo clássico de hierarquia. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Funcionários e gerentes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O que é uma autojunção
  2. Funcionários e gerentes
  3. Comparando linhas na mesma tabela
  4. Limitações das autojunções
← Voltar para SQL Academy