CommencezCommencez gratuitement

Utiliser un alias pour gérer une autojointure sur la même table

Il arrive souvent que vous ayez des tables qui contiennent des données hiérarchiques, comme des employés et des gestionnaires qui sont aussi des employés. Pour cette raison, vous pourriez vouloir joindre une table à elle-même sur des colonnes différentes. La méthode .alias(), qui crée une copie d'une table, aide à réaliser cette tâche. Comme il s'agit de la même table, vous n'avez besoin que d'une clause where pour préciser la condition de jointure.

Ici, vous utiliserez la méthode .alias() pour construire une requête qui joint la table employees à elle-même afin de déterminer à qui chacun se rapporte.

Cette activité fait partie du cours

Introduction aux bases de données en Python

Voir le cours

Instructions de l’exercice

  • Enregistrez un alias de la table employees sous le nom managers. Pour ce faire, appliquez la méthode .alias() à employees.
  • Construisez une requête pour sélectionner le name de l'employé et le name de son gestionnaire. Le name du gestionnaire a déjà été sélectionné pour vous. Utilisez label pour étiqueter la colonne name de employees comme 'employee'.
  • Ajoutez à stmt une clause where pour faire correspondre la colonne id de la table managers à la colonne mgr de la table employees.
  • Triez l'instruction par la colonne name de la table managers.
  • Exécutez l'instruction et stockez tous les résultats. Ce code est déjà écrit. Soumettez la réponse pour afficher les noms des gestionnaires et de tous leurs employés.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Make an alias of the employees table: managers
managers = ____

# Build a query to select names of managers and their employees: stmt
stmt = select(
    [managers.columns.name.label('manager'),
     ____]
)

# Match managers id with employees mgr: stmt_matched
stmt_matched = stmt.where(managers.columns.id == ____)

# Order the statement by the managers name: stmt_ordered
stmt_ordered = stmt_matched.order_by(____)

# Execute statement: results
results = connection.execute(stmt_ordered).fetchall()

# Print records
for record in results:
    print(record)

Modifier et exécuter le code