НачатьНачать бесплатно

Использование псевдонимов для запросов с самосоединением таблицы

Нередко таблицы содержат иерархические данные — например, сотрудники и их менеджеры, которые тоже являются сотрудниками. В таких случаях может потребоваться соединить таблицу с самой собой по разным столбцам. Метод .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)

Редактировать и запускать код