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:
SELECT 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:
SELECT *
Lai dati tiktu atlasīti no visām
tabulām, ir jānorāda tabulas nosaukums pirms *:
SELECT users.*, cities.*
Vai arī var uzskaitīt mums vajadzīgos laukus ar tabulas nosaukuma norādi pirms tiem:
SELECT 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:
SELECT 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:
ON 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:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiskie uzdevumi
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.