อย่างไรก็ตาม มีการรวมประเภทหนึ่งใน 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 เพื่อดึงข้อมูลแบบลำดับชั้นหรือดำเนินการค้นหาแบบเรียกซ้ำได้อย่างไร