हालांकि सटीक अंतर बताने वाले उत्तर ठीक हैं, मैं बताना चाहता हूं कि रिलेशनल बीजगणित को एसक्यूएल में कैसे बदला जाता है और 3 अवधारणाओं का वास्तविक मूल्य क्या है।
आपके प्रश्न में मुख्य अवधारणा एक जुड़ने का विचार है। किसी ज्वाइन को समझने के लिए आपको कार्टेसियन प्रोडक्ट को समझने की जरूरत है (उदाहरण एसक्यूएल पर आधारित है जहां समतुल्य को क्रॉस ज्वाइन कहा जाता है जैसा कि ऑनएडवाइन बताते हैं);
यह व्यवहार में बहुत उपयोगी नहीं है। इस उदाहरण पर विचार करें।
Product(PName, Price)
====================
Laptop, 1500
Car, 20000
Airplane, 3000000
Component(PName, CName, Cost)
=============================
Laptop, CPU, 500
Laptop, hdd, 300
Laptop, case, 700
Car, wheels, 1000
कार्टेशियन उत्पाद उत्पाद x घटक होगा - बेलो या स्क्वल फ़िडल । आप देख सकते हैं कि 12 पंक्तियाँ हैं = 3 x 4. जाहिर है, "पहियों" के साथ "लैपटॉप" जैसी पंक्तियों का कोई मतलब नहीं है, यही कारण है कि व्यवहार में कार्टेशियन उत्पाद का उपयोग शायद ही कभी किया जाता है।
| PNAME | PRICE | CNAME | COST |
--------------------------------------
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Laptop | 1500 | wheels | 1000 |
| Car | 20000 | CPU | 500 |
| Car | 20000 | hdd | 300 |
| Car | 20000 | case | 700 |
| Car | 20000 | wheels | 1000 |
| Airplane | 3000000 | CPU | 500 |
| Airplane | 3000000 | hdd | 300 |
| Airplane | 3000000 | case | 700 |
| Airplane | 3000000 | wheels | 1000 |
इन उत्पादों के लिए अधिक मूल्य जोड़ने के लिए JOIN यहां हैं। हम वास्तव में चाहते हैं कि उत्पाद अपने संबंधित घटकों के साथ "शामिल" हो, क्योंकि प्रत्येक घटक एक उत्पाद से संबंधित है। ऐसा करने का तरीका एक जुड़ाव के साथ है:
उत्पाद नाम पर घटक शामिल हैं
संबंधित SQL क्वेरी इस तरह होगी (आप यहां सभी उदाहरणों के साथ खेल सकते हैं )
SELECT *
FROM Product
JOIN Component
ON Product.Pname = Component.Pname
और परिणाम:
| PNAME | PRICE | CNAME | COST |
----------------------------------
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Car | 20000 | wheels | 1000 |
ध्यान दें कि परिणाम में केवल 4 पंक्तियाँ हैं, क्योंकि लैपटॉप में 3 घटक हैं, कार में 1 और हवाई जहाज कोई भी नहीं है। यह बहुत अधिक उपयोगी है।
अपने प्रश्नों पर वापस आते हुए, आपके द्वारा पूछे जाने वाले सभी योग जोइन के रूपांतर हैं जो मैंने अभी दिखाए हैं:
नैचुरल ज्वाइन = द ज्वाइन (ऑन क्लॉज) सभी कॉलम पर एक ही नाम से बना है; यह परिणाम से डुप्लिकेट कॉलम निकालता है, अन्य सभी जॉइन के विपरीत; अधिकांश DBMS (Microsoft के SQL Server, Oracle के MySQL आदि जैसे विभिन्न विक्रेताओं द्वारा बनाए गए डेटाबेस सिस्टम) भी इसका समर्थन करने से बाज नहीं आते हैं, यह सिर्फ बुरा व्यवहार है (या जानबूझकर इसे लागू नहीं करने के लिए चुना गया है)। कल्पना कीजिए कि एक डेवलपर आता है और उत्पाद में मूल्य से लागत तक के दूसरे कॉलम का नाम बदलता है। फिर सभी प्राकृतिक जुड़ाव PName और कॉस्ट पर किए जाएंगे, जिसके परिणामस्वरूप 0 नंबर्स बिना किसी नंबर के मेल खाते हैं।
थीटा ज्वाइन करें = यह सामान्य रूप से शामिल होने वाला हर व्यक्ति उपयोग करता है क्योंकि यह आपको स्थिति को निर्दिष्ट करने की अनुमति देता है (SQL में ON क्लाज)। आप अपनी पसंद के किसी भी हालत में शामिल हो सकते हैं, उदाहरण के लिए उन उत्पादों पर जिनमें पहले 2 अक्षर समान हैं, या जिनकी कीमत अलग है। व्यवहार में, यह शायद ही कभी होता है - 95% मामलों में आप एक समानता की स्थिति में शामिल होंगे, जो हमें निम्न की ओर ले जाता है:
इक्वि जॉइन = व्यवहार में प्रयुक्त सबसे आम। ऊपर दिया गया उदाहरण एक इक्वी जॉइन है। इस प्रकार के जॉइन के लिए डेटाबेस को ऑप्टिमाइज़ किया जाता है! एक इक्वी जॉइन का ओपोजिट एक नॉन-इक्वी जॉइन है, जब आप "=" के अलावा किसी अन्य कंडीशन में शामिल होते हैं। डेटाबेस इसके लिए अनुकूलित नहीं हैं! वे दोनों सामान्य थीटा में शामिल होते हैं। प्राकृतिक जुड़ना भी थीटा जुड़ना है लेकिन स्थिति (थीटा) निहित है।
जानकारी का स्रोत: यूनिवर्सिटी + प्रमाणित SQL सर्वर डेवलपर + ने हाल ही में स्टैनफोर्ड से "डेटाबेस का परिचय" पूरा किया है, इसलिए मैं कहता हूं कि मेरे मन में संबंधपरक बीजगणित ताजा है।