Alias gebruiken voor joins op dezelfde tabel
Vaak heb je tabellen met hiërarchische gegevens, zoals werknemers en managers die ook werknemers zijn. Daarom kan het handig zijn om een tabel met zichzelf te joinen op verschillende kolommen. De methode .alias(), die een kopie van een tabel maakt, helpt je daarbij. Omdat het om dezelfde tabel gaat, heb je alleen een where-clausule nodig om de join-voorwaarde te specificeren.
Hier gebruik je de methode .alias() om een query op te bouwen die de tabel employees met zichzelf joint om te bepalen aan wie iedereen rapporteert.
Deze oefening maakt deel uit van de cursus
Introductie tot databases in Python
Oefeninstructies
- Sla een alias van de tabel
employeesop alsmanagers. Doe dit door de methode.alias()toe te passen opemployees. - Bouw een query om de
namevan de werknemer en denamevan de manager te selecteren. Denamevan de manager is al voor je geselecteerd. Gebruiklabelom de kolomnamevanemployeeste labelen als'employee'. - Voeg een where-clausule toe aan
stmtzodat de kolomidvan de tabelmanagersovereenkomt met de kolommgrvan de tabelemployees. - Sorteer de query op de kolom
namevan de tabelmanagers. - Voer de query uit en sla alle resultaten op. Deze code is al geschreven. Verzamel het Antwoord om de namen van de managers en al hun werknemers af te drukken.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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)