उदाहरण (अपने उदाहरण तालिकाओं का उपयोग नहीं :-)
मैं एक कार किराए पर लेने की कंपनी है।
Table car
id: integer primary key autoincrement
licence_plate: varchar
purchase_date: date
Table customer
id: integer primary key autoincrement
name: varchar
Table rental
id: integer primary key autoincrement
car_id: integer
bike_id: integer
customer_id: integer
rental_date: date
सरल अधिकार? मेरे पास कारों के लिए 10 रिकॉर्ड हैं क्योंकि मेरे पास 10 कार हैं।
मैं इस व्यवसाय को 10 वर्षों से चला रहा हूं, इसलिए मेरे पास 1000 ग्राहक हैं।
और मैं प्रति कार 20x प्रति वर्ष कारों को किराए पर लेता हूं = 10 साल x 10 कार x 20 = 2000 किराया।
यदि मैं सब कुछ एक बड़ी तालिका में स्टोर करता हूं तो मुझे 10x1000x2000 = 20 मिलियन रिकॉर्ड मिलते हैं।
यदि मैं इसे 3 टेबल में संग्रहीत करता हूं तो मुझे 10 + 1000 + 2000 = 3010 रिकॉर्ड मिल गए हैं।
यह परिमाण के 3 आदेश है, इसलिए मैं 3 टेबल का उपयोग करता हूं।
लेकिन क्योंकि मैं 3 टेबल का उपयोग मैं का उपयोग करने के क्रम में बाहर फिर से
(कम से कम अगर मैं नाम और नंबर के बजाय लाइसेंस प्लेट चाहते हैं) डेटा प्राप्त करने में मिलती है (स्थान और समय बचाने के लिए) ।
का उपयोग आंतरिक
ग्राहक 345 के लिए सभी किराया मिलती है?
SELECT * FROM customer
INNER JOIN rental on (rental.customer_id = customer.id)
INNER JOIN car on (car.id = rental.car_id)
WHERE customer.id = 345.
कि एक INNER JOIN
है, क्योंकि हम केवल कारों linked to
किराया linked to
है कि ग्राहकों को वास्तव में क्या हुआ के बारे में जानना चाहते हैं ।
ध्यान दें कि हमारे पास बाइक टेबल से जुड़ा हुआ बाइक_आईड भी है, जो कार टेबल के समान ही अलग है। कैसे हम ग्राहक 345
के लिए सभी बाइक + कार किराया मिलेगा हम कोशिश करते हैं और इस
SELECT * FROM customer
INNER JOIN rental on (rental.customer_id = customer.id)
INNER JOIN car on (car.id = rental.car_id)
INNER JOIN bike on (bike.id = rental.bike_id)
WHERE customer.id = 345.
करते लेकिन वह एक खाली सेट दे देंगे कर सकते हैं !!
ऐसा इसलिए है क्योंकि किराए पर या तो बाइक_rentल या एक कार_rental हो सकता है, लेकिन दोनों एक ही समय में नहीं।
और गैर-कामकाजी inner join
क्वेरी केवल उन सभी किरायों के परिणाम देगा जहां हम एक ही लेनदेन में बाइक और एक कार दोनों किराए पर लेते हैं।
हम एक बूलियन AND
शामिल होने का उपयोग करके OR
संबंध प्राप्त करने और बुलियन करने की कोशिश कर रहे हैं।
बाहरी का उपयोग
मिलती है इस को हल करने के लिए हम एक outer join
जरूरत है आदेश में।
की इसके साथ यह कम से left join
SELECT * FROM customer
INNER JOIN rental on (rental.customer_id = customer.id) <<-- link always
LEFT JOIN car on (car.id = rental.car_id) <<-- link half of the time
LEFT JOIN bike on (bike.id = rental.bike_id) <<-- link (other) 0.5 of the time.
WHERE customer.id = 345.
देखो इस तरह से हल करते हैं।एक inner join
एक AND
है और एक left join
निम्नलिखित स्यूडोकोड में के रूप में एक OR
है:
if a=1 AND a=2 then {this is always false, no result}
if a=1 OR a=2 then {this might be true or not}
आप टेबल बना सकते हैं और क्वेरी आप परिणाम देख सकते हैं चलाते हैं।
शब्दावली
एक left join
पर एक left outer join
के समान है। ए join
कोई अतिरिक्त उपसर्ग नहीं है inner join
full outer join
भी है। प्रोग्रामिंग के 25 वर्षों में मैंने कभी इसका इस्तेमाल नहीं किया है।
क्यों वाम
वैसे वहाँ दो शामिल टेबल है में शामिल हो। उदाहरण में हम एक inner join
के साथ जुड़ा हुआ किराए पर लेने के लिए
ग्राहक, एक आंतरिक दोनों तालिकाओं चाहिए लिंक तो वहाँ left:customer
मेज और right:rental
तालिका के बीच कोई अंतर नहीं है में शामिल होने में।
अगला लिंक left join
left:rental
और right:car
के बीच था। बाईं तरफ सभी पंक्तियों को लिंक करना चाहिए और दाईं तरफ उन्हें सही नहीं करना चाहिए। यही कारण है कि यह left join
इसकी "अगर कोई है" ... बाएं बाहरी जॉइन बाएं जुड़ने के समान हैं (mysql में) और आप पंक्तियों को वापस करने के लिए उनका उपयोग करते हैं, भले ही वे किसी अन्य तालिका में पंक्तियों से मेल नहीं खाते हैं। – Diego
और साथ ही, आपको एक जॉइन का उपयोग करने की आवश्यकता है क्योंकि यह बहुत ही सरल है, डेटाबेस क्वेरी कैसे काम करती है। यह पूछने की तरह है कि हमें श्वास लेने के लिए फेफड़ों का उपयोग करने की आवश्यकता क्यों है। जुड़ता है वह तंत्र है जिसके द्वारा एक संबंधपरक डेटाबेस के लिए प्रश्न पूछे जाते हैं। जॉइन एक जटिल अवधारणा पर नहीं हैं और यदि आपको समस्याएं आ रही हैं तो मेरा सुझाव है कि आप संबंधपरक डेटाबेस पर अतिरिक्त शुरुआत करना शुरू करें। यदि आप वास्तव में कॉर्क विश्वविद्यालय में छात्र हैं तो आपको इस संसाधन तक पहुंचने में सक्षम होना चाहिए: http://proquest.safaribooksonline.com/?xmlId=1-56592-744-3&uiCode=CORK –