Używanie aliasów w zapytaniach z łączeniem tabeli ze sobą
Tabele często zawierają dane hierarchiczne – na przykład pracowników i menedżerów, którzy sami są pracownikami. W takich przypadkach przydatne jest złączenie tabeli z samą sobą, ale po różnych kolumnach. Metoda .alias() tworzy kopię tabeli i umożliwia wykonanie takiego złączenia. Ponieważ operujemy na tej samej tabeli, wystarczy klauzula where określająca warunek złączenia.
W tym ćwiczeniu użyjesz metody .alias(), aby zbudować zapytanie łączące tabelę employees ze sobą i sprawdzić, kto komu podlega.
To ćwiczenie jest częścią kursu
Wprowadzenie do baz danych w Pythonie
Instrukcje do ćwiczenia
- Zapisz alias tabeli
employeesjakomanagers. W tym celu wywołaj metodę.alias()na obiekcieemployees. - Zbuduj zapytanie wybierające imię pracownika i imię jego menedżera. Imię menedżera zostało już dla ciebie wybrane. Użyj
label, aby nadać kolumnienamez tabeliemployeesetykietę'employee'. - Dodaj klauzulę
wheredo zmiennejstmt, która dopasuje wiersze, w których kolumnaidtabelimanagersodpowiada kolumniemgrtabeliemployees. - Posortuj wyniki według kolumny
nametabelimanagers. - Wykonaj zapytanie i zapisz wszystkie wyniki. Ten kod jest już napisany. Prześlij odpowiedź, aby wyświetlić imiona menedżerów i ich pracowników.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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)