Dùng alias để xử lý truy vấn tự join cùng một bảng
Không ít khi bạn sẽ có các bảng chứa dữ liệu phân cấp, chẳng hạn nhân viên
và quản lý — những người cũng là nhân viên. Vì vậy, bạn có thể muốn join một bảng với chính nó trên các cột khác nhau. Phương thức .alias(), tạo ra một bản sao của bảng, sẽ giúp bạn thực hiện
nhiệm vụ này. Vì là cùng một bảng, bạn chỉ cần một mệnh đề where để xác định
điều kiện join.
Trong bài này, bạn sẽ dùng phương thức .alias() để xây dựng truy vấn join bảng
employees với chính nó nhằm xác định mỗi người báo cáo cho ai.
Bài tập này là một phần của khóa học
Nhập môn Cơ sở dữ liệu với Python
Hướng dẫn bài tập
- Lưu một bí danh của bảng
employeeslàmanagers. Thực hiện bằng cách gọi phương thức.alias()trênemployees. - Xây dựng truy vấn chọn
namecủa nhân viên vànamecủa quản lý của họ.namecủa quản lý đã được chọn sẵn cho bạn. Dùnglabelđể gán nhãn cộtnamecủaemployeeslà'employee'. - Thêm mệnh đề where vào
stmtđể khớp nơi cộtidcủa bảngmanagerstương ứng với cộtmgrcủa bảngemployees. - Sắp xếp câu lệnh theo cột
namecủa bảngmanagers. - Thực thi câu lệnh và lưu toàn bộ kết quả. Phần mã này đã được viết sẵn. Gửi câu trả lời để in tên các quản lý và tất cả nhân viên của họ.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)