क्या (बेसिक) एसक्यूएल क्वैश्चंस शब्दार्थ उच्चतर ऑर्डर फंक्शन्स के बराबर हैं?


12

क्या SQL मूल रूप से मानचित्र + फोल्ड + फिल्टर का एक डोमेन विशिष्ट उदाहरण है?

यह मुझे लगता है कि निम्नलिखित एसक्यूएल:

SELECT name
FROM fruits
WHERE calories < 100 

निम्नलिखित मानचित्र + फ़िल्टर + फोल्ड ऑपरेशन के लिए सिंटैक्टिक शुगर है:

var fruits = [{id : 1, name: 'orange', calories : 100},
    {id : 2, name : 'banana',  calories : 150},
    {id : 3, name: 'apple', calories : '50'}];

fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories })
    .filter(function(obj) { return obj.calories < 100 })
    .reduce(function (accumulator, obj) { accumulator + "\n" + val.name; });

क्या यह संयोग है, या कोई ध्वनि सिमेंटिक तुल्यता है जिसे सिद्ध किया जा सकता है? कैसे, मोटे तौर पर?

मुझे पता है कि एसक्यूएल में बहुत सी घंटियाँ और सीटी हैं, लेकिन इसके मूल में बस एक नक्शा-गुना-फ़िल्टर ऑपरेशन है?

निम्नलिखित लेख प्रासंगिक है: http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx


1
आप एक JOIN या ग्रुप को क्लॉज से कैसे जोड़ेंगे?
Ixrec


2
gnat - यदि आप दूसरी पोस्ट पढ़ते हैं, तो आप देखेंगे कि उन्होंने मुझे बताया था कि स्टाकेवरफ्लो के लिए यह प्रश्न अनुचित था, इसलिए बाद में यहाँ पोस्ट किया गया। आप Stackoverflow के साथ कभी-कभी नहीं जीत सकते। या तो यह पोस्ट अनुपयुक्त होने के लिए, गलत फ़ोरम में बंद हो जाती है, या बहुत जटिल है इसलिए इस साइट के लिए उपयुक्त नहीं है, या यह इतना आसान है कि आपको बस Google का उपयोग करना चाहिए।
श्रीधर सरनोबत

1
ओह, मैं दूसरी पोस्ट को हटाने वाला हूँ। किया हुआ।
श्रीधर सरनोबत

1
@ श्रीधर-सरनोबत: आम तौर पर, जब उपयोगकर्ताओं का एक झुंड प्रोग्रामर को आपके प्रश्न को माइग्रेट करने के लिए वोट करता है। तो, यह स्वचालित रूप से माइग्रेट हो जाएगा। अपेक्षित 5 वोट पहुंचने से पहले आपने अपना प्रश्न बंद कर दिया।
ब्रायन

जवाबों:


6

LINQ पर एक नज़र डालें , जो SQL के पीछे मूल अवधारणाओं को लेता है और इसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए सामान्यीकृत करता है। Whereऑपरेटर, एक दलदल की मानक फ़िल्टर है Selectऑपरेटर एक प्रक्षेपण / मानचित्र, और इतने पर है। LINQ में सभी मूल SQL क्वेरी ऑपरेशन का प्रतिनिधित्व किया जाता है, जो उच्च-क्रम के कार्यों का उपयोग करके कार्यान्वित किया जाता है, इसलिए हाँ, आप SQL की अपनी सहज समझ में सही हैं।

आपके द्वारा प्राप्त किए गए उदाहरण और एक रिलेशनल डेटाबेस के काम करने के तरीके के बीच बड़ा अंतर यह है कि एसक्यूएल को बहुत सीमित सेट को ध्यान में रखते हुए बनाया गया है। यह ट्यूरिंग-पूर्ण नहीं है और डेटाबेस डिज़ाइनर जानते हैं कि यह क्या कर सकता है और क्या नहीं कर सकता है, जिससे सिस्टम को डिज़ाइन करना आसान हो जाता है ताकि प्रश्नों को अनुकूलित करने के लिए सिस्टम को डिज़ाइन किया जा सके Mapएक डेटा सेट को सरल बनाने के साथ । तत्व-दर-तत्व।


यह केवल प्रदर्शित करता है कि एसक्यूएल संचालन का एहसास करने के लिए उच्च-क्रम के कार्यों का उपयोग किया जा सकता है, न कि यह कि दोनों सामान्य रूप से एक-दूसरे से संबंधित हैं।
बार्ट वैन इनगेन शेनौ

1
@ बर्ट: फिर सवाल था "क्या कोई ध्वनि अर्थ समतुल्यता है जिसे साबित किया जा सकता है?" कंप्यूटर विज्ञान में तुल्यता साबित करने के लिए एक चीज को दूसरे के संदर्भ में लागू करना एक समय सम्मानित तकनीक है। उदाहरण के लिए, यह साबित करने का एक तरीका है कि एक भाषा किसी अन्य भाषा को लागू करने के लिए ट्यूरिंग-पूर्ण है जिसे पहले से ही ट्यूरिंग-पूर्ण होने के लिए जाना जाता है।
मेसन व्हीलर

सिमेंटिक तुल्यता के लिए, मैं उम्मीद करूंगा कि आप इसे दोनों दिशाओं में दिखा सकते हैं। दोनों एसक्यूएल प्रश्नों को उच्च-क्रम के कार्यों में व्यक्त किया जा सकता है और आप एसक्यूएल सिंटैक्स में उच्च-क्रम फ़ंक्शन को व्यक्त कर सकते हैं।
बार्ट वैन इनगेन शेनौ

2
हो सकता है कि मैंने प्रश्न को औपचारिक रूप से पर्याप्त वाक्यांश नहीं दिया हो। मुझे लगता है कि मुझे 100% मामलों में द्विदिश रूप से समकक्ष होने की आवश्यकता नहीं है। बस एक दृष्टिकोण के माध्यम से विशिष्ट प्रश्नों को दूसरे के रूप में फिर से लिखा जा सकता है।
श्रीधर सरनोबत

2
निष्पक्ष होने के लिए, ओपी ने प्रश्न को वाक्यांश के रूप में कहा था "एसक्यूएल प्रश्न उच्च-क्रम के कार्यों के बराबर हैं", न कि "एसक्यूएल भाषा एक कार्यात्मक प्रोग्रामिंग भाषा के बराबर है", इसलिए न तो उत्तर गलत है।
Ixrec

10

एसक्यूएल रिलेशनल अलजेब्रा और टपल रिलेशनल कैलकुलस पर आधारित है, न कि हाई-ऑर्डर फ़ंक्शंस या फ़ंक्शनल प्रोग्रामिंग पर। जबकि SELECT, FROM और WHERE के अन्य भाषाओं में समान कार्य हैं, SQL स्वयं सामान्यीकृत उच्चतर फ़ंक्शंस का समर्थन नहीं करता है , लेकिन केवल "उच्च-क्रम" फ़ंक्शंस जो भाषा स्वयं को परिभाषित करती है।

चूँकि SQL आपको अपने स्वयं के कस्टम उच्च-क्रम के कार्यों को लिखने की अनुमति नहीं देता है, इसलिए यह किसी भी प्राधिकरण के साथ नहीं कहा जा सकता है कि भाषा उच्च-क्रम के कार्यों का समर्थन करती है।


क्या संबंधपरक बीजगणित / कैलकुलस कार्यात्मक प्रोग्रामिंग से संबंधित है? मुझे लगता है कि रिलेशनल लैंग्वेज सेट थ्योरी से ली गई हैं, लेकिन यकीन नहीं होता कि यह उन्हें फंक्शनल बनाती है।
श्रीधर सरनोबत

1
यही कारण है कि "उच्च-क्रम" डराने वाले उद्धरणों में है।
रॉबर्ट हार्वे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.