Riepilogo :in questo tutorial imparerai a conoscere un tipo speciale di join chiamato SQLite self-join che ti consente di unire la tabella a se stessa.
Tieni presente che dovresti avere familiarità con INNER JOIN
e LEFT JOIN
clausole prima di procedere con questo tutorial.
Introduzione al self-join di SQLite
Il self-join è un tipo speciale di join che ti consente di unire una tabella a se stessa usando LEFT JOIN
o INNER JOIN
clausola. Utilizzi l'unione automatica per creare un set di risultati che unisca le righe con le altre righe all'interno della stessa tabella.
Poiché non è possibile fare riferimento alla stessa tabella più di una in una query, è necessario utilizzare un alias di tabella per assegnare alla tabella un nome diverso quando si utilizza l'unione automatica.
Il self-join confronta i valori delle stesse colonne o di colonne diverse nella stessa tabella. Solo una tabella è coinvolta nel self-join.
Utilizzi spesso il self-join per interrogare la relazione genitori/figli archiviata in una tabella o per ottenere totali parziali.
Esempi di unione automatica SQLite
Useremo i employees
tabella nel database di esempio per la dimostrazione.
I employees
la tabella memorizza non solo i dati dei dipendenti ma anche i dati dell'organizzazione. Il ReportsTo
la colonna specifica la relazione di rendicontazione tra i dipendenti.
Se un dipendente segnala a un manager, il valore di ReportsTo
colonna della riga del dipendente è uguale al valore di EmployeeId
colonna della riga del manager. Nel caso in cui un dipendente non segnali a nessuno, il ReportsTo
la colonna è NULL
.
Per ottenere le informazioni su chi è il diretto riporto di chi, utilizza la seguente dichiarazione:
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)
Provalo
L'istruzione utilizzava il INNER JOIN
clausola per entrare a far parte dei employees
a se stesso. I employees
table ha due ruoli:dipendenti e manager.
Perché abbiamo usato il INNER JOIN
clausola per entrare a far parte dei employees
tabella a se stessa, il set di risultati non ha la riga la cui colonna manager contiene un NULL
valore.
Nota che l'operatore di concatenazione ||
concatena più stringhe in un'unica stringa. Nell'esempio, utilizziamo l'operatore di concatenazione per dai nomi completi dei dipendenti concatenando il nome, lo spazio e il cognome.
Nel caso tu voglia interrogare il CEO che non riporta a nessuno, devi cambiare il INNER JOIN
clausola su LEFT JOIN
clausola nella query precedente.
Andrew Adams
è l'amministratore delegato perché non segnala nessuno.
Puoi utilizzare la tecnica di adesione automatica per trovare i dipendenti che si trovano nella stessa città come nella seguente query:
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)
Provalo
La condizione di unione ha due espressioni:
e1.city = e2.city
per assicurarsi che entrambi i dipendenti si trovino nella stessa cittàe.firstname <> e2.firstname AND e1.lastname <> e2.lastname
per garantire chee1
ee2
non sono lo stesso dipendente con il presupposto che non ci siano dipendenti che hanno lo stesso nome e cognome.
In questo tutorial, ti abbiamo mostrato come utilizzare la tecnica di unione automatica di SQLite per unire una tabella a se stessa.