SQLite
 sql >> Base de données >  >> RDS >> SQLite

Auto-jointure SQLite

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 ville
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname pour s'assurer que e1 et e2 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.