Python-da baglanyşykly tablisalardan maglumat almak

Ähli ulanyjylary şäherleri bilen birlikde alýan sorag ýerine ýetireli. Bunuň üçin LEFT JOIN buýrugy gerek bolýar:

Onuň sintaksisi aşakdaky ýaly görünýär:

sqlSELECT meýdanlar FROM tablisa_ady
  LEFT JOIN baglanyşykly_tablisa_ady ON baglanyşyk_şerti
WHERE saýlama_şerti

Geliň bu buýrugyň sintaksisiniň aýratyn böleklerini düşünýäli.

Meýdanlar

Saýlama birnäçe tablisadan ýerine ýetirilýändigi üçin, * arkaly ähli meýdanlary saýlamak işlemez. Aşakdaky sorag esasy tablisanyň meýdanlaryny saýlar, ýöne baglanyşykly tablisanyňkylary saýlamaz:

sqlSELECT *

Maglumatlaryň ähli tablisalardan saýlanmagy üçin, *-dan öň saýlama tablisasynyň adyny görkezmek gerek:

sqlSELECT users.*, cities.*

Ýa-da biz gerek bolan meýdanlary tablisanyň adyny olaryň öňünde görkezip, sanap bilýäris:

sqlSELECT users.name, cities.name

Bu iki usulyň bir meselesi bar. Problem şonda, eger tablisalardaky meýdanlar birmeňzeş atlara eýe bolsa, Python massiwinde atlar çakyşmasy bolup, diňe bir meýdan ýeňer, ikinjisi bolmaz.

Bu meseläni çözmek üçin, çakyşýan atlar as buýrugy arkaly täzeden atlandyrylmagy gerek:

sqlSELECT users.name, cities.name as city_name

Baglanyşyk

ON buýrugyndan soň, baglanyşyk amala aşyrylýan iki tablisanyň meýdanlaryny görkezmeli. Bizim ýagdaýymyzda bu, şäherler tablisasyndan id meýdany we ulanyjylar tablisasyndan city_id meýdany bolar:

sqlON cities.id=users.city_id

Sorag

Netijede, ulanyjylary şäherleri bilen birlikde alyp gelýän sorag aşakdaky ýaly görüner:

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

Amaly meseleler

Задание 1

Sizde harytlar tablisasy we olaryň kategoriýalary tablisasy bar diýeli. Harytlaryň atlaryny kategoriýalary bilen birlikde alyp gelýän sorag ýazyň.