मैं सोच रहा हूं कि इन सभी अलग-अलग योगों को कैसे अलग किया जाए ...
मैं सोच रहा हूं कि इन सभी अलग-अलग योगों को कैसे अलग किया जाए ...
जवाबों:
सरल उदाहरण : चलो कहते हैं कि आपके पास एक Studentsमेज है, और एक Lockersमेज है। एसक्यूएल में, पहली तालिका आप एक में शामिल होने में निर्दिष्ट करते हैं, Studentsयह है, वाम मेज, और दूसरा एक, Lockers, है सही तालिका।
प्रत्येक छात्र को एक लॉकर सौंपा जा सकता है, इसलिए तालिका LockerNumberमें एक कॉलम है Student। एक से अधिक छात्र संभावित रूप से एक एकल लॉकर में हो सकते हैं, लेकिन विशेष रूप से स्कूल वर्ष की शुरुआत में, आपके पास आने वाले कुछ छात्र बिना लॉकर और कुछ लॉकर हो सकते हैं, जिन्हें कोई छात्र नहीं सौंपा गया है।
इस उदाहरण के लिए, मान लें कि आपके पास 100 छात्र हैं , जिनमें से 70 के पास लॉकर हैं। आपके पास कुल 50 लॉकर हैं , जिनमें से 40 में कम से कम 1 छात्र है और 10 लॉकरों में कोई छात्र नहीं है।
INNER JOIN " मुझे सभी छात्रों को लॉकर के साथ दिखाने " के बराबर है ।
बिना लॉकर के कोई भी छात्र, या छात्रों के बिना कोई भी लॉकर गायब नहीं है।
70 पंक्तियों को लौटाता है
बाईं ओर जॉय " यदि उनके पास एक है तो सभी छात्रों को उनके संबंधित लॉकर के साथ " दिखाया जाएगा ।
यह एक सामान्य छात्र सूची हो सकती है, या इसका उपयोग बिना किसी लॉकर वाले छात्रों की पहचान करने के लिए किया जा सकता है।
100 पंक्तियों को लौटाता है
RIGHT OUTER JOIN होगा " मुझे सभी लॉकर दिखाओ, और अगर कोई हो तो छात्रों को उन्हें सौंपा "।
इसका उपयोग उन लॉकरों की पहचान करने के लिए किया जा सकता है जिनके पास कोई छात्र सौंपा नहीं गया है, या बहुत से छात्रों के पास लॉकर हैं।
Lock० पंक्तियों को लौटाता है (४० लॉकरों में in० छात्रों की सूची, और बिना छात्र वाले १० लॉकर)
फुल ओवर जॉइन मूर्खतापूर्ण होगा और शायद ज्यादा उपयोग नहीं होगा।
कुछ ऐसा है " मुझे सभी छात्रों और सभी लॉकरों को दिखाएं, और उन्हें मिलान करें जहां आप कर सकते हैं "
110 पंक्तियाँ (सभी 100 छात्र, जिनमें बिना लॉकर वाले भी शामिल हैं। प्लस 10 लॉकर्स बिना छात्र के)
क्रोस जॉइन भी इस परिदृश्य में काफी मूर्खतापूर्ण है।
यह lockernumberछात्रों की तालिका में लिंक किए गए फ़ील्ड का उपयोग नहीं करता है , इसलिए आप मूल रूप से हर संभव छात्र-से-लॉकर जोड़ी की एक बड़ी विशाल सूची के साथ समाप्त होते हैं, चाहे वह वास्तव में मौजूद हो या नहीं।
5000 पंक्तियाँ लौटाता है (100 छात्र x 50 लॉकर)। खाली लॉकर के साथ नए छात्रों से मेल खाने के लिए शुरुआती बिंदु के रूप में (फ़िल्टरिंग के साथ) उपयोगी हो सकता है।
SELECT * FROM students RIGHT OUTER JOIN lockers...तुलना में एक अलग परिणाम होगा SELECT * FROM lockers RIGHT OUTER JOIN students...। शानदार उत्तर, लेकिन इसे पूर्ण SQLप्रश्नों के साथ अद्यतन देखना पसंद करेंगे
जुड़ने के तीन मूल प्रकार हैं:
INNERजुड़ने के लिए दो तालिकाओं की तुलना करें और केवल वही परिणाम दें जहाँ एक मैच मौजूद है। जब वे 2 में कई परिणामों से मेल खाते हैं तो पहली तालिका के रिकॉर्ड की नकल की जाती है। INNER जुड़ने से परिणाम सेट छोटे हो जाते हैं, लेकिन क्योंकि रिकॉर्ड को दोहराया जा सकता है, इसकी गारंटी नहीं है।CROSSदो तालिकाओं की तुलना में शामिल हों और दोनों तालिकाओं से पंक्तियों के हर संभव संयोजन को वापस करें। इस तरह के जुड़ने से आपको बहुत सारे परिणाम मिल सकते हैं जो कि सार्थक भी नहीं हो सकते हैं, इसलिए सावधानी के साथ उपयोग करें।OUTERएक मैच के उपलब्ध होने या अन्यथा पूर्ण मान होने पर दो तालिकाओं और रिटर्न डेटा की तुलना करें। INNER के साथ जुड़ने की तरह, यह एक तालिका में पंक्तियों की नकल करेगा जब यह दूसरी तालिका में कई रिकॉर्ड से मेल खाता है। OUTER जुड़ने से परिणाम सेट अधिक बड़े हो जाते हैं, क्योंकि वे स्वयं सेट से कोई रिकॉर्ड नहीं निकालेंगे। NULL मान कब और कहाँ जोड़ना है, यह निर्धारित करने के लिए आपको एक OUTER ज्वाइन करना होगा:
LEFT इसका मतलब यह है कि 1 तालिका से सभी रिकॉर्ड रखें कोई बात नहीं और जब 2 तालिका मेल नहीं खाती है तो पूर्ण मान डालें। RIGHT इसका अर्थ है: 2 तालिका से सभी रिकॉर्ड रखें चाहे वह कोई भी हो और पूर्ण मान दर्ज न करें वह 1 तालिका से मेल नहीं खाता है। FULL इसका मतलब है कि दोनों तालिकाओं से सभी रिकॉर्ड रखें, और मिलान न होने पर या तो तालिका में एक पूर्ण मान डालें।अक्सर आप देखेंगे OUTERकि सिंटैक्स से कीवर्ड छोड़ा जाएगा । इसके बजाय यह "LEFT JOIN", "राइट जॉइन", या "FULL JOIN" होगा। ऐसा इसलिए किया जाता है क्योंकि INNER और CROSS जॉइन का LEFT, RIGHT, या FULL के संबंध में कोई मतलब नहीं है, और इसलिए ये खुद से पर्याप्त हैं कि किसी OUTER जॉइन को इंगित करें।
जब आप प्रत्येक प्रकार का उपयोग करना चाहते हैं, तो यहां एक उदाहरण दिया गया है:
INNER: आप "इनवॉयस" तालिका से सभी रिकॉर्ड वापस करना चाहते हैं, साथ ही उनके "इनवॉयललाइन" के साथ। यह मानता है कि प्रत्येक वैध चालान में कम से कम एक पंक्ति होगी।OUTER: आप एक विशेष इनवॉइस के लिए सभी "इनवॉयललाइन" रिकॉर्ड, उनके संबंधित "इन्वेंटरी इटेम" रिकॉर्ड के साथ वापस करना चाहते हैं। यह एक व्यवसाय है जो सेवा भी बेचता है, जैसे कि सभी इनवॉयललाइन में IventoryItem नहीं होगा।CROSS: आपके पास 10 पंक्तियों के साथ एक अंक तालिका है, प्रत्येक धारण मान '0' के माध्यम से '9' है। आप इसमें शामिल होने के लिए एक तिथि सीमा तालिका बनाना चाहते हैं, ताकि आप सीमा के भीतर प्रत्येक दिन के लिए एक रिकॉर्ड समाप्त कर सकें। अपने आप को बार-बार इस तालिका से जोड़कर आप लगातार कई पूर्णांकों को बना सकते हैं (यदि आप 10 से 1 शक्ति से शुरू करते हैं, तो प्रत्येक जोड़ 1 को घातांक में जोड़ता है)। फिर उन मानों को श्रेणी के लिए अपनी आधार तिथि में जोड़ने के लिए DATEADD () फ़ंक्शन का उपयोग करें।केवल 4 प्रकार हैं:
NULLप्रत्येक के लिए दाईं ओर तालिका में मान। इसका मतलब यह है कि बाईं ओर तालिका से प्रत्येक पंक्ति आउटपुट में कम से कम एक बार दिखाई देगी। एक "क्रॉस जॉइन" या "कार्टेशियन जॉइन" बस एक आंतरिक जॉइन है, जिसके लिए कोई जॉइन की स्थिति निर्दिष्ट नहीं की गई है, जिसके परिणामस्वरूप सभी जोड़े पंक्तियों का आउटपुट है।
रसेल की ओर से फुल जॉइन करने के लिए धन्यवाद, जिसे मैंने छोड़ा था।
एसक्यूएल जॉन्स अंतर:
याद करने के लिए बहुत सरल:
INNER JOIN केवल दोनों तालिकाओं के लिए सामान्य रिकॉर्ड दिखाते हैं।
OUTER JOIN दोनों तालिकाओं की सभी सामग्री को एक साथ मिलाया जाता है या तो उनका मिलान किया जाता है या नहीं।
LEFT JOINके रूप में ही है LEFT OUTER JOIN- (सही बाएं रिकॉर्ड मिलान के साथ पहली (बाएं-सबसे) तालिका से रिकॉर्ड का चयन करें।)
RIGHT JOINके रूप में ही है RIGHT OUTER JOIN- (दूसरी (दाईं-सबसे) तालिका से मेल खाने वाले बाएं रिकॉर्ड के रिकॉर्ड का चयन करें।)
की जाँच करें (SQL) विकिपीडिया पर जुड़ें
बाएँ / दाएँ (बाहरी) में शामिल हों - दो तालिकाओं को देने से सभी पंक्तियाँ वापस आ जाती हैं जो आपके सम्मिलित होने की बाएँ या दाएँ तालिका में मौजूद होती हैं, साथ ही दूसरी तरफ की पंक्तियों को वापस लौटाया जाएगा जब ज्वाइन क्लॉज मैच होता है या अशक्त के लिए वापस आ जाएगा उन स्तंभों
पूर्ण बाहरी - दो तालिकाएं सभी पंक्तियों को लौटाती हैं, और जब या तो बाएं या दाएं स्तंभ नहीं होते हैं तो नल वापस आ जाएंगे
क्रॉस जॉइन्स - कार्टेशियन जॉइन करते हैं और सावधानी से इस्तेमाल न किए जाने पर खतरनाक हो सकते हैं
इसे और अधिक दृश्यमान बनाने में मदद मिल सकती है। एक उदाहरण:
तालिका एक:
ID_STUDENT STUDENT_NAME
1 Raony
2 Diogo
3 Eduardo
4 Luiz
तालिका 2:
ID_STUDENT LOCKER
3 l1
4 l2
5 l3
जब मैं करता हूं तो मुझे क्या मिलता है:
-Inner join of Table 1 and Table 2:
- Inner join returns both tables merged only when the key
(ID_STUDENT) exists in both tables
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
-Left join of Table 1 and Table 2:
- Left join merges both tables with all records form table 1, in
other words, there might be non-populated fields from table 2
ID_ESTUDANTE NOME_ESTUDANTE LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
-Right join of table 1 and table 2:
- Right join merges both tables with all records from table 2, in
other words, there might be non-populated fields from table 1
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
5 - l3
-Outter join of table 1 and table 2:
- Returns all records from both tables, in other words, there
might be non-populated fields either from table 1 or 2.
ID_STUDENT STUDENT_NAME LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
5 - l3
इनर जॉइन : केवल पंक्तियों को दिखाएं, जब उसके पास दोनों तालिकाओं का डेटा हो।
बाहरी जोड़ : (बाएं / दाएं) : युग्मित पंक्ति ( ओं ) के साथ बाएं / दाएं तालिका से सभी परिणाम दिखाएं , अगर यह मौजूद है या नहीं।
सबसे पहले आपको यह समझना होगा कि जुड़ना क्या है? हम कई टेबल कनेक्ट करते हैं और जुड़ने वाले टेबल से विशिष्ट परिणाम प्राप्त करते हैं। ऐसा करने का सबसे सरल तरीका क्रॉस जॉइन है ।
मान लीजिए कि टेबलए में दो कॉलम ए और बी हैं और टेबलबी में तीन कॉलम सी और डी हैं। अगर हम क्रॉस ज्वाइन करते हैं तो यह बहुत अर्थहीन पंक्ति उत्पन्न करेगा। फिर हमें वास्तविक डेटा प्राप्त करने के लिए प्राथमिक कुंजी का उपयोग करके मिलान करना होगा।
बायाँ: यह बाएँ तालिका से सभी रिकॉर्ड लौटाएगा और राइट टेबल से मिलान रिकॉर्ड करेगा।
दाएं: यह लेफ्ट जॉइन के विपरीत लौटेगा। यह राइट टेबल से सभी रिकॉर्ड लौटाएगा और लेफ्ट टेबल से रिकॉर्ड से मिलान करेगा।
इनर: यह चौराहे की तरह है। यह दोनों तालिका से केवल मिलान किए गए रिकॉर्ड लौटाएगा।
बाहरी: और यह संघ की तरह है। यह दोनों तालिका से सभी उपलब्ध रिकॉर्ड लौटाएगा।
कुछ समय के लिए हमें सभी डेटा की आवश्यकता नहीं होती है, और हमें केवल सामान्य डेटा या रिकॉर्ड की भी आवश्यकता होती है। हम आसानी से इसे शामिल होने के तरीकों का उपयोग कर प्राप्त कर सकते हैं। याद रखें कि बाएं और दाएं हाथ भी बाहरी जुड़ाव हैं।
आप केवल क्रॉस जॉइन का उपयोग करके सभी रिकॉर्ड प्राप्त कर सकते हैं। लेकिन यह महंगा हो सकता है जब यह लाखों रिकॉर्ड की बात आती है। इसलिए इसे लेफ्ट, राइट, इनर या आउटर जॉइन करके सरल बनाएं।
धन्यवाद