CommencerCommencer gratuitement

Utiliser un alias pour gérer les jointures sur une même table

Il est fréquent d’avoir des tables avec des données hiérarchiques, par exemple des employés et des managers qui sont eux aussi des employés. Vous pouvez donc vouloir faire une jointure d’une table avec elle-même sur des colonnes différentes. La méthode .alias(), qui crée une copie d’une table, permet de réaliser cette opération. Comme il s’agit de la même table, il suffit d’une clause where pour préciser la condition de jointure.

Ici, vous allez utiliser la méthode .alias() pour construire une requête qui joint la table employees avec elle-même afin de déterminer à qui chacun rend compte.

Cet exercice fait partie du cours

Introduction aux bases de données en Python

Afficher le cours

Instructions

  • 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 manager. Le name du manager a déjà été sélectionné pour vous. Utilisez label pour étiqueter la colonne name de employees en 'employee'.
  • Ajoutez une clause where à stmt pour faire correspondre la colonne id de la table managers avec 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 managers et de tous leurs employés.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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