使用别名处理同表自连接查询
在实际业务中,您常会遇到层级结构的数据表,例如员工和经理(经理本身也是员工)。因此,您可能需要在不同的列上将一张表与其自身进行连接。.alias() 方法可以创建表的副本,帮助完成这类任务。由于是同一张表,您只需使用 where 子句来指定连接条件。
在本练习中,您将使用 .alias() 方法,构建一个查询,将 employees 表与其自身连接,以确定每位员工分别向谁汇报。
本练习是课程的一部分
Python 中的数据库入门
练习说明
- 将
employees表的别名保存为managers。为此,请对employees调用.alias()方法。 - 构建查询,选择员工的
name以及其经理的name。经理的name已为您选好。使用label将employees的name列标记为'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)