Använda alias för att hantera frågor med samma tabell
Det är vanligt att tabeller innehåller hierarkisk data, till exempel anställda och chefer som också är anställda. Då kan det vara användbart att joina en tabell med sig själv på olika kolumner. Metoden .alias() skapar en kopia av en tabell och gör detta möjligt. Eftersom det är samma tabell räcker det med en where-sats för att ange joinvillkoret.
Här använder du .alias() för att bygga en fråga som joinar tabellen employees med sig själv, för att ta reda på vem alla rapporterar till.
Den här övningen är en del av kursen
Introduktion till databaser i Python
Övningsinstruktioner
- Spara ett alias av tabellen
employeessommanagers. Gör det genom att använda metoden.alias()påemployees. - Bygg en fråga som väljer den anställdes
nameoch chefensname. Chefensnameär redan valt. Användlabelför att märka kolumnennameiemployeessom'employee'. - Lägg till en
where-sats istmtför att matcha där kolumnenidi tabellenmanagersmotsvarar kolumnenmgri tabellenemployees. - Sortera resultatet efter kolumnen
namei tabellenmanagers. - Kör frågan och lagra alla resultat. Den koden är redan skriven. Skicka in svaret för att skriva ut namnen på cheferna och alla deras anställda.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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)