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
Instruções do exercício
- Salve um alias da tabela
employeescomomanagers. Para isso, aplique o método.alias()aemployees. - Construa uma consulta para selecionar o
namedo funcionário e onamedo seu gerente. Onamedo gerente já foi selecionado para você. Uselabelpara rotular a colunanamedeemployeescomo'employee'. - Acrescente uma cláusula where a
stmtpara corresponder onde a colunaidda tabelamanagerscorresponde à colunamgrda tabelaemployees. - Ordene a instrução pela coluna
nameda tabelamanagers. - 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)