Self Join
Em PostgreSQL, uma auto-junção (self-join) é um tipo especial de junção em que uma tabela é combinada com ela mesma. Isso pode ser útil em situações onde você tem dados relacionados dentro da mesma tabela. Para realizar uma auto-junção, você precisa usar aliases para diferenciar entre as instâncias da mesma tabela.
Aqui está a sintaxe básica de uma auto-junção:
SELECT t1.coluna, t2.coluna
FROM tabela AS t1
JOIN tabela AS t2
ON t1.coluna_de_juncao = t2.coluna_de_juncao;
Neste exemplo:
tabelaé o nome da tabela que você está auto-juntando.t1et2são aliases que você usa para diferenciar entre as duas instâncias da mesma tabela.coluna_de_juncaoé a coluna na tabela que é usada como base para a junção.
Aqui está um exemplo prático de uma auto-junção. Suponha que você tenha uma tabela chamada empregados com colunas id e supervisor_id, onde supervisor_id é a chave estrangeira que se relaciona com a coluna id na mesma tabela para indicar o supervisor de cada empregado. Você pode usar uma auto-junção para encontrar os nomes dos empregados e seus supervisores:
SELECT e1.nome AS empregado, e2.nome AS supervisor
FROM empregados AS e1
LEFT JOIN empregados AS e2
ON e1.supervisor_id = e2.id;
Neste exemplo, e1 é um alias para a tabela empregados que representa os empregados, e e2 é um alias para a mesma tabela que representa os supervisores. A cláusula LEFT JOIN é usada para garantir que mesmo os empregados sem supervisores sejam incluídos no resultado. A auto-junção é realizada comparando supervisor_id em e1 com id em e2.
