ÎncepețiÎncepe gratuit

Utilizarea aliasurilor pentru interogări cu același tabel îmbinат

De multe ori vei întâlni tabele care conțin date ierarhice, cum ar fi angajații și managerii care sunt tot angajați. Din acest motiv, poate fi necesar să îmbini un tabel cu el însuși pe coloane diferite. Metoda .alias(), care creează o copie a unui tabel, te ajută să realizezi acest lucru. Deoarece este același tabel, ai nevoie doar de o clauză where pentru a specifica condiția de îmbinare.

Aici, vei folosi metoda .alias() pentru a construi o interogare care să îmbine tabelul employees cu el însuși, pentru a determina cui îi raportează fiecare angajat.

Acest exercițiu face parte din cursul

Introducere în baze de date în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Salvează un alias al tabelului employees ca managers. Pentru aceasta, aplică metoda .alias() pe employees.
  • Construiește o interogare pentru a selecta numele angajatului și numele managerului său. Numele managerului a fost deja selectat. Folosește label pentru a redenumi coloana name din employees ca 'employee'.
  • Adaugă o clauză where la stmt pentru a face corespondența dintre coloana id din tabelul managers și coloana mgr din tabelul employees.
  • Ordonează instrucțiunea după coloana name din tabelul managers.
  • Execută instrucțiunea și stochează toate rezultatele. Acest cod este deja scris. Trimite răspunsul pentru a afișa numele managerilor și ale tuturor angajaților lor.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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

Editează și rulează codul