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.
  • t1 e t2 sã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.