Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

उदाहरण के साथ SQL जॉइन प्रकारों का अवलोकन

SQL JOIN एक क्लॉज है जिसका उपयोग कई तालिकाओं को संयोजित करने और रिलेशनल डेटाबेस में एक सामान्य फ़ील्ड के आधार पर डेटा को पुनः प्राप्त करने के लिए किया जाता है। डेटाबेस पेशेवर डेटा अखंडता को सुनिश्चित करने और सुधारने के लिए सामान्यीकरण का उपयोग करते हैं। विभिन्न सामान्यीकरण रूपों में, डेटा को कई तार्किक तालिकाओं में वितरित किया जाता है। SQL सर्वर तालिकाओं में डेटा अखंडता को लागू करने के लिए ये तालिकाएँ संदर्भात्मक बाधाओं - प्राथमिक कुंजी और विदेशी कुंजियों का उपयोग करती हैं। नीचे दी गई छवि में, हमें डेटाबेस सामान्यीकरण प्रक्रिया की एक झलक मिलती है।

विभिन्न SQL JOIN प्रकारों को समझना

SQL JOIN कई संबंधपरक तालिकाओं को मिलाकर सार्थक डेटा उत्पन्न करता है। ये तालिकाएँ एक कुंजी का उपयोग करके संबंधित हैं और इनमें एक-से-एक या एक-से-अनेक संबंध हैं। सही डेटा प्राप्त करने के लिए, आपको डेटा आवश्यकताओं को जानना चाहिए और सही जॉइन मैकेनिज्म को जानना चाहिए। SQL सर्वर एकाधिक जॉइन का समर्थन करता है और प्रत्येक विधि में एकाधिक तालिकाओं से डेटा पुनर्प्राप्त करने का एक विशिष्ट तरीका होता है। नीचे दी गई छवि समर्थित SQL सर्वर जॉइन को निर्दिष्ट करती है।

एसक्यूएल इनर जॉइन

SQL इनर जॉइन में उन तालिकाओं की पंक्तियाँ शामिल हैं जहाँ शामिल होने की शर्तें संतुष्ट हैं। उदाहरण के लिए, नीचे दिए गए वेन आरेख में, आंतरिक जुड़ाव तालिका A और तालिका B से मेल खाने वाली पंक्तियों को लौटाता है।

नीचे दिए गए उदाहरण में, निम्नलिखित बातों पर ध्यान दें:

  • हमारे पास दो टेबल हैं - [कर्मचारी] और [पता]।
  • एसक्यूएल क्वेरी को [कर्मचारी].[एम्पिड] और [पता]।[आईडी] कॉलम में जोड़ा गया है।

क्वेरी आउटपुट दोनों तालिकाओं में मौजूद EmpID के कर्मचारी रिकॉर्ड लौटाता है।

आंतरिक जुड़ाव दोनों तालिकाओं से मेल खाने वाली पंक्तियों को लौटाता है; इसलिए, इसे इक्वी जॉइन के रूप में भी जाना जाता है। यदि हम इनर कीवर्ड निर्दिष्ट नहीं करते हैं, तो SQL सर्वर इनर जॉइन ऑपरेशन करता है।

एक अन्य प्रकार के इनर जॉइन में, एक थीटा जॉइन, हम ON क्लॉज में इक्वलिटी ऑपरेटर (=) का उपयोग नहीं करते हैं। इसके बजाय, हम गैर-समानता ऑपरेटरों जैसे <और> का उपयोग करते हैं।

चुनें * Table1 T1, Table2 T2 से जहां T1.Price

एसक्यूएल सेल्फ-जॉइन

सेल्फ-जॉइन में, SQL सर्वर टेबल को अपने साथ जोड़ता है। इसका मतलब है कि तालिका का नाम खंड से दो बार प्रकट होता है।

नीचे, हमारे पास एक तालिका [Emp] है जिसमें कर्मचारियों के साथ-साथ उनके प्रबंधकों का डेटा भी है। सेल्फ-जॉइन पदानुक्रमित डेटा को क्वेरी करने के लिए उपयोगी है। उदाहरण के लिए, कर्मचारी तालिका में, हम प्रत्येक कर्मचारी और उनके रिपोर्टिंग प्रबंधक का नाम जानने के लिए सेल्फ़-जॉइन का उपयोग कर सकते हैं।

उपरोक्त क्वेरी [Emp] टेबल पर सेल्फ-जॉइन करती है। यह EmpMgrID कॉलम को EmpID कॉलम से जोड़ता है और मेल खाने वाली पंक्तियों को लौटाता है।

एसक्यूएल क्रॉस जॉइन

क्रॉस जॉइन में, SQL सर्वर दोनों तालिकाओं से एक कार्टेशियन उत्पाद देता है। उदाहरण के लिए, नीचे दी गई छवि में, हमने तालिका A और B के लिए क्रॉस-जॉइन किया है।

क्रॉस जॉइन तालिका A से प्रत्येक पंक्ति को तालिका B में उपलब्ध प्रत्येक पंक्ति से जोड़ता है। इसलिए, आउटपुट को दोनों तालिकाओं के कार्टेशियन उत्पाद के रूप में भी जाना जाता है। नीचे दी गई छवि में, निम्नलिखित पर ध्यान दें:

  • तालिका [कर्मचारी] में Emp ID 1,2 और 3 के लिए तीन पंक्तियाँ हैं।
  • तालिका [पता] में Emp ID 1,2,7 और 8 के रिकॉर्ड हैं।

क्रॉस-जॉइन आउटपुट में, [कर्मचारी] तालिका की पंक्ति 1 [पता] तालिका की सभी पंक्तियों के साथ जुड़ती है और शेष पंक्तियों के लिए समान पैटर्न का अनुसरण करती है।

यदि पहली तालिका में पंक्तियों की संख्या x है और दूसरी तालिका में पंक्तियों की संख्या n है, तो क्रॉस जॉइन आउटपुट में x*n पंक्तियों की संख्या देता है। आपको बड़ी टेबल पर क्रॉस जॉइन से बचना चाहिए क्योंकि यह बड़ी संख्या में रिकॉर्ड लौटा सकता है और SQL सर्वर को इस तरह के व्यापक डेटा को संभालने के लिए बहुत अधिक कंप्यूटिंग शक्ति (CPU, मेमोरी और IO) की आवश्यकता होती है।

SQL बाहरी जुड़ाव

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

नीचे दी गई छवि उच्च-स्तर पर बाएँ, दाएँ और पूर्ण बाहरी जुड़ाव का वर्णन करती है।

बाएं बाहरी जुड़ाव

SQL लेफ्ट आउटर जॉइन दोनों टेबल की मैचिंग रो और लेफ्ट टेबल से बेजोड़ रो देता है। यदि बाईं तालिका के रिकॉर्ड में दाईं तालिका में कोई मेल खाने वाली पंक्तियाँ नहीं हैं, तो यह रिकॉर्ड को NULL मानों के साथ प्रदर्शित करता है।

नीचे दिए गए उदाहरण में, बायां बाहरी जुड़ाव निम्नलिखित पंक्तियों को लौटाता है:

  • मेल खाने वाली पंक्तियाँ:Emp ID 1 और 2 बाएँ और दाएँ दोनों तालिकाओं में मौजूद है।
  • बेजोड़ पंक्ति:Emp ID 3 सही टेबल पर मौजूद नहीं है। इसलिए, हमारे पास क्वेरी आउटपुट में NULL मान है।

दायां बाहरी जुड़ाव

SQL दायाँ बाहरी जुड़ाव दोनों तालिकाओं की मिलान पंक्तियों के साथ-साथ दाएँ तालिका से बेजोड़ पंक्तियों को लौटाता है। यदि दाएँ तालिका के रिकॉर्ड में बाएँ तालिका में कोई मेल खाने वाली पंक्तियाँ नहीं हैं, तो यह रिकॉर्ड को NULL मानों के साथ प्रदर्शित करता है।

नीचे दिए गए उदाहरण में, हमारे पास निम्न आउटपुट पंक्तियाँ हैं:

  • मिलती हुई पंक्तियाँ:Emp ID 1 और 2 दोनों तालिकाओं में मौजूद हैं; इसलिए, ये पंक्तियाँ मिलान वाली पंक्तियाँ हैं।
  • बेजोड़ पंक्तियाँ:दाएँ तालिका में, हमारे पास Emp ID 7 और 8 के लिए अतिरिक्त पंक्तियाँ हैं, लेकिन ये पंक्तियाँ बाएँ तालिका में उपलब्ध नहीं हैं। इसलिए, हमें इन पंक्तियों के लिए सही बाहरी जुड़ाव में NULL मान मिलता है।

पूर्ण बाहरी जुड़ाव

एक पूर्ण बाहरी जुड़ाव आउटपुट में निम्नलिखित पंक्तियाँ लौटाता है:

  • दो तालिकाओं के बीच पंक्तियों का मिलान करना।
  • बाएं बाहरी जुड़ाव के समान बेजोड़ पंक्तियाँ:दाएँ तालिका से बेजोड़ पंक्तियों के लिए NULL मान।
  • बाएं बाहरी जुड़ाव के समान बेजोड़ पंक्तियां:बाईं तालिका से बेजोड़ पंक्तियों के लिए शून्य मान।

SQL एकाधिक तालिकाओं के साथ जुड़ता है

पिछले उदाहरणों में, हम जॉइन ऑपरेशन करने के लिए SQL क्वेरी में दो तालिकाओं का उपयोग करते हैं। अधिकतर, हम कई तालिकाओं को एक साथ जोड़ते हैं और यह प्रासंगिक डेटा लौटाता है।

नीचे दी गई क्वेरी कई इनर जॉइन का उपयोग करती है।

USE [AdventureWorks2019]GOSELECT e.[BusinessEntityID] ,p.[FirstName] ,p.[MiddleName] ,p.[LastName] ,e.[JobTitle],d.[Name] AS [Department] ,d. [GroupName] ,edh.[StartDate] FROM [HumanResources]। .[BusinessEntityID] =edh.[BusinessEntityID] इनर जॉइन [मानव संसाधन]। 

आइए निम्नलिखित चरणों में क्वेरी का विश्लेषण करें:

  • मध्यवर्ती परिणाम 1:  पहला आंतरिक जुड़ाव [मानव संसाधन] के बीच है। [कर्मचारी] और [व्यक्ति]। [व्यक्ति] तालिका।
  • मध्यवर्ती परिणाम 2:  [इंटरमीडिएट परिणाम 1] और [मानव संसाधन] के बीच आंतरिक जुड़ाव। [कर्मचारी विभाग इतिहास] तालिका।
  • मध्यवर्ती परिणाम 3:  [इंटरमीडिएट परिणाम 2] और [मानव संसाधन]। [विभाग] तालिका के बीच आंतरिक जुड़ाव।

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

NULL मान और SQL जुड़ते हैं

मान लीजिए कि हमारे पास टेबल कॉलम में NULL मान हैं, और हम उन कॉलम पर टेबल में शामिल होते हैं। क्या SQL सर्वर NULL मानों से मेल खाता है?

NULL मान एक दूसरे से मेल नहीं खाते। इसलिए, SQL सर्वर मेल खाने वाली पंक्ति वापस नहीं कर सका। नीचे दिए गए उदाहरण में, हमारे पास [कर्मचारी] तालिका के EmpID कॉलम में NULL है। इसलिए, आउटपुट में, यह केवल [EmpID] 2 के लिए मिलान वाली पंक्ति लौटाता है।

SQL बाहरी जुड़ने की स्थिति में हम इस NULL पंक्ति को आउटपुट में प्राप्त कर सकते हैं क्योंकि यह बेजोड़ पंक्तियों को भी लौटाता है।

एसक्यूएल सर्वोत्तम प्रथाओं में शामिल होता है

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

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में TSQL और GUI द्वारा तालिका में पहचान कॉलम कैसे जोड़ें - SQL सर्वर / T-SQL ट्यूटोरियल भाग 40

  2. मैं SQL सर्वर में समय की तुलना कैसे कर सकता हूं?

  3. SQL सर्वर ट्यूनिंग - यह सब माप के बारे में है

  4. SQL सर्वर में JSON दस्तावेज़ से डुप्लिकेट कुंजियाँ कैसे लौटाएँ?

  5. क्या MS SQL सर्वर में 'INSERT INTO' स्क्रिप्ट उत्पन्न करने के लिए कोई निःशुल्क उपकरण हैं?