⊗pyPmDOFR 126 of 129 menu

ความสัมพันธ์เชิงลำดับชั้นของข้อมูลใน Python

สมมติว่าเรามีภารกิจในการเก็บข้อมูลพ่อ และลูกชาย ให้พ่อแต่ละคนมีลูกชายได้เพียงคนเดียว และลูกชายก็สามารถมีลูกชายได้เพียงคนเดียวเช่นกัน

เราต้องคิดหาวิธีเก็บข้อมูล ไอเดียแรกที่อาจนึกถึงคือการสร้างตารางสองตาราง: parents สำหรับพ่อและ sons สำหรับลูกชาย จากนั้น เชื่อมโยงตารางเหล่านี้ด้วยฟิลด์บางอย่าง: son_id หรือ parent_id

อย่างไรก็ตาม นี่ไม่ใช่ไอเดียที่ดีนัก เพราะ คนคนเดียวกันสามารถเป็นได้ทั้งพ่อและลูกชาย ซึ่งจะทำให้ต้องเก็บข้อมูลของเขา ในทั้งสองตาราง สิ่งนี้ไม่สะดวก ใช้พื้นที่ มากขึ้น และนำไปสู่ข้อผิดพลาดได้ง่าย

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

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

การสอบถามข้อมูล

ตอนนี้มาเขียนคำสั่งสอบถามที่ ดึงข้อมูลผู้ใช้พร้อมกับลูกชายของเขากัน

เริ่มต้นด้วยการดึงข้อมูลผู้ใช้ก่อน:

SELECT * FROM users

ตอนนี้มาเชื่อมตาราง (join) ผู้ใช้กับลูกชายของพวกเขา เนื่องจากเราจะเชื่อมตารางกับตัวเอง เราจึงจำเป็นต้องตั้งชื่อใหม่ให้ตาราง:

LEFT JOIN users as sons

ตอนนี้เราสามารถระบุความสัมพันธ์ระหว่างตารางหลัก และตารางที่ตั้งชื่อใหม่ได้:

LEFT JOIN users as sons ON sons.id=users.son_id

มาตอนนี้ให้ระบุฟิลด์:

SELECT users.name as user_name, sons.name as son_name

นำทั้งหมดมารวมกัน เราจะได้คำสั่งสอบถาม ดังต่อไปนี้:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

โจทย์ฝึกปฏิบัติ

สมมติเรามีหมวดหมู่ แต่ละหมวดหมู่ สามารถอยู่ภายใต้หมวดหมู่แม่ได้ และหมวดหมู่แม่ก็สามารถอยู่ภายใต้หมวดหมู่แม่ของมันได้อีก ลำดับแบบนี้ไปเรื่อยๆ จงอธิบายโครงสร้างการเก็บข้อมูล

เขียนคำสั่งสอบถามที่ดึงข้อมูลหมวดหมู่ พร้อมกับหมวดหมู่แม่ของมัน

เขียนคำสั่งสอบถามที่ดึงข้อมูลหมวดหมู่ พร้อมกับแม่และยาย (ผู้ปกครองสองระดับ) ของมัน

เขียนคำสั่งสอบถามที่ดึงข้อมูลหมวดหมู่ พร้อมกับแม่ ยาย และทวด (ผู้ปกครองสามระดับ) ของมัน

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ