SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Auto-junção SQLite


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 cidade
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname para garantir que e1 e e2 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.