Datu iegūšana no saistītajām tabulām Python

Veiksim vaicājumu, kas iegūs visus lietotājus kopā ar viņu pilsētām. Šim nolūkam būs nepieciešama komanda LEFT JOIN:

Tās sintakse izskatās šādi:

sqlSELECT lauki FROM tabulas_nosaukums
  LEFT JOIN saistitas_tabulas_nosaukums ON savienojuma_nosacijums
WHERE atlases_nosacijums

Izpētīsim atsevišķas šīs komandas sintakses daļas.

Lauki

Tā kā atlase notiek no vairākām tabulām, tad visu lauku atlase caur * nedarbosies. Šāds vaicājums atlasīs laukus tikai no galvenās tabulas, bet ne no saistītās:

sqlSELECT *

Lai dati tiktu atlasīti no visām tabulām, ir jānorāda tabulas nosaukums pirms *:

sqlSELECT users.*, cities.*

Vai arī var uzskaitīt mums vajadzīgos laukus ar tabulas nosaukuma norādi pirms tiem:

sqlSELECT users.name, cities.name

Šīm divām metodēm ir problēma. Tas ir tāpēc, ka, ja lauki tabulās ir ar identiskiem nosaukumiem, tad Python masīvā notiks nosaukumu konflikts un uzvarēs tikai viens lauks, bet otrā nebūs.

Lai atrisinātu problēmu, konfliktējošos nosaukumus vajag pārdēvēt, izmantojot komandu as:

sqlSELECT users.name, cities.name as city_name

Saite

Pēc komandas ON mums jānorāda lauki no divām tabulām, pēc kuriem tiek realizēts savienojums. Mūsu gadījumā tas būs lauks id no tabulas ar pilsētām un lauks city_id no tabulas ar lietotājiem:

sqlON cities.id=users.city_id

Vaicājums

Rezultātā vaicājums, kas iegūs lietotājus kopā ar viņu pilsētām izskatīsies šādi:

sqlSELECT
  users.name, cities.name as city_name
FROM
  users
LEFT JOIN cities ON cities.id=users.city_id

Praktiskie uzdevumi

Задание 1

Pieņemsim, ka jums ir tabula ar precēm un tabila ar to kategorijām. Uzrakstiet vaicājumu, kas iegūs preču nosaukumus kopā ar to kategorijām.