ComeçarComece de graça

Usando alias para lidar com consultas que fazem join na mesma tabela

Com frequência, você terá tabelas que contêm dados hierárquicos, como funcionários e gerentes que também são funcionários. Por isso, pode ser necessário fazer join de uma tabela com ela mesma em colunas diferentes. O método .alias(), que cria uma cópia de uma tabela, ajuda a realizar essa tarefa. Como é a mesma tabela, você só precisa de uma cláusula where para especificar a condição do join.

Aqui, você usará o método .alias() para construir uma consulta que faça join da tabela employees com ela mesma para determinar para quem cada pessoa se reporta.

Este exercício faz parte do curso

Introdução a Bancos de Dados em Python

Ver curso

Instruções do exercício

  • Salve um alias da tabela employees como managers. Para isso, aplique o método .alias() a employees.
  • Construa uma consulta para selecionar o name do funcionário e o name do seu gerente. O name do gerente já foi selecionado para você. Use label para rotular a coluna name de employees como 'employee'.
  • Acrescente uma cláusula where a stmt para corresponder onde a coluna id da tabela managers corresponde à coluna mgr da tabela employees.
  • Ordene a instrução pela coluna name da tabela managers.
  • Execute a instrução e armazene todos os resultados. Esse código já está escrito. Envie a resposta para imprimir os nomes dos gerentes e de todos os seus funcionários.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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

Editar e executar o código