Resumo :neste tutorial, você aprenderá sobre um tipo especial de junção chamado SQLite self-join que permite unir a tabela a ela mesma.
Observe que você deve estar familiarizado com
INNER JOIN e LEFT JOIN cláusulas antes de prosseguir com este tutorial. Introdução à autojunção SQLite
A auto-junção é um tipo especial de junção que permite unir uma tabela a ela mesma usando
LEFT JOIN ou INNER JOIN cláusula. Você usa a associação automática para criar um conjunto de resultados que une as linhas com as outras linhas na mesma tabela. Como não é possível fazer referência à mesma tabela mais de uma em uma consulta, você precisa usar um alias de tabela para atribuir um nome diferente à tabela ao usar a associação automática.
A autojunção compara valores de colunas iguais ou diferentes na mesma tabela. Apenas uma tabela está envolvida na auto-junção.
Você costuma usar a associação automática para consultar o relacionamento pai/filho armazenado em uma tabela ou para obter totais em execução.
Exemplos de autojunção SQLite
Usaremos os
employees tabela no banco de dados de exemplo para demonstração.
Os
employees A tabela armazena não apenas dados de funcionários, mas também dados organizacionais. O ReportsTo coluna especifica a relação de subordinação entre os funcionários. Se um funcionário se reportar a um gerente, o valor do
ReportsTo coluna da linha do funcionário é igual ao valor do EmployeeId coluna da linha do gerente. Caso um funcionário não se reporte a ninguém, o ReportsTo coluna é NULL . Para obter as informações sobre quem é o subordinado direto de quem, você usa a seguinte declaração:
SELECT m.firstname || ' ' || m.lastname AS 'Manager',
e.firstname || ' ' || e.lastname AS 'Direct report'
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;Code language: SQL (Structured Query Language) (sql) Tente
A instrução usou o
INNER JOIN cláusula para se juntar aos employees para si mesmo. Os employees table tem duas funções:funcionários e gerentes. Porque usamos o
INNER JOIN cláusula para se juntar aos employees tabela para si mesmo, o conjunto de resultados não tem a linha cuja coluna do gerenciador contém um NULL valor. Observe que o operador de concatenação
|| concatena várias strings em uma única string. No exemplo, usamos o operador de concatenação para os nomes completos dos funcionários concatenando o primeiro nome, espaço e sobrenome. Caso você queira consultar o CEO que não se reporta a ninguém, você precisa alterar o
INNER JOIN cláusula para LEFT JOIN cláusula na consulta acima.
Andrew Adams é o CEO porque ele não denuncia ninguém. Você pode usar a técnica de self-join para encontrar os funcionários localizados na mesma cidade da seguinte consulta:
SELECT DISTINCT
e1.city,
e1.firstName || ' ' || e1.lastname AS fullname
FROM
employees e1
INNER JOIN employees e2 ON e2.city = e1.city
AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
e1.city;Code language: SQL (Structured Query Language) (sql) Tente
A condição de junção tem duas expressões:
e1.city = e2.citypara garantir que ambos os funcionários estejam localizados na mesma cidadee.firstname <> e2.firstname AND e1.lastname <> e2.lastnamepara garantir quee1ee2não são o mesmo funcionário com a suposição de que não há funcionários com o mesmo nome e sobrenome.
Neste tutorial, mostramos como usar a técnica de auto-junção SQLite para unir uma tabela a ela mesma.