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.city
para garantir que ambos os funcionários estejam localizados na mesma cidadee.firstname <> e2.firstname AND e1.lastname <> e2.lastname
para garantir quee1
ee2
nã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.