एकाधिक तालिकाओं से डेटा प्राप्त करें

एकाधिक तालिकाओं से डेटा प्रदर्शित करना

एक बड़े डेटाबेस के संबंधित तालिकाओं को विदेशी और प्राथमिक कुंजी के उपयोग के माध्यम से जोड़ा जाता है या जिन्हें अक्सर सामान्य कॉलम कहा जाता है। तालिकाओं में शामिल होने की क्षमता आपको उत्पादित तालिका में अधिक अर्थ जोड़ने में सक्षम करेगी। क्वेरी में शामिल होने के लिए 'एन' नंबर टेबल के लिए, न्यूनतम (एन -1) शामिल होने की शर्तें आवश्यक हैं। ज्वाइन शर्तों के आधार पर, ओरेकल पंक्तियों की मिलान जोड़ी को जोड़ती है और एक को प्रदर्शित करता है जो जुड़ने की स्थिति को संतुष्ट करता है।

जोड़ों को नीचे वर्गीकृत किया गया है

  • प्राकृतिक जुड़ाव (जिसे समभुज या साधारण जोड़ के रूप में भी जाना जाता है) - सामान्यतः नाम और परिभाषित स्तंभ का उपयोग करके एक जुड़ता है।

  • गैर-बराबरी में शामिल होते हैं - जब किसी अन्य तालिका में मानों की श्रेणी के साथ किसी तालिका के एक स्तंभ में मानों का मिलान करने के लिए तालिकाओं में कोई समान पंक्तियाँ नहीं होती हैं, तो तालिकाओं को जोड़ता है।

  • सेल्फ-जॉइन - अपने आप में एक टेबल से जुड़ता है।

  • बाहरी जुड़ाव - आउटपुट में एक तालिका का रिकॉर्ड शामिल करता है जब अन्य तालिका में कोई मिलान रिकॉर्ड नहीं होता है।

  • कार्टेशियन जॉइन (जिसे कार्टेशियन उत्पाद या क्रॉस जॉइन के रूप में भी जाना जाता है) - पहली पंक्ति से प्रत्येक पंक्ति को दूसरी तालिका से हर पंक्ति के साथ दर्शाता है। हर संभव रिकॉर्ड संयोजन प्रदर्शित करके तालिकाओं के बीच एक जुड़ाव का निर्माण करता है।

प्राकृतिक सम्मिलित हों

NATURAL कीवर्ड एक समभुज के वाक्यविन्यास को सरल बना सकता है। NATURAL JOIN संभव है जब भी दो (या अधिक) तालिकाओं में समान नाम के साथ कॉलम हों, और कॉलम संगत हो, यानी कॉलम में मानों का साझा डोमेन हो। ऑपरेशन उन तालिकाओं से पंक्तियों में जुड़ता है जिनमें समान नाम वाले कॉलम के बराबर स्तंभ मान होते हैं।

DEPARTMENTS और EMPLOYEES तालिकाओं के बीच एक-से-कई संबंधों पर विचार करें। प्रत्येक तालिका में DEPARTMENT_ID नाम का एक स्तंभ होता है। यह स्तंभ DEPARTMENTS तालिका की प्राथमिक कुंजी और EMPLOYEES तालिका की एक विदेशी कुंजी है।

SELECT E.first_name NAME,D.department_name DNAME
FROM employees E NATURAL JOIN departments D;

FIRST_NAME DNAME
---------- ------
MILLER     DEPT 1
JOHN       DEPT 1
MARTIN     DEPT 2
EDWIN      DEPT 2

नीचे का चयन करें क्वेरी ओन कीवर्ड के साथ जुड़ने की स्थिति को स्पष्ट रूप से निर्दिष्ट करके दो तालिकाओं में मिलती है।

SELECT E.first_name NAME,D.department_name DNAME
FROM employees E JOIN departments D
ON (E.department_id = D.department_id);

NATURAL JOIN के बारे में कुछ सीमाएँ हैं। आप एक NATOBAL JOIN के साथ एक LOB कॉलम निर्दिष्ट नहीं कर सकते। इसके अलावा, शामिल होने वाले स्तंभों को तालिका नाम या अन्य नाम से योग्य नहीं किया जा सकता है।

क्लाज का उपयोग करना

प्राकृतिक जुड़ावों का उपयोग करते हुए, ओरेकल ने जुड़ने के आधार बनाने के लिए कॉलम की पहचान की। कई स्थितियों में शामिल होने की स्पष्ट घोषणा की आवश्यकता होती है। ऐसे मामलों में, हम शामिल होने के मानदंडों को निर्दिष्ट करने के लिए USING खंड का उपयोग करते हैं। चूंकि, USING क्लॉज स्तंभों की समानता के आधार पर तालिकाओं में शामिल होता है, इसलिए इसे Equijoin के रूप में भी जाना जाता है। उन्हें इनर जॉइन या साधारण जॉइन के रूप में भी जाना जाता है।

वाक्य - विन्यास:

SELECT <column list>
FROM   TABLE1   JOIN   TABLE2	
USING (column name)

नीचे चयनित क्वेरी पर विचार करें, समान तालिका और उपकरणों तालिका सामान्य स्तंभ DEID का उपयोग कर शामिल हो गए हैं।

SELECT E.first_name NAME,D.department_name DNAME
FROM employees E JOIN departments D
USING (department_id);

स्वयं सम्मिलित हों

एक SELF-JOIN ऑपरेशन एक परिणाम तालिका का निर्माण करता है जब ब्याज का संबंध उन पंक्तियों के बीच मौजूद होता है जो एकल तालिका में संग्रहीत होती हैं। दूसरे शब्दों में, जब एक टेबल खुद से जुड़ जाती है, तो ज्वाइन को सेल्फ जॉइन के नाम से जाना जाता है।

EMPLOYEES तालिका पर विचार करें, जिसमें कर्मचारी और उनके रिपोर्टिंग प्रबंधक शामिल हैं। किसी कर्मचारी के लिए प्रबंधक का नाम खोजने के लिए EMP तालिका पर ही शामिल होने की आवश्यकता होगी। यह सेल्फ जॉइन के लिए एक विशिष्ट उम्मीदवार है।

SELECT e1.FirstName Manager,e2.FirstName Employee
FROM employees e1 JOIN employees e2
ON (e1.employee_id = e2.manager_id)
ORDER BY e2.manager_id DESC;

गैर विषुव

एक गैर-बराबरी में शामिल होने का उपयोग तब किया जाता है जब संबंधित कॉलम को एक समान साइन-अर्थ के साथ नहीं जोड़ा जा सकता है, जिसमें शामिल होने के लिए तालिकाओं में कोई समान पंक्तियां नहीं हैं। गैर-समानता शामिल होने से आप एक कॉलम में किसी श्रेणी के न्यूनतम मान को स्टोर करने में सक्षम होते हैं एक रिकॉर्ड में और दूसरे कॉलम में अधिकतम मूल्य। इसलिए कॉलम-इनकॉल्यूम मैच ढूंढने के बजाय, आप यह निर्धारित करने के लिए एक गैर-बराबरी के जुड़ने का उपयोग कर सकते हैं कि क्या भेजी जा रही वस्तु कॉलम में न्यूनतम और अधिकतम सीमाओं के बीच आती है। यदि जुड़ने पर आइटम के लिए एक मिलान सीमा मिलती है, तो समान शिपिंग परिणामों में शुल्क वापस किया जा सकता है। समानता की पारंपरिक पद्धति में शामिल होने के साथ, एक गैर-समानता में शामिल किया जा सकता है, जहां WHERE क्लॉज में प्रदर्शन किया जा सकता है। इसके अलावा, जॉइन कीवर्ड का इस्तेमाल ऑन क्लॉज के साथ जुड़ने के लिए संबंधित कॉलम को निर्दिष्ट करने के लिए किया जा सकता है।

SELECT E.first_name,
            J.job_hisal,
            J.job_losal,
            E.salary
     FROM employees E JOIN job_sal J
     ON (E.salary BETWEEN J.job_losal AND J.job_losal);

हम समानता और असमानता ऑपरेटरों की तरह पहले से चर्चा किए गए सभी तुलना पैरामीटर का उपयोग कर सकते हैं, बेटविन, आईएस नाल, आईएस नॉट नाउल, और रिलेशनल।

बाहरी जोड़

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

तीन प्रकार के बाहरी जुड़ाव हैं: LEFT, RIGHT और FULL OUTER JOIN। वे सभी एक INNER JOIN से शुरू होते हैं, और फिर वे कुछ पंक्तियों को वापस जोड़ देते हैं जिन्हें गिरा दिया गया है। एक बाईं ओर जॉय ज्वाइन कंडीशन में पहली (लेफ्ट) टेबल से हटाई गई सभी पंक्तियों को वापस जोड़ता है, और दूसरी (दाएं) टेबल से आउटपुट कॉलम NULL पर सेट होता है। RIGHT OUTER JOIN में वे सभी पंक्तियाँ शामिल होती हैं जो दूसरी (दाईं) टेबल से ज्वाइन कंडीशन में हटाई जाती हैं, और पहली (बाएँ) टेबल से आउटपुट कॉलम NULL पर सेट होते हैं। फुल ओवर जॉइन उन सभी पंक्तियों को वापस जोड़ता है जो दोनों तालिकाओं से हटा दी गई हैं।

राइट आउटर जॉइन करें

RIGHT OUTER JOIN में वे सभी पंक्तियाँ शामिल होती हैं जो दूसरी (दाईं) टेबल से ज्वाइन कंडीशन में हटाई जाती हैं, और पहली (बाएँ) टेबल से आउटपुट कॉलम NULL पर सेट होते हैं। नीचे दी गई क्वेरी को कर्मचारियों और उनके संबंधित विभागों को सूचीबद्ध करता है। साथ ही किसी भी कर्मचारी को विभाग 30 को नहीं सौंपा गया है।

SELECT E.first_name, E.salary, D.department_id          
FROM employees E, departments D
WHERE E.DEPARTMENT_ID (+) = D.DEPARTMENT_ID;

FIRST_NAME SALARY     DEPARTMENT_ID
---------- ---------- ----------
JOHN       6000       10
EDWIN      2000       20
MILLER     2500       10
MARTIN     4000       20
                      30

बाईं ओर का बाहरी जोड़

एक बाईं ओर जॉय ज्वाइन कंडीशन में पहली (लेफ्ट) टेबल से हटाई गई सभी पंक्तियों को वापस जोड़ता है, और दूसरी (दाएं) टेबल से आउटपुट कॉलम NULL पर सेट होता है। ऊपर प्रदर्शित क्वेरी को (+) चिह्न की स्थिति का आदान-प्रदान करके बाईं बाहरी जुड़ाव को प्रदर्शित करने के लिए इस्तेमाल किया जा सकता है।

SELECT E.first_name, E.salary, D.department_id
FROM employees E, departments D
WHERE   D.DEPARTMENT_ID = E.DEPARTMENT_ID (+);

FIRST_NAME SALARY     DEPARTMENT_ID
---------- ---------- ----------
JOHN       6000       10
EDWIN      2000       20
MILLER     2500       10
MARTIN     4000       20
                      30

पूर्ण बाहरी सम्मिलित हों

फुल ओवर जॉइन उन सभी पंक्तियों को वापस जोड़ता है जो दोनों तालिकाओं से हटा दी गई हैं। नीचे क्वेरी से पता चलता है कि कर्मचारियों और उनके विभागों की सूची है। ध्यान दें कि कर्मचारी 'MAN' को अब तक कोई विभाग नहीं सौंपा गया है (यह NULL है) और विभाग 30 किसी कर्मचारी को नहीं सौंपा गया है।

SELECT  nvl (e.first_name,'-') first_name, nvl (to_char (d.department_id),'-') department_id
FROM employee e FULL OUTER JOIN department d
ON e. depARTMENT_ID = d. depARTMENT_ID;

FIRST_NAME DEPARTMENT_ID
---------- --------------------
MAN        -
JOHN       10
EDWIN      20
MILLER     10
MARTIN     20
-          30

6 rows selected.

कार्तीय उत्पाद या क्रॉस जॉइन

दो संस्थाओं ए और बी के लिए, ए * बी कार्टेसियन उत्पाद के रूप में जाना जाता है। एक कार्टेशियन उत्पाद में प्रत्येक तालिकाओं से पंक्तियों के सभी संभावित संयोजन होते हैं। इसलिए, जब 10 पंक्तियों वाली एक तालिका 20 पंक्तियों वाली तालिका में शामिल हो जाती है, तो कार्टेशियन उत्पाद 200 पंक्तियों (10 * 20 = 200) है। उदाहरण के लिए, आठ पंक्तियों के साथ कर्मचारी तालिका में शामिल होने और तीन पंक्तियों के साथ विभाग तालिका का उत्पादन करेगा 24 पंक्तियों की एक कार्टेशियन उत्पाद तालिका (8 * 3 = 24)।

क्रॉस जॉइन दो टेबल के कार्टेशियन उत्पाद को संदर्भित करता है। यह दो तालिकाओं के क्रॉस उत्पाद का उत्पादन करता है। उपरोक्त क्वेरी को CROSS JOIN क्लॉज का उपयोग करके लिखा जा सकता है।

कार्टेशियन उत्पाद परिणाम तालिका सामान्य रूप से बहुत उपयोगी नहीं है। वास्तव में, ऐसी परिणाम तालिका भयानक रूप से भ्रामक हो सकती है। यदि आप EMPLOYEES और DEPARTMENTS तालिकाओं के लिए नीचे दी गई क्वेरी को निष्पादित करते हैं, तो परिणाम तालिका का अर्थ है कि प्रत्येक कर्मचारी का हर विभाग के साथ एक संबंध है, और हम जानते हैं कि यह बस ऐसा नहीं है!

SELECT E.first_name, D.DNAME
FROM employees E,departments D;
क्रॉस जॉइन के रूप में लिखा जा सकता है,
SELECT E.first_name, D.DNAME
FROM employees E CROSS JOIN departments D;