Menu
Coddy logo textTech

Self join

Parte da seção Fundamentos do Journey de SQL da Coddy — lição 46 de 72.

Self-joins são tipos diferentes de junções. Até agora, falamos sobre junções de múltiplas tabelas, mas self-joins são unidos à mesma tabela. Um exemplo clássico seria uma tabela de employees.

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

Todo funcionário tem um gerente, exceto o gerente de nível mais alto, e todo gerente também é um funcionário.

O problema: Para cada funcionário, queremos saber o nome do gerente.

SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id

Nós fazemos o join entre a mesma tabela, exceto que em uma vez a chamamos de e1 e na segunda vez ela é e2. O join ocorre entre os campos employee_id e manager_id.

O resultado:

employee_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

Desafio

Médio

Tabelas e colunas disponíveis:

  • <strong>friends</strong>: <strong>id</strong>, <strong>name</strong>, <strong>friend_id</strong>

Encontre pares de amigos que são amigos mútuos (a amizade mútua existe quando o friend_id da pessoa A aponta para a pessoa B E o friend_id da pessoa B aponta para a pessoa A). Exiba os nomes de ambos os amigos em uma única linha. Nomeie as colunas como friend1 e friend2.

Nota: Inclua na cláusula WHERE o critério friend1.id < friend2.id para que não inclua pares duplicados 

Folha de consulta

Self-joins permitem que você junte uma tabela a si mesma usando aliases de tabela. Isso é útil quando você precisa comparar linhas dentro da mesma tabela ou estabelecer relacionamentos entre registros na mesma tabela.

Sintaxe básica de self-join:

SELECT columns
FROM table_name AS alias1
JOIN table_name AS alias2 ON alias1.column = alias2.column

Exemplo com funcionários e gerentes:

SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id

Os pontos principais:

  • Use aliases diferentes (ex: e1, e2) para a mesma tabela
  • A condição de join conecta campos relacionados entre os aliases
  • Útil para dados hierárquicos, como relacionamentos entre funcionário e gerente

Experimente você mesmo

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos