2009-03-27 19 views

उत्तर

21

कोई फर्क नहीं पड़ता है, लेकिन दूसरी की पठनीयता बहुत बेहतर होती है जब आपके पास फ़िल्टरिंग के लिए अतिरिक्त कहां से बड़ी बहु-शामिल क्वेरी होती है।
खंड और फिल्टर खंड में शामिल होने को अलग, एक अच्छी बात :)

+1

इस क्वेरी के लिए कोई फर्क नहीं पड़ता है, लेकिन अन्य प्रश्नों के लिए आप कुछ चीजें हैं जो आप 'इनर जॉइन' शैली वाक्यविन्यास के साथ कर सकते हैं जिसे आप ए, बी स्टाइल सिंटैक्स के साथ नहीं कर सकते हैं। –

+0

जोएल: बहुत सच :) –

0

कोई फर्क नहीं पड़ता। मुझे पहला प्रारूप अधिक पठनीय लगता है और दूसरे प्रारूपों का उपयोग करते समय केवल दूसरे प्रारूप का उपयोग करें (बाहरी, बाएं INNER, आदि)।

8

पूर्व एएनएसआई 89 वाक्य रचना है उत्तरार्द्ध कि विशिष्ट क्वेरी वहाँ कोई अंतर नहीं है एएनएसआई 92.

के लिए है। हालांकि, पूर्व में आप जटिल प्रश्नों में एक जुड़ी स्थिति से फ़िल्टर को अलग करने की क्षमता खो देते हैं, और बाएं बनाम राइट बनाम INNER निर्दिष्ट करने के लिए सिंटैक्स अक्सर भ्रमित होता है, खासकर अगर आपको विभिन्न डीबी विक्रेताओं के बीच आगे और पीछे जाना है। मुझे पुराने सिंटैक्स बिल्कुल पसंद नहीं है।

0

दूसरा फॉर्म SQL92 अनुपालन वाक्यविन्यास है। इसका मतलब यह होना चाहिए कि यह सभी मौजूदा और भविष्य के डेटाबेस विक्रेताओं द्वारा समर्थित है। हालांकि, सच्चाई यह है कि पहला रूप इतना व्यापक है कि यह हमारी देखभाल से अधिक समय तक रहने की भी गारंटी देता है।

अन्यथा वे सभी मामलों में समान हैं कि डेटाबेस दोनों के साथ कैसे व्यवहार करते हैं।

3

एसक्यूएल क्वेरी इंजन में कोई अंतर नहीं है।

पठनीयता के लिए, यदि आप लाइनब्रैक और इंडेंटेशन का उपयोग करते हैं तो बाद में पढ़ने के लिए बहुत आसान है।

इनर जॉइन के लिए, इससे कोई फर्क नहीं पड़ता कि आप चालू या कहां खंड में "फ़िल्टर" और "जुड़ते हैं" डालते हैं, क्वेरी ऑप्टिमाइज़र को यह तय करना चाहिए कि वैसे भी पहले क्या करना है (यह पहले फ़िल्टर करना चुन सकता है, एक जॉइन बाद में, या इसके विपरीत

बाहरी जॉइन के लिए हालांकि, एक अंतर होता है, और कभी-कभी आप स्थिति को ऑन क्लॉज में रखना चाहते हैं, कभी-कभी जहां भी। बाहरी जॉइन के लिए WHERE क्लॉज में कोई शर्त डालना इसे में एक अंदरूनी, (क्योंकि कैसे NULLs काम की)

उदाहरण के लिए शामिल हों दो निम्नलिखित नमूने के बीच पठनीयता जाँच:

SELECT c.customer_no, o.order_no, a.article_no, r.price 
FROM customer c, order o, orderrow r, article a 
WHERE o.customer_id = c.customer_id 
AND r.order_id = o.order_id 
AND a.article_id = r.article_id 
AND o.orderdate >= '2003-01-01' 
AND o.orderdate < '2004-01-01' 
AND c.customer_name LIKE 'A%' 
ORDER BY r.price DESC 

बनाम

SELECT c.customer_no, o.order_no, a.article_no, r.price 
FROM customer c 
INNER JOIN order o 
    ON o.customer_id = c.customer_id 
    AND o.orderdate >= '2003-01-01' 
    AND o.orderdate < '2004-01-01' 
INNER JOIN orderrow r 
    ON r.order_id = o.order_id 
INNER JOIN article a 
    ON a.article_id = r.article_id 
WHERE c.customer_name LIKE 'A%' 
ORDER BY r.price DESC 
+0

जहां एक खंड बनाम खंड में एक शर्त लगाकर निश्चित रूप से बाहरी जुड़ने के लिए महत्वपूर्ण है। –

+0

यह क्यों कम किया गया था? मैं इसे वापस वोट दे रहा हूँ। ब्रिमस्टेड बस दिखा रहा था कि दूसरा संस्करण पढ़ने के लिए आसान है (और मैं उससे सहमत हूं)। जुड़ता है और फ़िल्टर, अवधारणात्मक रूप से, दो अलग-अलग चीजें हैं। – Cybis

+0

आह, हाँ बाहरी जुड़ने के लिए यह एक फर्क पड़ता है .. इसे इंगित करने के लिए धन्यवाद, बीमार पूर्णता – Brimstedt

1

जबकि आप दोनों का उपयोग कर सबसे कार्य कर सकते हैं और अपने मामले में कोई अंतर नहीं है जो भी है, मैं हमेशा हर समय दूसरे का प्रयोग करेंगे।

  1. यह वर्तमान समर्थित मानक
  2. यह रहता खंड और में कहां खंड
  3. यह और अधिक जटिल वाम बना देता है, ठीक है, पूर्ण बाहरी बहुत आसान
  4. MSSQL सहायता सब शामिल होता है, फिल्टर से में मिलती है उस वाक्यविन्यास के आधार पर आपकी समस्या प्रश्नों पर सहायता प्राप्त करना बहुत आसान है
1

तकनीकी रूप से कोई अंतर नहीं है, तो आपको पहली विधि का उपयोग करके जुड़ने के बारे में अतिरिक्त सावधान रहना होगा। यदि आपको दुर्घटना से यह गलत लगता है, तो आप अपने ए और बी टेबल (एक बहुत लंबी, मेमोरी & सीपीयू गहन क्वेरी के बीच एक कार्टशियन जोड़ना समाप्त कर सकते हैं - यह बी में सभी पंक्तियों के साथ प्रत्येक पंक्ति से मेल खाएगा। खराब अगर कोई और बी के साथ शुरू करने के लिए बड़ी मेज हैं)। एक स्पष्ट INNER जॉइन का उपयोग करना सुरक्षित और पढ़ने के लिए आसान दोनों है।

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