SQL Academy · पाठ

सेल्फ JOIN क्या है

उपनामों के साथ किसी तालिका को स्वयं से JOIN करें।

पाठ 1, कुल 4 में से13 चरण

सेल्फ JOIN क्या है, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

तालिका को स्वयं से जोड़ना

एक स्वयं-जोड़ तब होता है, जब आप किसी तालिका को उसी तालिका से जोड़ते हैं। यह शुरुआत में असामान्य लग सकता है, लेकिन जब एक ही तालिका की पंक्तियाँ उसी तालिका की अन्य पंक्तियों से संबंधित हों, तब यह एक शक्तिशाली तकनीक साबित होती है।

इसका सबसे सामान्य उदाहरण कर्मचारियों की तालिका है, जिसमें प्रत्येक कर्मचारी की पंक्ति उसके प्रबंधक का ID भी संग्रहीत करती है—और वह प्रबंधक भी उसी तालिका में एक कर्मचारी होता है।

कर्मचारियों की तालिका

एक employees तालिका पर विचार कीजिए, जिसमें प्रत्येक पंक्ति में id, name और manager_id होता है। manager_id उसी तालिका की किसी दूसरी पंक्ति की ओर संकेत करता है।

इस संरचना को स्वयं-संदर्भित या पुनरावर्ती संबंध कहा जाता है। तालिका बनाने और उसमें डेटा भरने के लिए नीचे दी गई क्वेरी चलाइए।

CREATE TABLE employees (
  id         INT PRIMARY KEY,
  name       VARCHAR(50),
  manager_id INT
);

INSERT INTO employees VALUES
  (1, 'Alice',   NULL),
  (2, 'Bob',     1),
  (3, 'Carol',   1),
  (4, 'Dave',    2),
  (5, 'Eve',     2),
  (6, 'Frank',   3);

सामान्य जोड़ यहाँ क्यों काम नहीं करते

यदि आप प्रत्येक कर्मचारी के साथ उसके प्रबंधक का नाम दिखाना चाहते हैं, तो दोनों प्रकार का डेटा एक ही तालिका में रहता है। सामान्य जोड़ दो अलग तालिकाओं या कम-से-कम दो अलग स्रोतों को जोड़ता है।

एक ही तालिका से दो बार पढ़ने के लिए—एक बार कर्मचारी के रूप में और एक बार प्रबंधक के रूप में—आपको तालिका के उपनामों के साथ स्वयं-जोड़ का उपयोग करना होगा।

उपनामों का परिचय

स्वयं-जोड़ करने के लिए आप FROM / JOIN खंड में उसी तालिका का नाम दो बार लिखते हैं और प्रत्येक बार के लिए अलग उपनाम देते हैं। उपनाम SQL को उन्हें दो अलग तार्किक तालिकाओं की तरह समझने देते हैं।

आम तौर पर छोटे और वर्णनात्मक उपनामों का उपयोग किया जाता है, जैसे कर्मचारी के लिए e और प्रबंधक के लिए m।

-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.id

आपका पहला स्वयं-जोड़

यहाँ एक पूरा स्वयं-जोड़ दिया गया है, जो प्रत्येक कर्मचारी को उसके प्रबंधक के नाम के साथ सूचीबद्ध करता है। ON शर्त कर्मचारी के manager_id को प्रबंधक के id से जोड़ती है।

ऐलिस का कोई प्रबंधक नहीं है, इसलिए INNER JOIN उसे बाहर कर देता है—प्रबंधक वाली ओर उसकी कोई मेल खाती पंक्ति नहीं है।

SELECT
  e.name   AS employee,
  m.name   AS manager
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id;

बिना प्रबंधक वाली पंक्तियों को शामिल करना

जब आप INNER JOIN का उपयोग करते हैं, तो जिन पंक्तियों का कोई मेल नहीं मिलता, वे हटा दी जाती हैं। ऐलिस के पास manager_id = NULL है, इसलिए वह परिणामों से गायब हो जाती है।

सभी कर्मचारियों को बनाए रखने के लिए LEFT JOIN का उपयोग कीजिए और जहाँ कोई प्रबंधक न हो, वहाँ केवल NULL या कोई लेबल दिखाइए।

SELECT
  e.name             AS employee,
  COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
  ON e.manager_id = m.id;

स्वयं-जोड़ के परिणामों को फ़िल्टर करना

आप किसी अन्य क्वेरी की तरह स्वयं-जोड़ में भी WHERE खंड जोड़ सकते हैं। नीचे दिया गया उदाहरण केवल उन कर्मचारियों को प्राप्त करता है जिनका प्रत्यक्ष प्रबंधक ऐलिस है (आईडी = 1)।

SELECT
  e.name  AS employee,
  m.name  AS manager
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id
WHERE m.name = 'Alice';

प्रत्यक्ष अधीनस्थों की गिनती करना

स्वयं-जोड़ समुच्चय फ़ंक्शनों के साथ स्वाभाविक रूप से काम करते हैं। नीचे दी गई क्वेरी प्रबंधक के उपनाम के आधार पर समूह बनाकर गिनती करती है कि प्रत्येक प्रबंधक के कितने प्रत्यक्ष अधीनस्थ हैं।

SELECT
  m.name           AS manager,
  COUNT(e.id)      AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;

गैर-पदानुक्रमित डेटा पर स्वयं-जोड़

स्वयं-जोड़ केवल पदानुक्रमों तक सीमित नहीं हैं। जब भी किसी तालिका की पंक्तियाँ उसी तालिका की अन्य पंक्तियों से संबंधित हों, तब स्वयं-जोड़ उपयोगी हो सकता है।

उदाहरण के लिए, समान प्रबंधक वाले कर्मचारियों के सभी युग्म खोजे जा सकते हैं—तालिका को समान manager_id मानों पर स्वयं से जोड़ते हुए यह सुनिश्चित किया जाता है कि किसी कर्मचारी का युग्म उसी के साथ न बने।

SELECT
  a.name AS employee_1,
  b.name AS employee_2,
  a.manager_id
FROM employees AS a
INNER JOIN employees AS b
  ON a.manager_id = b.manager_id
  AND a.id < b.id;

उपनाम की भूमिका

स्वयं-जोड़ में उपनाम अनिवार्य होते हैं—उनके बिना डेटाबेस यह निर्धारित नहीं कर सकता कि प्रत्येक कॉलम तालिका की किस प्रति को संदर्भित करता है, और आपको अस्पष्टता की त्रुटि मिलेगी।

आप अपनी पसंद के किसी भी उपनाम का उपयोग कर सकते हैं। मुख्य नियम यह है कि प्रत्येक कॉलम संदर्भ के आगे सही उपनाम लगा होना चाहिए, ताकि SQL जान सके कि तालिका के किस उदाहरण को देखना है।

-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;

-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;

वास्तविक दुनिया में उपयोग

वास्तविक डेटाबेस में स्वयं-जोड़ों का अक्सर उपयोग होता है। इनके सामान्य उपयोगों में शामिल हैं:

  • संगठन चार्ट — कर्मचारी और उनके प्रबंधक
  • श्रेणी वृक्ष — मूल और अधीनस्थ श्रेणियाँ
  • सामग्री सूची — अन्य घटकों से बने घटक
  • सामाजिक नेटवर्क — एक ही कनेक्शन तालिका में मित्रों के मित्र खोजना

किसी स्कीमा में स्वयं-संदर्भित विदेशी कुंजी की पहचान होना इस बात का पहला संकेत है कि स्वयं-जोड़ की आवश्यकता हो सकती है।

त्वरित जाँच

आगे बढ़ने से पहले स्वयं-जोड़ों की अपनी समझ का परीक्षण कीजिए।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा कि स्वयं-जोड़ क्या होता है और इसका उपयोग कब करना चाहिए:

  • स्वयं-जोड़ किसी तालिका को अलग-अलग उपनामों के साथ दो बार संदर्भित करके उसी तालिका से जोड़ता है
  • बिना मेल वाली पंक्तियों को बाहर करने के लिए INNER JOIN का उपयोग कीजिए, जैसे शीर्ष-स्तरीय प्रबंधकों के लिए, या उन्हें बनाए रखने के लिए LEFT JOIN का उपयोग कीजिए
  • WHERE, GROUP BY और समुच्चय फ़ंक्शनों को ठीक उसी तरह जोड़िए जैसे किसी अन्य जोड़ में जोड़ते हैं
  • एक ही तालिका की पंक्तियों की तुलना करते समय डुप्लिकेट युग्मों से बचने के लिए a.id < b.id का उपयोग ON खंड में कीजिए
  • पदानुक्रमित डेटा, श्रेणी वृक्षों और किसी भी स्वयं-संदर्भित संबंध के लिए स्वयं-जोड़ सबसे उपयोगी साधन हैं

अगला विषय: पुनरावर्ती CTEs के साथ बहु-स्तरीय पदानुक्रमों का अध्ययन।

शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
46
पाठ
183

अक्सर पूछे जाने वाले प्रश्न

क्या “सेल्फ JOIN क्या है” पाठ निःशुल्क है?

हाँ—“सेल्फ JOIN क्या है” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“सेल्फ JOIN क्या है” में मैं क्या सीखूँगा?

उपनामों के साथ किसी तालिका को स्वयं से JOIN करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“सेल्फ JOIN क्या है” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. सेल्फ JOIN क्या है
  2. कर्मचारी और प्रबंधक
  3. एक ही तालिका की पंक्तियों की तुलना
  4. सेल्फ JOIN की सीमाएँ
← SQL Academy पर वापस जाएँ