SQL Server में CROSS JOIN और FULL OUTER JOIN में क्या अंतर है?
वे वही हैं, या नहीं? कृपया समझाएँ। इनमें से कोई एक कब उपयोग होगा?
SQL Server में CROSS JOIN और FULL OUTER JOIN में क्या अंतर है?
वे वही हैं, या नहीं? कृपया समझाएँ। इनमें से कोई एक कब उपयोग होगा?
जवाबों:
एक क्रॉस जॉइन दो तालिकाओं के बीच एक कार्टेसियन उत्पाद का उत्पादन करता है, जो सभी पंक्तियों के सभी संभावित संयोजनों को वापस करता है। इसका कोई on
क्लॉज नहीं है क्योंकि आप हर चीज में हर चीज से जुड़ रहे हैं।
A full outer join
, का संयोजन है left outer
और right outer
जुड़ता है। यह क्वेरी के where
क्लॉज से मेल खाने वाली दोनों तालिकाओं में सभी पंक्तियों को लौटाता है , और ऐसे मामलों में जहां on
उन पंक्तियों के लिए शर्त को पूरा नहीं किया जा सकता है जो इसे null
अनपेक्षित क्षेत्रों के लिए मान डालता है ।
यह विकिपीडिया लेख आउटपुट के उदाहरणों के साथ विभिन्न प्रकार के जुड़नों को बताता है, जिसमें तालिकाओं का एक नमूना सेट दिया गया है।
outer join
तेजी से या cross join
?
एक चीज जो हमेशा कुछ के लिए स्पष्ट नहीं हो सकती है वह यह है कि एक क्रॉस एक खाली तालिका (या परिणाम सेट) के साथ रिक्त तालिका (एम x एन) में शामिल होता है; इसलिए एम एक्स 0 = 0)
एक पूर्ण बाहरी जुड़ाव में हमेशा पंक्तियाँ होंगी जब तक कि M और N दोनों 0 न हों।
मैं अन्य उत्तरों में एक महत्वपूर्ण पहलू जोड़ना चाहूंगा, जिसने वास्तव में मुझे इस विषय को सबसे अच्छे तरीके से समझाया:
यदि 2 ज्वाइन टेबल में M और N पंक्तियाँ हैं, तो क्रॉस जॉइन हमेशा (M x N) पंक्तियों का उत्पादन करेगा, लेकिन पूर्ण बाहरी जुड़ाव MAX (M, N) से (M + N) पंक्तियों तक उत्पन्न होगा (वास्तव में कितनी पंक्तियों के आधार पर) मैच "पर" विधेय)।
संपादित करें:
तार्किक क्वेरी प्रोसेसिंग परिप्रेक्ष्य से, CROSS JOIN वास्तव में हमेशा M x N पंक्तियों का उत्पादन करता है। FULL OUTER JOIN के साथ क्या होता है कि बाएँ और दाएँ दोनों टेबल "संरक्षित" हैं, जैसे कि LEFT और RIGHT दोनों जुड़ गए। इसलिए, पंक्तियों पर संतोषजनक नहीं पंक्तियाँ, बाएँ और दाएँ दोनों तालिकाओं से परिणाम सेट में जोड़ी जाती हैं।
cross join
तालिकाओं को गुणा करता है; एक full outer join
, सबसे खराब स्थिति में उन्हें कहते हैं कि कितने पंक्तियों से मेल .. पर निर्भर करता है
क्रॉस जॉइन: क्रॉस जॉइन्स ऐसे परिणाम उत्पन्न करते हैं जिनमें दो या अधिक टेबलों से पंक्तियों के हर संयोजन से मिलकर बनता है। इसका मतलब है कि यदि तालिका A में 3 पंक्तियाँ हैं और तालिका B में 2 पंक्तियाँ हैं, तो CROSS JOIN का परिणाम 6 पंक्तियों में होगा। दो तालिकाओं के बीच कोई संबंध स्थापित नहीं है - आप सचमुच हर संभव संयोजन का उत्पादन करते हैं।
पूर्ण बाहरी जुड़ाव: एक पूर्ण OUT JOIN न तो "बाएं" है और न ही "दाएं" है - यह दोनों है! इसमें JOIN में भाग लेने वाले टेबल या परिणाम सेट दोनों में से सभी पंक्तियाँ शामिल हैं। जब JOIN के "बाईं ओर" पंक्तियों के लिए कोई मिलान पंक्तियाँ मौजूद नहीं होती हैं, तो आप "सही" पर सेट किए गए परिणाम से नल मानों को देखते हैं। इसके विपरीत, जब JOIN के "दाईं ओर" पंक्तियों के लिए कोई मेलिंग पंक्तियाँ मौजूद नहीं होती हैं, तो आप "बाएँ" पर सेट किए गए परिणाम से नल मानों को देखते हैं।
SQL सर्वर के लिए, CROSS JOIN and FULL OUTER JOIN
भिन्न हैं।
CROSS JOIN
बस दो टेबल का कार्टेशियन उत्पाद है, जो किसी भी फ़िल्टर मापदंड या किसी भी स्थिति के बावजूद।
FULL OUTER JOIN
LEFT OUTER JOIN and RIGHT OUTER JOIN
दो तालिकाओं का अनूठा परिणाम सेट देता है । टेबल के दो कॉलम को मैप करने के लिए इसे ON क्लॉज की भी जरूरत होती है।
तालिका 1 में 10 पंक्तियाँ हैं और तालिका 2 में 20 पंक्तियाँ हैं जिनमें 5 पंक्तियाँ विशिष्ट स्तंभों से मेल खाती हैं।
फिर
CROSS JOIN
परिणाम सेट में 10 * 20 = 200 पंक्तियों को वापस करेगा।
FULL OUTER JOIN
परिणाम सेट में 25 पंक्तियों को वापस करेगा।
FULL OUTER JOIN
(या कोई भी JOIN) हमेशा कम या अधिक के बराबर सेट परिणाम देता हैCartesian Product number
।के
FULL OUTER JOIN
बराबर पंक्तियों की संख्या (पंक्तियों की संख्या द्वाराLEFT OUTER JOIN
) + (पंक्तियों की संख्याRIGHT OUTER JOIN
) - (पंक्तियों की संख्याINNER JOIN
)।
वे समान अवधारणाएं हैं, इसके अलावा NULL मान लौटाया गया है।
निचे देखो:
declare @table1 table( col1 int, col2 int );
insert into @table1 select 1, 11 union all select 2, 22;
declare @table2 table ( col1 int, col2 int );
insert into @table2 select 10, 101 union all select 2, 202;
select
t1.*,
t2.*
from @table1 t1
full outer join @table2 t2 on t1.col1 = t2.col1
order by t1.col1, t2.col1;
/* full outer join
col1 col2 col1 col2
----------- ----------- ----------- -----------
NULL NULL 10 101
1 11 NULL NULL
2 22 2 202
*/
select
t1.*,
t2.*
from @table1 t1
cross join @table2 t2
order by t1.col1, t2.col1;
/* cross join
col1 col2 col1 col2
----------- ----------- ----------- -----------
1 11 2 202
1 11 10 101
2 22 2 202
2 22 10 101
*/
क्रॉस जॉइन करें : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; 2 तालिकाओं (कार्थेसियन उत्पाद) के बीच एक संभावित संयोजन बनाता है
(पूर्ण) बाहरी जुड़ाव : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; प्रत्येक पंक्ति को दोनों तालिकाओं में लौटाता है और इसके परिणाम भी समान मान रखते हैं (मिलान में मिलान)
एक पूर्ण बाहरी जुड़ाव एक बाएं बाहरी जोड़ और एक सही बाहरी जुड़ता है। परिणाम सेट दोनों तालिकाओं से पंक्तियाँ लौटाता है जहाँ स्थितियाँ पूरी होती हैं लेकिन जहाँ कोई मेल नहीं है वहाँ अशक्त कॉलम लौटाता है।
क्रॉस जॉइन एक कार्टेशियन उत्पाद है जिसमें तालिकाओं में शामिल होने के लिए किसी भी शर्त की आवश्यकता नहीं होती है। परिणाम सेट में पंक्तियाँ और स्तंभ होते हैं जो दोनों तालिकाओं का गुणन होते हैं।
यहां एक उदाहरण दिया गया है, जिसमें फुल ओटर जॉइन और क्रोस जॉइन दोनों एक ही परिणाम सेट करते हैं, बिना NULL वापस लौटे। कृपया पूर्ण OOO JOIN के लिए ऑन क्लॉज में 1 = 1 नोट करें:
declare @table1 table ( col1 int, col2 int )
declare @table2 table ( col1 int, col2 int )
insert into @table1 select 1, 11 union all select 2, 22
insert into @table2 select 10, 101 union all select 2, 202
select *
from @table1 t1 full outer join @table2 t2
on 1 = 1
(2 पंक्ति) प्रभावित (2 पंक्ति) प्रभावित col1 col2 col1 कॉल 2 ----------- ----------- ----------- ----------- १ ११ १०१० २ २२ १०१० १ १ २ २०२ २ २ २ २ २०२
select *
from @table1 t1 cross join @table2 t2
col1 col2 col1 कॉल 2 ----------- ----------- ----------- ----------- १ ११ १०१० २ २२ १०१० १ १ २ २०२ २ २ २ २ २०२ (4 पंक्ति) प्रभावित
एसक्यूएल फुल ओवर जॉइन
फुल ओवर जॉइन मैच के बावजूद बाईं टेबल (टेबल 1) से और दाएं टेबल (टेबल 2) से सभी पंक्तियों को लौटाता है।
FULL OUTER JOIN कीवर्ड LEFT OUTER JOIN और RIGHT OUTER JOIN दोनों के परिणाम को जोड़ती है
संदर्भ: http://datasciencemadesimple.com/sql-full-outer-join/
एसक्यूएल क्रॉस जॉइन
एसक्यूएल क्रोस जॉइन में, पहली तालिका के प्रत्येक पंक्ति को दूसरी तालिका की प्रत्येक पंक्ति के साथ मैप किया जाता है।
CROSS JOIN ऑपरेशन के परिणामस्वरूप सेट की गई पंक्तियों की संख्या पहली तालिका में पंक्तियों की संख्या के बराबर है जो दूसरी तालिका में पंक्तियों की संख्या से गुणा की गई है।
क्रॉस जॉइन को कार्टेशियन उत्पाद / कार्टेशियन जॉइन के रूप में भी जाना जाता है
तालिका A में पंक्तियों की संख्या m है, तालिका B में पंक्तियों की संख्या n है और परिणामी तालिका में m * n पंक्तियाँ होंगी
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
हमेशा की तुलना में तेज हो जाएगाFROM t1,t2 WHERE t1.id=t2.id
?