같은 테이블 조인 쿼리에서 alias 사용하기
직원과 관리자가 모두 직원인 것처럼, 계층적 데이터를 담은 테이블을 다뤄야 할 때가 자주 있습니다. 이런 경우 서로 다른 열을 기준으로 테이블을 자기 자신과 조인할 수 있어야 합니다. 테이블의 사본을 만드는 .alias() 메서드는 이 작업에 유용합니다. 같은 테이블을 조인하므로 조인 조건을 지정하는 where 절만 필요합니다.
여기서는 .alias() 메서드를 사용해 employees 테이블을 자기 자신과 조인하여 각 직원이 누구에게 보고하는지 알아내는 쿼리를 작성해 보겠습니다.
이 연습은 강의의 일부입니다
Python으로 배우는 데이터베이스 입문
연습 안내
employees테이블의 별칭을managers로 저장하세요. 이를 위해employees에.alias()메서드를 적용하세요.- 직원의
name과 해당 관리자의name을 선택하는 쿼리를 작성하세요. 관리자의name은 이미 선택되어 있습니다.label을 사용해employees의name열에'employee'라벨을 지정하세요. stmt에 where 절을 추가하여,managers테이블의id열이employees테이블의mgr열과 일치하도록 하세요.managers테이블의name열을 기준으로 정렬하세요.- 구문을 실행하고 모든 결과를 저장하세요. 이 코드는 이미 작성되어 있습니다. Submit Answer를 눌러 모든 관리자와 그들의 직원 이름을 출력하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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)