SQL เข้าร่วมด้วยตนเอง

Sql Khea Rwm Dwy Tnxeng



หนึ่งในคุณสมบัติที่มีชื่อเสียงที่สุดของฐานข้อมูลเชิงสัมพันธ์คือการรวม การรวมเป็นหนึ่งในคุณสมบัติที่ทรงพลังและซับซ้อนที่สุดของฐานข้อมูลเชิงสัมพันธ์ ช่วยให้เกิดความเป็นโมดูลาร์ที่กว้างขวางและความสัมพันธ์ที่ซับซ้อนมากระหว่างตารางฐานข้อมูลโดยไม่กระทบต่อประสิทธิภาพการทำงาน

อย่างไรก็ตาม มีการรวมประเภทหนึ่งใน SQL ที่มีแนวโน้มที่จะไม่เป็นที่รู้จัก ซึ่งเรียกว่าการรวมด้วยตนเอง

ใน SQL การรวมตัวเองเป็นเทคนิคที่มีประสิทธิภาพที่ช่วยให้เราสามารถรวมแถวจากตารางเดียวกันโดยยึดตามคอลัมน์ที่เกี่ยวข้องภายในตารางเดียวกัน







ต่างจากการรวมประเภทอื่นๆ ใน SQL ที่เราดึงข้อมูลจากหลายตาราง การรวมด้วยตนเองจะทำงานบนตารางเดียว



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



โดยพื้นฐานแล้ว การรวมด้วยตนเองมีบทบาทพื้นฐานซึ่งคุณต้องเปรียบเทียบแถวของตารางเดียวกัน





เข้าร่วมกับเราในโพสต์นี้ในขณะที่เราสำรวจว่าการรวมตัวเองคืออะไร ทำงานอย่างไร และเราสามารถใช้สิ่งเหล่านี้ในตาราง SQL ได้อย่างไร

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



ข้อมูลตัวอย่าง

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

สร้างผลิตภัณฑ์ตาราง (
product_id INT คีย์หลัก,
product_name VARCHAR (255) ไม่เป็นโมฆะ
parent_id INT
-

เพิ่มบันทึกตัวอย่าง 10 รายการลงในตาราง

แทรกลงในค่าผลิตภัณฑ์ (product_id, product_name, parent_id)
(1, 'อิเล็กทรอนิกส์', NULL),
(2, 'สมาร์ทโฟน', 1),
(3, 'แล็ปท็อป', 1),
(4, 'ไอโฟน 13', 2),
(5, 'ซัมซุง กาแลคซี่ เอส 21', 2),
(6, 'แมคบุคโปร', 3),
(7, 'เดลล์ XPS 15', 3),
(8, 'อุปกรณ์เสริม', NULL),
(9, 'เคสโทรศัพท์', 8),
(10, 'กระเป๋าแล็ปท็อป', 8);

ตารางผลลัพธ์จะเป็นดังนี้:

ตัวอย่างที่ 1: การเข้าร่วมด้วยตนเองขั้นพื้นฐาน

ให้เราเริ่มต้นด้วยการเข้าร่วมด้วยตนเองขั้นพื้นฐาน ตัวอย่างเช่น เราสามารถใช้การรวมตัวเองแบบง่ายๆ เพื่อดึงข้อมูลความสัมพันธ์ระหว่างพ่อแม่และลูกของตารางเดียวกัน

ตัวอย่างเช่น เราสามารถใช้เพื่อหาผลิตภัณฑ์ทั้งหมดและผลิตภัณฑ์หลักที่เกี่ยวข้องได้ เราสามารถเรียกใช้แบบสอบถามได้ดังนี้:

เลือก c.product_name AS child_product, p.product_name AS parent_product
จากผลิตภัณฑ์ค
เข้าร่วมซ้าย ผลิตภัณฑ์ p ON c.parent_id = p.product_id;

ในแบบสอบถามตัวอย่างที่กำหนด เราใช้ 'c' เป็นนามแฝงสำหรับตารางผลิตภัณฑ์ซึ่งแสดงถึงผลิตภัณฑ์ย่อย

นอกจากนี้เรายังสร้างนามแฝง 'p' สำหรับตารางผลิตภัณฑ์เพื่อแสดงถึงผลิตภัณฑ์หลัก

ในขั้นตอนถัดไป เราใช้ SQL LEFT JOIN พื้นฐานเพื่อให้แน่ใจว่าผลิตภัณฑ์ระดับบนสุดจะรวมอยู่ในผลลัพธ์

สุดท้ายนี้ เราใช้ส่วนคำสั่ง ON เพื่อสร้างความสัมพันธ์ระหว่างบันทึกรายการย่อยและรายการหลักโดยใช้คอลัมน์ 'parent_id' และ 'product_id'

ตารางผลลัพธ์จะเป็นดังนี้:

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

ตัวอย่างที่ 2: ดึงข้อมูลแบบลำดับชั้น

บทบาทพื้นฐานที่สุดอย่างหนึ่งของการเข้าร่วมด้วยตนเองคือการดึงข้อมูลแบบลำดับชั้น ตัวอย่างเช่น สมมติว่าเราต้องการดึงข้อมูลผลิตภัณฑ์ย่อยทั้งหมดโดยที่ผลิตภัณฑ์นั้นเท่ากับ 'อุปกรณ์เสริม' เราสามารถเรียกใช้แบบสอบถามโดยใช้การเข้าร่วมด้วยตนเองดังนี้:

เลือก c.product_name AS child_product
จากผลิตภัณฑ์ค
เข้าร่วมผลิตภัณฑ์ p ON c.parent_id = p.product_id
โดยที่ p.product_name = 'อุปกรณ์เสริม';

ในกรณีนี้ เราใช้ JOIN เพื่อรวมตารางผลิตภัณฑ์เข้ากับตัวมันเอง จากนั้นใช้ส่วนคำสั่ง WHERE เพื่อกรองผลลัพธ์ที่เราต้องการ

บทสรุป

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