การดึงข้อมูลจากตารางที่เชื่อมโยงกันใน Python

มาลองสร้างคำสั่งที่ดึง ผู้ใช้ทั้งหมดพร้อมกับเมืองของพวกเขา สำหรับสิ่งนี้ จะต้องใช้คำสั่ง LEFT JOIN:

ไวยากรณ์ของมันมีลักษณะดังนี้:

sqlSELECT fields FROM table_name
  LEFT JOIN linked_table_name ON link_condition
WHERE selection_condition

มาลองแยกส่วนต่างๆ ของไวยากรณ์ คำสั่งนี้ดู

ฟิลด์

เนื่องจากทำการเลือกข้อมูลจากหลายตาราง, การเลือกฟิลด์ทั้งหมดผ่าน * จะ ไม่ทำงาน คำสั่งต่อไปนี้จะเลือก ฟิลด์จากตารางหลักเท่านั้น แต่ไม่ใช่จาก ตารางที่เชื่อมโยง:

sqlSELECT *

เพื่อให้ข้อมูลถูกเลือกจากทุก ตาราง จำเป็นต้องระบุชื่อ ตารางสำหรับการเลือกไว้ก่อน *:

sqlSELECT users.*, cities.*

หรือสามารถระบุฟิลด์ที่เราต้องการพร้อม ระบุชื่อตารางไว้ข้างหน้าได้:

sqlSELECT users.name, cities.name

สองวิธีนี้มีปัญหา ประเด็นคือ หากฟิลด์ในตารางมี ชื่อซ้ำกัน ในอาร์เรย์ Python จะเกิดความขัดแย้งของชื่อ และมีเพียงฟิลด์เดียว เท่านั้นที่ชนะ ฟิลด์ที่สองจะหายไป

เพื่อแก้ปัญหา จำเป็นต้องเปลี่ยนชื่อ ฟิลด์ที่ขัดแย้งกันผ่านคำสั่ง as:

sqlSELECT users.name, cities.name as city_name

การเชื่อมโยง

หลังคำสั่ง ON เราต้องระบุ ฟิลด์จากทั้งสองตาราง ซึ่งเป็นจุดที่ การเชื่อมโยงเกิดขึ้น ในกรณีของเราคือฟิลด์ id จากตารางเมือง และฟิลด์ city_id จากตารางผู้ใช้:

sqlON cities.id=users.city_id

คำสั่งค้นหา

สุดท้าย คำสั่งที่จะดึงผู้ใช้ พร้อมกับเมืองของพวกเขาจะมีลักษณะ ดังนี้:

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

แบบฝึกหัด

Задание 1

สมมติว่าคุณมีตารางสินค้าและ ตารางหมวดหมู่ของพวกเขา เขียนคำสั่ง ที่ดึงชื่อสินค้าพร้อมกับ หมวดหมู่ของพวกเขา