उद्घाटन प्रश्न हमें गलत सोच भेज रहा है। यह होना चाहिए:
क्या एसक्यूएल अभिव्यक्ति R WHERE ... [NOT] IN S
का समतुल्य बीजगणित समतुल्य है?
जवाब है हाँ, यह (प्राकृतिक) JOIN
bowtie ऑपरेटर ⋈
उर्फ है (यही है, इस सवाल का जवाब दो संबंधों, नहीं फिल्टर के कुछ प्रकार। के बीच कुछ आपरेशन है)।
यह देखने के लिए कि क्यों पहले दिए गए SQL समाधान को व्यवस्थित करें। जैसा कि दिखाया गया है, यह विशेषता A1 NOT IN
विशेषता के साथ एक विशेषता A2
के साथ एक संबंध की तलाश में है। यह विशेषता नामों में वास्तव में एक गलत मिलान है। एसक्यूएल जहां स्थिति के अंदर NOT
की अनुमति देता है। यह एसक्यूएल लॉजिकल स्ट्रक्चर स्पष्ट बनाता है:
SELECT * FROM R
WHERE NOT (A1 IN (SELECT A2 AS A1 FROM R))
अब हम एक प्रक्षेपण और नाम देख सकते हैं। (आसपास के NOT
हम पहले उत्तर के अनुसार सेट MINUS के रूप में कार्यान्वित कर सकते हैं।) तो बराबर आरए है:
R - (R ⋈ ρ
A1/A2(π
ए 2(R)))
ब्याज के लिए, ट्यूटोरियल डी है:
R MINUS (R JOIN (R {A2} RENAME A2 AS A1))
तरह से सवाल डाल दिया जाता है, वहाँ है एसक्यूएल सोच से एक हैंगओवर। एसक्यूएल के WHERE
आपको पंक्ति-स्तर 'मोड' में मजबूर करता है। यह कॉडड नियम 7 को संकुचित करता है जिसमें सेट-ए-टाइम ऑपरेटर की आवश्यकता होती है।
सामान्य तौर पर, एसक्यूएल के WHERE
और आरए के σ
उनकी पंक्ति-स्तर फिल्टर के साथ और अधिक संक्षेप के रूप में (प्राकृतिक) सेट पर एक समय तर्क के साथ JOIN
लागू किया जा सकता। (उदाहरण के लिए, यह है कि क्या दिनांक & डार्वेन उनके एक बीजगणित में क्या है।)
आप कर सकते हैं कृपया समझा यह कैसे काम करता है ... और शायद अंडाकार डॉट्स का विस्तार करें। मुझे क्रॉस उत्पाद के नतीजे को समझने में परेशानी हो रही है, आर में केवल दो फ़ील्ड हैं, तो आप दो से अधिक तर्कों के साथ पीआई ऑपरेटर को कैसे डाल सकते हैं? – jsj
यदि केवल दो कॉलम हैं तो आप इलिप्सिस डॉट्स को छोड़ सकते हैं। उत्तर ने पीआई का भी उपयोग किया जहां इसे आरएचओ का इस्तेमाल करना चाहिए था, यह सुनिश्चित नहीं है कि वह संपादन या मूल उत्तर में था या नहीं। – Andomar
@Andomar: मुझे रिलेशनल बीजगणित प्रश्न में भी समस्याएं आ रही हैं। मैंने अपना प्रश्न पोस्ट किया है [यहां] (http://stackoverflow.com/questions/18997845/how-to-convert-sql-to-relational-algebra-in-case-of-sql-joins)। क्या आप कृपया मेरी मदद कर सकते हैं? धन्यवाद। –