आंतरिक जुड़ने के लिए मैंने वास्तव में कोई अंतर नहीं देखा है (लेकिन सभी प्रदर्शन ट्यूनिंग के साथ, आपको अपनी शर्तों के तहत अपने डेटाबेस के खिलाफ जांच करने की आवश्यकता है)।
हालांकि यदि आप बाएं या दाएं जुड़ने का उपयोग कर रहे हैं तो हालात कहां डालते हैं तो यह एक बड़ा अंतर बनाता है। मिसाल के तौर पर इन दो प्रश्नों पर विचार करें:
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderDate >'20090515'
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND ORD.OrderDate >'20090515'
पहले आप केवल उन रिकॉर्ड 15 मई, 2009 की तुलना में बाद दिनांकित इस प्रकार बाईं परिवर्तित करने के लिए एक आदेश है कि एक आंतरिक में शामिल होने में शामिल होने देंगे। दूसरा उन रिकॉर्ड्स और बिना किसी ऑर्डर वाले किसी भी ग्राहक को देगा। आप कहां स्थित स्थिति के आधार पर परिणाम सेट बहुत अलग है। (चुनें * यदि उदाहरण के लिए केवल प्रयोजनों के लिए, आपको उत्पादन कोड में निश्चित रूप से उपयोग नहीं करना चाहिए।) इसका अपवाद तब होता है जब आप केवल एक तालिका में रिकॉर्ड देखना चाहते हैं लेकिन दूसरे नहीं। फिर आप उस स्थिति के लिए कहां उपयोग करते हैं, जिसमें शामिल नहीं है।
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderID is null
क्या आपने दो प्रश्नों को चलाया? क्या आपने दो प्रश्नों से उत्पन्न निष्पादन योजनाओं की जांच की थी? आपने क्या देखा? –
@ एसएलॉट, यह क्वेरी केवल उदाहरण के प्रयोजनों के लिए है। मैं बस "सामान्य में" सोच रहा हूं जो पसंदीदा तरीका है - यदि कोई है। –
@ स्टेव डिग्नान: आपको इसे नमूना डेटा के साथ बेंचमार्क करना चाहिए और क्वेरी योजनाओं को देखना चाहिए। जवाब बहुत स्पष्ट होगा। और - बोनस - आपके पास कोड का एक टुकड़ा होगा जिसका आप पुन: उपयोग कर सकते हैं जब अधिक जटिल परिस्थितियां उत्पन्न होती हैं। –