Использование псевдонимов для запросов с самосоединением таблицы
Нередко таблицы содержат иерархические данные — например, сотрудники и их менеджеры, которые тоже являются сотрудниками. В таких случаях может потребоваться соединить таблицу с самой собой по разным столбцам. Метод .alias() создаёт копию таблицы и помогает решить эту задачу. Поскольку речь идёт об одной и той же таблице, достаточно предложения where, чтобы задать условие соединения.
В этом упражнении вы используете метод .alias(), чтобы построить запрос, соединяющий таблицу employees с самой собой — для определения того, кому подчиняется каждый сотрудник.
Это упражнение является частью курса
Введение в базы данных на Python
Инструкции к упражнению
- Сохраните псевдоним таблицы
employeesв переменнуюmanagers. Для этого примените метод.alias()кemployees. - Постройте запрос для выборки имени сотрудника и имени его менеджера. Имя менеджера уже добавлено в запрос. Используйте
label, чтобы присвоить столбцуnameтаблицыemployeesметку'employee'. - Добавьте к
stmtпредложениеwhere, которое сопоставляет столбецidтаблицыmanagersсо столбцомmgrтаблицыemployees. - Отсортируйте результат по столбцу
nameтаблицыmanagers. - Выполните запрос и сохраните все результаты. Этот код уже написан. Нажмите Отправить ответ, чтобы вывести имена менеджеров и всех их подчинённых.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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)