הצטרפות עצמית של SQL

Hztrpwt Zmyt Sl Sql



אחת התכונות המפורסמות ביותר של מסדי נתונים יחסיים היא הצטרפות. הצטרפות היא אחת התכונות החזקות והמורכבות ביותר של מסדי נתונים יחסיים. הם מאפשרים מודולריות נרחבת וקשרים מורכבים מאוד בין טבלאות מסד נתונים מבלי להתפשר על הביצועים.

עם זאת, יש סוג של צירוף ב-SQL שנוטה לעבור מתחת לרדאר, הידוע כחיבור עצמי.

ב-SQL, חיבור עצמי הוא טכניקה רבת עוצמה המאפשרת לנו לשלב את השורות מאותה טבלה על סמך עמודה קשורה בתוך אותה טבלה.







בניגוד לסוג החיבורים האחר ב-SQL שבו אנו לוקחים את הנתונים ממספר טבלאות, חיבור עצמי עובד על טבלה בודדת.



אתם עשויים לתהות, מדוע אני צריך הצטרפות עצמית כאשר אני יכול לחפש את הנתונים מהטבלה עצמה? למרות שזה עשוי להיות נכון, הצטרפות עצמית יכולה לעזור במשימות כאשר אתה צריך לבצע שאילתות נתונים רקורסיביים או למצוא נתונים היררכיים.



בעיקרו של דבר, הצטרפות עצמית ממלאת תפקיד בסיסי שבו אתה צריך להשוות את השורות של אותה טבלה.





הצטרפו אלינו לפוסט זה כשאנו חוקרים מהן הצטרפות עצמיות, כיצד הן פועלות וכיצד אנו יכולים להשתמש בהן בטבלת SQL.

הערה: לפני שנצלול פנימה, נערוך טבלה בסיסית למטרות הדגמה. עם זאת, אתה מרגיש להשתמש בכל מערך נתונים נתמך.



נתונים לדוגמה

השאילתות הבאות יוצרות טבלה בסיסית המכילה מידע על המוצר ומוסיפות את הרשומות לדוגמה לטבלה. זה מאפשר לנו להדגים כיצד לעבוד עם החיבורים העצמיים ב-SQL.

צור מוצרי טבלה (
product_id INT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
parent_id INT
);

הוסף 10 רשומות לדוגמה לטבלה.

INSERT INTO מוצרים (מזהה_מוצר, שם_מוצר, מזהה_הורה) VALUES
(1, 'אלקטרוניקה', NULL),
(2, 'סמארטפונים', 1),
(3, 'מחשבים ניידים', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'אביזרים', NULL),
(9, 'כיסויי טלפון', 8),
(10, 'תיקים למחשב נייד', 8);

הטבלה המתקבלת היא כדלקמן:

דוגמה 1: הצטרפות עצמית בסיסית

נתחיל בהצטרפות עצמית בסיסית. לדוגמה, אנו יכולים להשתמש בחיבור עצמי פשוט כדי לאחזר את מערכת היחסים בין הורה לילד של אותה טבלה.

לדוגמה, אנו יכולים להשתמש בו כדי למצוא את כל המוצרים ומוצרי האב המתאימים להם. אנו יכולים להריץ שאילתה באופן הבא:

בחר c.product_name AS child_product, p.product_name AS parent_product
ממוצרים ג
LEFT JOIN מוצרים p ON c.parent_id = p.product_id;

בשאילתת הדוגמה הנתונה, אנו משתמשים ב-'c' ככינוי לטבלת המוצרים המייצגת את מוצרי הצאצא.

אנו גם יוצרים את הכינוי 'p' עבור טבלת המוצרים כדי לייצג את מוצרי האב.

בשלב הבא, אנו משתמשים ב-SQL LEFT JOIN בסיסי כדי להבטיח שהמוצרים ברמה העליונה נכללים בתוצאה.

לבסוף, אנו משתמשים בסעיף ON כדי ליצור קשר בין רשומות הילד וההורה באמצעות העמודות 'מזהה_הורה' ו'מזהה_מוצר'.

הטבלה המתקבלת היא כדלקמן:

תבחין כי למוצרי האב אין קישור עליון מכיוון שהם נמצאים בראש ההיררכיה אשר ידועים גם כרכיבי השורש.

דוגמה 2: אחזר נתונים היררכיים

אחד התפקידים הבסיסיים ביותר של הצטרפות עצמית הוא שליפת נתונים היררכיים. לדוגמה, נניח שאנו רוצים לאחזר את כל מוצרי הילדים שבהם המוצר שווה ל'אביזרים'. אנו יכולים להריץ את השאילתה באמצעות הצטרפות עצמית באופן הבא:

בחר c.product_name AS child_product
ממוצרים ג
JOIN מוצרים p ON c.parent_id = p.product_id
WHERE p.product_name = 'אביזרים';

במקרה זה, אנו משתמשים ב-JOIN כדי לשלב את טבלת המוצרים עם עצמה ולאחר מכן משתמשים בסעיף WHERE כדי לסנן את התוצאות שאנו רוצים.

סיכום

במדריך זה, חקרנו מהי הצטרפות עצמית, כיצד היא פועלת וכיצד אנו יכולים להשתמש בה בטבלת SQL כדי לאחזר נתונים היררכיים או לבצע שאילתות רקורסיביות.