მონაცემების მიღება დაკავშირებული ცხრილებიდან Python-ში
მოდით, შევქმნათ მოთხოვნა, რომელიც დააბრუნებს
ყველა მომხმარებელს მათ ქალაქებთან ერთად. ამისთვის
დაგვჭირდება ბრძანება LEFT
JOIN:
მისი სინტაქსი ასე გამოიყურება:
SELECT ველები FROM ცხრილის_სახელი
LEFT JOIN დაკავშირებული_ცხრილის_სახელი ON კავშირის_პირობა
WHERE არჩევის_პირობა
მოდით, განვიხილოთ ამ ბრძანების სინტაქსის ცალკეული ნაწილები.
ველები
ვინაიდან არჩევა ხდება რამდენიმე ცხრილიდან,
ყველა ველის არჩევა *-ის მეშვეობით
არ იმუშავებს. შემდეგი მოთხოვნა აირჩევს
ველებს მხოლოდ მთავარი ცხრილიდან, მაგრამ არა
დაკავშირებული ცხრილიდან:
SELECT *
იმისთვის, რომ მონაცემები აირჩეს ყველა
ცხრილიდან, საჭიროა *-მდე მიუთითოთ
არჩევის ცხრილის სახელი:
SELECT users.*, cities.*
ან შეგიძლიათ ჩამოწეროთ ჩვენთვის საჭირო ველები მათ წინ ცხრილის სახელის მითითებით:
SELECT users.name, cities.name
ამ ორ გზას აქვს პრობლემა. საქმე იმაშია, რომ თუ ცხრილებში ველებს აქვთ ერთი და იგივე სახელები, მაშინ Python-ის მასივში მოხდება სახელების კონფლიქტი და მხოლოდ ერთი ველი გადარჩება, ხოლო მეორე არ იქნება.
პრობლემის მოსაგვარებლად საჭიროა კონფლიქტური
სახელების გადარქმევა ბრძანების
as მეშვეობით:
SELECT users.name, cities.name as city_name
კავშირი
ON ბრძანების შემდეგ ჩვენ უნდა მივუთითოთ
ორი ცხრილის ის ველები, რომლებზეც ხდება
კავშირი. ჩვენს შემთხვევაში ეს იქნება ველი id
ქალაქების ცხრილიდან და ველი city_id
მომხმარებლების ცხრილიდან:
ON cities.id=users.city_id
მოთხოვნა
საბოლოოდ, მოთხოვნა, რომელიც დააბრუნებს მომხმარებლებს მათ ქალაქებთან ერთად, ასე გამოიყურება:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
პრაქტიკული ამოცანები
დავუშვათ, გაქვთ ცხრილი პროდუქტებით და ცხრილი მათი კატეგორიებით. დაწერეთ მოთხოვნა, რომელიც დააბრუნებს პროდუქტების სახელებს მათ კატეგორიებთან ერთად.