Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में टेबल जॉइन का उपयोग करने और चालू करने में क्या अंतर है?

मैं USING सिंटैक्स का उपयोग नहीं करता, क्योंकि

  1. मेरे अधिकांश जॉइन इसके अनुकूल नहीं हैं (उसी फ़ील्डनाम का मिलान नहीं किया जा रहा है, और/या जॉइन में कई मैच हैं) और
  2. यह तुरंत स्पष्ट नहीं है कि दो से अधिक तालिकाओं के मामले में इसका क्या अनुवाद होता है

यानी 'id' और 'id_2' कॉलम के साथ 3 टेबल मानते हुए, करता है

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

बनें

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

या

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

या फिर कुछ और?

किसी विशेष डेटाबेस संस्करण के लिए इसे खोजना एक बहुत ही मामूली अभ्यास है, लेकिन मुझे यह विश्वास नहीं है कि यह सभी डेटाबेस में संगत है, और मैं अकेला व्यक्ति नहीं हूं जिसे अपना कोड बनाए रखना है (इसलिए अन्य लोगों को भी पता होना चाहिए कि यह किसके बराबर है)।

WHERE बनाम ON के साथ एक स्पष्ट अंतर यह है कि यदि जॉइन बाहरी है:

एक एकल आईडी फ़ील्ड के साथ एक T1, मान 1 वाली एक पंक्ति, और एक ID और VALUE फ़ील्ड (एक पंक्ति, ID=1, VALUE=6) के साथ एक T2 मान लें, तो हम प्राप्त करते हैं:

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

कोई पंक्ति नहीं देता है, क्योंकि WHERE को मिलान करना आवश्यक है, जबकि

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

मानों के साथ एक पंक्ति देगा

1, NULL, NULL

चूंकि ON केवल जॉइन के मिलान के लिए आवश्यक है, जो बाहरी होने के कारण वैकल्पिक है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:किसी अन्य फ़ील्ड के आधार पर अनुक्रम कॉलम जोड़ें

  2. केस संवेदनशील RLIKE

  3. MySQL CHAR () बनाम T-SQL CHAR ():क्या अंतर है?

  4. सॉकेट के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट करें

  5. पृष्ठ को ताज़ा करते समय डेटाबेस में डेटा सम्मिलित करना बंद करें