2011-03-14 20 views
13

मान लें कि हमारे पास दो टेबल हैं, Users और Postsuser_idPosts तालिका में विदेशी कुंजी है और Users तालिका में प्राथमिक कुंजी है।इन दो जुड़ने वाली तालिका दृष्टिकोणों के बीच अंतर?

इन दो एसक्यूएल प्रश्नों के बीच क्या अंतर है?

select user.name, post.title 
    from users as user, posts as post 
where post.user_id = user.user_id; 

बनाम

select user.name, post.title 
    from users as user join posts as post using user_id; 

उत्तर

11

छोटे स्निपेट के लिए वाक्यविन्यास के अलावा, वे बिल्कुल वही काम करते हैं। लेकिन यदि संभव हो, तो हमेशा एएनएसआई-जॉइन का उपयोग करके नए प्रश्न लिखें।

अर्थात् के रूप में, अल्पविराम नोटेशन का उपयोग दो टेबलों के बीच कार्टेशियन उत्पाद का उत्पादन करने के लिए किया जाता है, जिसका मतलब तालिका बी से सभी रिकॉर्ड्स के साथ तालिका ए से सभी रिकॉर्ड्स का मैट्रिक्स उत्पन्न होता है, इसलिए 4 और 6 रिकॉर्ड के साथ क्रमशः दो टेबल 24 रिकॉर्ड WHERE क्लॉज का उपयोग करके, फिर आप इस कार्टेशियन उत्पाद से वास्तव में इच्छित पंक्तियों को चुन सकते हैं। हालांकि, MySQL वास्तव में इस विशाल मैट्रिक्स का पालन नहीं करता है, लेकिन अर्थात् इसका अर्थ यह है कि इसका क्या अर्थ है।

एक जॉइन सिंटैक्स एएनएसआई मानक है जो अधिक स्पष्ट रूप से परिभाषित करता है कि टेबल कैसे इंटरैक्ट करते हैं। ONJOIN के बगल में क्लॉज डालकर, यह स्पष्ट करता है कि दो तालिकाओं को एक साथ जोड़ता है।

कार्यात्मक रूप से, वे आपके दो प्रश्नों के लिए भी ऐसा ही करेंगे। जब आप अन्य [OUTER] जॉइन प्रकारों का उपयोग शुरू करते हैं तो अंतर आता है।

MySQL के लिए विशेष रूप से, कॉमा-अंकन does have one difference

STRAIGHT_JOIN समान JOIN करने के लिए, सिवाय इसके कि बायां तालिका हमेशा सही तालिका से पहले पढ़ रहा है। इसका उपयोग उन (कुछ) मामलों के लिए किया जा सकता है जिनके लिए जुड़ने वाले ऑप्टिमाइज़र गलत क्रम में टेबल रखता है।

हालांकि, यह इस अंतर पर बैंक के लिए not be wise होगा।

+0

MySQL में, ',' (== 'STRAIGHT_JOIN') और 'जॉइन' के बीच एक सूक्ष्म अंतर है। –

+0

तो कॉमा-नोटेशन आंतरिक जुड़ने जैसा ही है? और क्या कार्टेशियन उत्पाद अधिक संसाधन लेगा और फिर शामिल होगा ?? –

+0

@ जेसन [कार्टेशियन उत्पाद] (http://en.wikipedia.org/wiki/Cartesian_product) SQL में एसईटी-आधारित ऑपरेशन का वर्णन करने के लिए उपयोग किए जाने वाले दो सेटों के बीच एक गणितीय ऑपरेशन है।आपके दो प्रश्न सभी गहन उद्देश्यों के लिए समान हैं, इसलिए न तो अधिक संसाधन लेंगे – RichardTheKiwi

2

MySQL JOIN syntax, CROSS JOIN, INNER JOIN में, और JOIN सब एक ही हैं। एक अल्पविराम से अलग तालिका सूची STRAIGHT_JOIN है, जो JOIN के लगभग समान है, सिवाय इसके कि बाएं तालिका हमेशा पहले पढ़ी जाती है। मैनुअल के अनुसार, यह उपयोगी है "उन (कुछ) मामलों के लिए जिनके लिए जुड़ने वाले ऑप्टिमाइज़र गलत क्रम में टेबल रखता है।"

4
where post.user_id = user.user_id 

यहाँ आप एक सशर्त बयान

from users as user join posts as post using user_id 

यहाँ आप अंत में विदेशी कुंजी

का उपयोग कर दो तालिकाओं में शामिल हो रहे बना रहे हैं सिर्फ एक ही है, लेकिन शामिल हों बेहतर और अधिक उन्नत के लिए इस्तेमाल किया जाता है प्रश्न ...

संबंधित मुद्दे