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.cityper assicurarsi che entrambi i dipendenti si trovino nella stessa cittàe.firstname <> e2.firstname AND e1.lastname <> e2.lastnameper garantire chee1ee2non 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.