2012-12-06 2 views
29

संभव डुप्लिकेट:
MySQL ON vs USING?कीवर्ड बनाम पर खंड का उपयोग करना - MYSQL

क्वेरी 1:

SELECT * 
FROM users 
JOIN orders ON (orders.user_id = users.user_id) 
WHERE users.user_id = 1; 

क्वेरी 2:

SELECT * 
FROM users 
JOIN orders USING (user_id) 
WHERE user_id = 1; 

मैं कुछ निश्चित डेटा प्राप्त करने के लिए ऑर्डर और उपयोगकर्ता टेबल में शामिल होना चाहता हूं। यह बढ़िया काम करता है। मेरी समस्या यह है कि दोनों प्रश्न एक ही परिणाम सेट आउटपुट करते हैं, क्या यह वही है? कौन सा उपयोग करने के लिए अधिक कुशल है? प्रदर्शन के लिए कौन सा अच्छा है? कौन सा सबसे अच्छा अभ्यास है?

+2

[हां।] (Http://dev.mysql.com/doc/refman/5.0/en/join.html) क्या आपने बेंचमार्क किया था? क्या आपने बेंचमार्क किया था? आपके कोडिंग मानकों क्या हैं? – Ben

+2

यह नहीं था [पहले से ही चर्चा की गई] (http://stackoverflow.com/questions/11366006/mysql-on-vs-using) एक बार? – Geo

उत्तर

29

USING खंड कुछ है जो हमें JOIN स्थिति में उल्लेख करने की आवश्यकता नहीं है जब हम एकाधिक तालिकाओं से डेटा पुनर्प्राप्त कर रहे हैं। जब हम USING खंड का उपयोग करते हैं, तो उस विशेष कॉलम का नाम दोनों तालिकाओं में मौजूद होना चाहिए, और SELECT क्वेरी USING खंड में दिए गए कॉलम नाम का उपयोग करके स्वचालित रूप से उन तालिकाओं में शामिल हो जाएगी।

उदा। यदि तालिका में दो सामान्य कॉलम नाम हैं, तो USING खंड

USING में वांछित सामान्य कॉलम नाम का उल्लेख डायनामिक एसक्यूएल निष्पादित करते समय भी किया जाता है।

जैसे

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num' 
    USING dept_id; 
  • USING खंड: यह आपको नाम से शामिल होने कुंजी निर्दिष्ट करने के लिए अनुमति देता है।

  • ON खंड: यह वाक्यविन्यास आपको दोनों तालिकाओं में शामिल कुंजी के लिए कॉलम नाम निर्दिष्ट करने की अनुमति देता है।

का उपयोग खंड

USING खंड कई स्तंभ के एक ही नाम है, लेकिन आप इन आम कॉलम के सभी का उपयोग कर शामिल होने के लिए नहीं करना चाहते हैं प्रयोग किया जाता है। यूएसआईएन क्लॉज में सूचीबद्ध कॉलम में WHERE क्लॉज सहित कथन में कोई क्वालीफायर नहीं हो सकता है।

पर खंड

ON खंड टेबल जहां स्तंभ नाम दोनों तालिकाओं में मेल नहीं खाते शामिल होने के लिए प्रयोग किया जाता है। WHERE क्लॉज में फ़िल्टर स्थितियों से जुड़ने की स्थितियों को हटा दिया जाता है।