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:

sqlSELECT 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:

sqlSELECT *

Jotta tiedot haettaisiin kaikista tauluista, tulee *:n edessä määrittää taulun nimi, josta haetaan:

sqlSELECT users.*, cities.*

Vaihtoehtoisesti voidaan luetella tarvitsemamme kentät määrittämällä taulun nimi niiden edessä:

sqlSELECT 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:

sqlSELECT 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:

sqlON cities.id=users.city_id

Kysely

Lopulta kysely, joka hakee käyttäjät yhdessä heidän kaupunkiensa kanssa näyttää seuraavalta:

sqlSELECT
  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

Задание 1

Oletetaan, että sinulla on tuotetaulu ja niiden kategorioiden taulu. Kirjoita kysely, joka hakee tuotteiden nimet yhdessä niiden kategorioidensa kanssa.