开始使用免费开始使用

使用别名处理同表自连接查询

在实际业务中,您常会遇到层级结构的数据表,例如员工和经理(经理本身也是员工)。因此,您可能需要在不同的列上将一张表与其自身进行连接。.alias() 方法可以创建表的副本,帮助完成这类任务。由于是同一张表,您只需使用 where 子句来指定连接条件。

在本练习中,您将使用 .alias() 方法,构建一个查询,将 employees 表与其自身连接,以确定每位员工分别向谁汇报。

本练习是课程的一部分

Python 中的数据库入门

查看课程

练习说明

  • employees 表的别名保存为 managers。为此,请对 employees 调用 .alias() 方法。
  • 构建查询,选择员工的 name 以及其经理的 name。经理的 name 已为您选好。使用 labelemployeesname 列标记为 'employee'
  • stmt 添加 where 子句,使 managers 表的 id 列与 employees 表的 mgr 列相匹配。
  • managers 表的 name 列对语句进行排序。
  • 执行语句并存储所有结果。此代码已为您写好。提交答案以打印所有经理及其员工的姓名。

交互式实操练习

通过完成这段示例代码来试试这个练习。

# 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)

编辑并运行代码