Aan de slagGa gratis aan de slag

Joins

Als je geen kolommen uit beide tabellen selecteert of als de twee tabellen geen gedefinieerde relatie hebben, kun je nog steeds de methode .join() op een tabel gebruiken om deze met een andere tabel te joinen en extra gegevens op te halen die bij je query horen. join() neemt het tabelobject dat je wilt joinen als eerste argument en een voorwaarde die aangeeft hoe de tabellen gerelateerd zijn als tweede argument. Tot slot gebruik je de methode .select_from() op de select-statement om de joinclausule te omhullen. In de video voerde Jason bijvoorbeeld de volgende code uit om de tabel census te joinen met de tabel state_fact, zodat de kolom state van de tabel census overeenkwam met de kolom name van de tabel state_fact.

stmt = stmt.select_from(
    census.join(
        state_fact, census.columns.state == 
        state_fact.columns.name)

Deze oefening maakt deel uit van de cursus

Introductie tot databases in Python

Cursus bekijken

Oefeninstructies

  • Bouw een statement om ALLE kolommen uit de tabellen census en state_fact te selecteren. Om bijvoorbeeld ALLE kolommen uit twee tabellen employees en sales te selecteren, zou je stmt = select([employees, sales]) gebruiken.
  • Voeg een select_from toe aan stmt om de tabel census te joinen met de tabel state_fact via de kolom state in census en de kolom name in de tabel state_fact.
  • Voer het statement uit om het eerste resultaat op te halen en sla dit op als result. Deze code is al geschreven.
  • Verstuur het antwoord om over de keys van het result-object te loopen en voor elke key de key en value te printen!

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# Build a statement to select the census and state_fact tables: stmt
stmt = select([____, ____])

# Add a select_from clause that wraps a join for the census and state_fact
# tables where the census state column and state_fact name column match
stmt_join = stmt.select_from(
    ____(____, census.columns.____ == state_fact.columns.____))

# Execute the statement and get the first result: result
result = connection.execute(stmt_join).first()

# Loop over the keys in the result object and print the key and value
for key in result.keys():
    print(key, getattr(result, key))
Code bewerken en uitvoeren