Dohvatanje podataka iz povezanih tabela u Python-u
Hajde da napravimo upit koji će izvući
sve korisnike zajedno sa njihovim gradovima. Za ovo
će biti potrebna komanda LEFT
JOIN:
Njen sintaksis izgleda na sledeći način:
SELECT polja FROM ime_tabele
LEFT JOIN ime_povezane_tabele ON uslov_povezivanja
WHERE uslov_izbora
Hajde da raščlanimo pojedinačne delove sintaksisa ove komande.
Polja
Pošto se izbor vrši iz nekoliko tabela,
izbor svih polja preko * neće
raditi. Sledeći upit će izabrati
polja samo iz glavne tabele, ali ne iz
povezane:
SELECT *
Da bi podaci bili izabrani iz svih
tabela, potrebno je pre * navesti ime
tabele za izbor:
SELECT users.*, cities.*
Ili možete nabrojati potrebna polja sa navedenim imenom tabele ispred njih:
SELECT users.name, cities.name
Ova dva načina imaju problem. Stvar je u tome da ako polja u tabelama imaju ista imena, onda će u nizu Python-a doći do konflikta imena i pobediće samo jedno polje, a drugog neće biti.
Za rešenje problema je potrebno konfliktnim
imenima promeniti imena preko komande
as:
SELECT users.name, cities.name as city_name
Povezivanje
Nakon komande ON moramo navesti
polja iz dve tabele po kojima se ostvaruje
veza. U našem slučaju to će biti polje id
iz tabele sa gradovima i polje city_id
iz tabele sa korisnicima:
ON cities.id=users.city_id
Upit
Na kraju, upit koji će izvući korisnike zajedno sa njihovim gradovima će izgledati na sledeći način:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktični zadaci
Neka postoji tabela sa proizvodima i tabela sa njihovim kategorijama. Napišite upit, koji će izvući nazive proizvoda zajedno sa njihovim kategorijama.