2013-04-13 6 views
13

में एकाधिक तालिकाओं में शामिल होना क्या कोई मुझे शामिल होने के बारे में बता सकता है?एसक्यूएल

इनर जॉइन स्थिति के आधार पर सामान्य डेटा का चयन करता है।

बाएं बाहरी जॉइन सामान्य के बावजूद बाएं से सभी डेटा का चयन करता है लेकिन सही तालिका से सामान्य डेटा लेता है और इसके विपरीत दाएं बाहरी के लिए।

मुझे मूल बातें पता हैं लेकिन प्रश्न 5, 8, 10 टेबल के लिए शामिल होने पर आता है।

मान लीजिए कि मेरे पास शामिल होने के लिए 10 टेबल हैं। अगर मेरे पास पहले 5 टेबल के साथ आंतरिक शामिल है और अब 6 वीं तालिका के साथ बाएं जुड़ने का प्रयास करें, तो क्वेरी कैसे काम करेगी?

मेरा मतलब है कि अब पहली 5 टेबल का परिणाम सेट बाएं टेबल के रूप में लिया जाएगा और 6 वें को सही तालिका के रूप में माना जाएगा? या केवल पांचवीं तालिका को बाएं और 6 वें के रूप में माना जाएगा? कृपया इसके बारे में मेरी मदद करें।

+1

[एसक्यूएल के दृश्य प्रतिनिधित्व शामिल हैं] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) –

+0

@ जॉन वू उस पोस्ट को इसके द्वारा अस्वीकार कर दिया गया है टिप्पणियों में लेखक। वेन आरेख इस बात को स्पष्ट नहीं करते हैं कि कैसे एक सामान्य जुड़ाव इसके इनपुट से संबंधित है। – philipxy

उत्तर

17

एकाधिक तालिकाओं में शामिल होने पर प्रत्येक के आउटपुट तार्किक रूप से एक वर्चुअल टेबल बनाता है जो अगले जुड़ में जाता है।

तो आपके प्रश्न में उदाहरण में पहले 5 तालिकाओं में शामिल होने के समग्र परिणाम को बाएं हाथ की मेज के रूप में माना जाएगा।

इस बारे में अधिक जानकारी के लिए Itzik Ben-Gan's Logical Query Processing Poster देखें।

जॉइन में शामिल वर्चुअल टेबल ON खंड को स्थितिबद्ध करके नियंत्रित किया जा सकता है। उदाहरण के लिए

SELECT * 
FROM T1 
     INNER JOIN T2 
     ON T2.C = T1.C 
     INNER JOIN T3 
        LEFT JOIN T4 
        ON T4.C = T3.C 
     ON T3.C = T2.C 

(T1 Inner Join T2) Inner Join (T3 Left Join T4)

+2

फिर "वर्चुअल टेबल ... ऑन क्लॉज को स्थितिबद्ध करके नियंत्रित किया जा सकता है" कूल! क्या सभी सामान्य एसक्यूएल बोलियां उस पर नजर रखती हैं? –

+2

@PieterGeerkens - हाँ यह एएनएसआई एसक्यूएल है। जैसे [पोस्टग्रेस फीडल] (http://www.sqlfiddle.com/#!1/c3de8/1) और [माईएसक्यूएल फ़िल्ड] (http://www.sqlfiddle.com/#!8/c3de8/3)। हालांकि MySQL को कोष्ठक की आवश्यकता है। –

5

यह अनुक्रम में JOIN के सोचने के लिए उपयोगी है के बराबर है, इसलिए पूर्व सही है।

SELECT * 
    FROM a 
    INNER JOIN b ON b.a = a.id 
    INNER JOIN c ON c.b = b.id 
    LEFT JOIN d ON d.c = c.id 
    LEFT JOIN e ON e.d = d.id 

a और b और c जहां सभी ON मानदंड से मेल खाने सभी क्षेत्रों, प्लस d से मूल्यों जहां इसकी मानदंड से मेल खाते के साथ साथ e जहां सभी अपने मानदंडों का मिलान की सभी सामग्री होगा।

मुझे पता है RIGHT JOIN पूरी तरह से स्वीकार्य है, लेकिन मुझे अपने अनुभव में पाया गया है कि यह अनावश्यक है - मैं लगभग हमेशा बाएं से दाएं चीजों में शामिल होता हूं।

1

> सरल अंदरूनी शामिल हों देखें कोड ...

CREATE VIEW room_view 
AS SELECT a.*,b.* 
FROM j4_booking a INNER JOIN j4_scheduling b 
on a.room_id = b.room_id; 
0

आप इस तरह शामिल हो आवेदन कर सकते हैं ..

select a.*,b.*,c.*,d.*,e.* 
from [DatabaseName].[Table_a] a 
INNER JOIN [DatabaseName].[Table_b] b ON a.id = b.id 
INNER JOIN [DatabaseName].[Table_c] c ON b.id=c.id 
INNER JOIN [DatabaseName].[Table_d] d on c.id=d.id 
INNER JOIN [DatabaseName].[Table_e] e on d.id=e.id where a.con=5 and 
b.con=6 

यहाँ, के। * स्थान पर और जहां हालत में, आप कॉलम (दायर) जो आपको पसंद करते हैं और स्थिति के अनुसार स्थिति कहां दिखा सकते हैं। आप अपनी पसंद के अनुसार अधिक टेबल और डेटाबेस डाल सकते हैं। लेकिन अगर आप अलग-अलग डेटाबेस में काम करते हैं तो आपको डेटाबेस नाम और उपनाम का उल्लेख करने की आवश्यकता है।