계층형 테이블 다루기

Python으로 배우는 데이터베이스 입문

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

계층형 테이블

  • 자기 자신과 관계를 가짐
  • 흔한 예:
    • 조직
    • 지리
    • 네트워크
    • 그래프
Python으로 배우는 데이터베이스 입문

계층형 테이블 - 예시

계층형_테이블

Python으로 배우는 데이터베이스 입문

계층형 테이블 - alias()

  • 여러 이름으로 테이블을 볼 수 있어야 함
  • 활용 가능한 고유 참조를 생성함
Python으로 배우는 데이터베이스 입문

계층형 데이터 질의

managers = employees.alias()

stmt = select( [managers.columns.name.label('manager'), employees.columns.name.label('employee')])
stmt = stmt.select_from(employees.join( managers, managers.columns.id == employees.columns.manager)
stmt = stmt.order_by(managers.columns.name)
print(connection.execute(stmt).fetchall())
[(u'FILLMORE', u'GRANT'),
 (u'FILLMORE', u'ADAMS'),
 (u'HARDING', u'TAFT'), ...
Python으로 배우는 데이터베이스 입문

group_by와 func

  • group_by()는 올바른 별칭에 적용해야 함
  • 함수 적용 대상에 주의
  • 쿼리에서 별칭과 원 테이블 이름을 모두 쓰지 않으면 별칭을 만들지 말 것
Python으로 배우는 데이터베이스 입문

계층형 데이터 질의

managers = employees.alias()

stmt = select([managers.columns.name, func.sum(employees.columns.sal)])
stmt = stmt.select_from(employees.join( managers, managers.columns.id == employees.columns.manager)
stmt = stmt.group_by(managers.columns.name) print(connection.execute(stmt).fetchall())
[(u'FILLMORE', Decimal('96000.00')),
 (u'GARFIELD', Decimal('83500.00')),
 (u'HARDING', Decimal('52000.00')),
 (u'JACKSON', Decimal('197000.00'))]
Python으로 배우는 데이터베이스 입문

연습해 봅시다!

Python으로 배우는 데이터베이스 입문

Preparing Video For Download...