Résumé :dans ce didacticiel, vous découvrirez un type spécial de jointure appelé auto-jointure SQLite qui vous permet de joindre une table à elle-même.
Notez que vous devez être familiarisé avec INNER JOIN
et LEFT JOIN
clauses avant d'aller de l'avant avec ce didacticiel.
Introduction à l'auto-jointure SQLite
L'auto-jointure est un type spécial de jointures qui vous permet de joindre une table à elle-même en utilisant soit LEFT JOIN
ou INNER JOIN
clause. Vous utilisez l'auto-jointure pour créer un ensemble de résultats qui joint les lignes avec les autres lignes dans la même table.
Étant donné que vous ne pouvez pas faire référence à la même table plus d'une fois dans une requête, vous devez utiliser un alias de table pour attribuer un nom différent à la table lorsque vous utilisez l'auto-jointure.
La jointure réflexive compare les valeurs de colonnes identiques ou différentes dans la même table. Une seule table est impliquée dans l'auto-jointure.
Vous utilisez souvent l'auto-jointure pour interroger la relation parents/enfants stockée dans une table ou pour obtenir des totaux cumulés.
Exemples d'auto-jointure SQLite
Nous utiliserons les employees
table dans l'exemple de base de données pour la démonstration.
Les employees
La table stocke non seulement les données des employés, mais également les données de l'organisation. Le ReportsTo
colonne spécifie la relation hiérarchique entre les employés.
Si un employé relève d'un responsable, la valeur de ReportsTo
colonne de la ligne de l'employé est égale à la valeur de EmployeeId
colonne de la ligne du responsable. Dans le cas où un employé ne rend compte à personne, le ReportsTo
la colonne est NULL
.
Pour obtenir des informations sur qui est le subordonné direct de qui, vous utilisez la déclaration suivante :
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)
Essayez-le
L'instruction a utilisé le INNER JOIN
clause d'adhésion aux employees
à lui-même. Les employees
table a deux rôles :employés et gestionnaires.
Parce que nous avons utilisé le INNER JOIN
clause d'adhésion aux employees
table à elle-même, le jeu de résultats n'a pas la ligne dont la colonne manager contient un NULL
valeur.
Notez que l'opérateur de concaténation ||
concatène plusieurs chaînes en une seule chaîne. Dans l'exemple, nous utilisons l'opérateur de concaténation pour partir des noms complets des employés en concaténant le prénom, l'espace et le nom.
Si vous souhaitez interroger le PDG qui ne relève de personne, vous devez modifier le INNER JOIN
clause à LEFT JOIN
clause dans la requête ci-dessus.
Andrew Adams
est le PDG car il ne signale personne.
Vous pouvez utiliser la technique d'auto-jointure pour trouver les employés situés dans la même ville que la requête suivante :
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)
Essayez-le
La condition de jointure a deux expressions :
e1.city = e2.city
pour s'assurer que les deux employés sont situés dans la même villee.firstname <> e2.firstname AND e1.lastname <> e2.lastname
pour s'assurer quee1
ete2
ne sont pas le même employé en supposant qu'il n'y a pas d'employés qui ont le même prénom et le même nom.
Dans ce tutoriel, nous vous avons montré comment utiliser la technique d'auto-jointure SQLite pour joindre une table à elle-même.