Tietojen hakeminen linkitetyistä tauluista Pythonissa
Tehdään kysely, joka hakee
kaikki käyttäjät yhdessä heidän kaupunkiensa kanssa. Tätä varten
tarvitaan komento LEFT
JOIN:
Sen syntaksi on seuraava:
SELECT kentät FROM taulun_nimi
LEFT JOIN linkitetyn_taulun_nimi ON linkitysehto
WHERE hakuehto
Käydään läpi tämän komennon syntaksin yksittäiset osat.
Kentät
Koska haku tapahtuu useista tauluista,
kaikkien kenttien valitseminen *:lla
ei toimi. Seuraava kysely valitsee
kentät vain päätaulusta, muttei
linkitetystä taulusta:
SELECT *
Jotta tiedot haettaisiin kaikista
tauluista, tulee *:n edessä määrittää taulun nimi,
josta haetaan:
SELECT users.*, cities.*
Vaihtoehtoisesti voidaan luetella tarvitsemamme kentät määrittämällä taulun nimi niiden edessä:
SELECT users.name, cities.name
Näissä kahdessa tavassa on ongelma. Asia on siinä, että jos kentillä tauluissa on samat nimet, tapahtuu Python-taulukossa nimikonflikti ja vain yksi kenttä voittaa, eikä toista ole.
Ongelman ratkaisemiseksi on ristiriitaiset
nimet uudelleennimettävä komennolla
as:
SELECT users.name, cities.name as city_name
Linkitys
Komennon ON jälkeen meidän on määritettävä
kahdesta taulusta ne kentät, joiden perusteella
linkitys toteutuu. Meidän tapauksessamme nämä ovat kenttä id
kaupunkien taulusta ja kenttä city_id
käyttäjien taulusta:
ON cities.id=users.city_id
Kysely
Lopulta kysely, joka hakee käyttäjät yhdessä heidän kaupunkiensa kanssa näyttää seuraavalta:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Käytännön tehtävät
Oletetaan, että sinulla on tuotetaulu ja niiden kategorioiden taulu. Kirjoita kysely, joka hakee tuotteiden nimet yhdessä niiden kategorioidensa kanssa.