ऍसक्यूऍल

संरचित पृच्छा भाषा एक डेटाबेस प्रोग्रामिंग भाषा है जिसे रिलेशनल डेटाबेस मैनेजमेंट सिस्टम्स या संबंधपरक डेटाबेस प्रबन्धन प्रणाली में आंकणों के प्रबंधन के लिए बनाया गया है और यह मूलतः रिलेशनल ऐलजेब्रा या संबंधपरक बीजगणित पर आधारित है। इसके दायरे में आंकणों पर प्रश्न (क्वेरी), आँकणों का अद्दतन (अपडेट), स्कीमा (प्रयोगकर्ता) निर्माण और रूपांतरण और डेटा ऐक्सेस कंट्रोल (आँकणों के उपयोग पर नियंत्रण) शामिल है। SQL, एडगर एफ. कॉड के रिलेशनल मॉडल के सबसे प्रारंभिक कम्प्यूटर प्रोग्रामिंग भाषाओं में से एक था जिसे उन्होंने अपने 1970 के प्रभावशाली दस्तावेज़ (पेपर), "ए रिलेशनल मॉडल ऑफ डेटा फॉर लार्ज शेयर्ड डेटा बैंक्स" में प्रस्तुत किया था और यह रिलेशनल डेटाबेसों के लिए सबसे व्यापक रूप से प्रयुक्त होने वाली भाषा बन गयी।

इतिहास 
SQL को 1970 के दशक के शुरुआत में डैनियल रिचर्डसन, डॉनल्ड डी॰ चेम्बरलिन और रेमंड एफ. बॉयस द्वारा आइ०बी०ऍम० में विकसित किया गया था। यह संस्करण, जिसका प्रारंभिक नाम SEQUEL (सिक्वेल) था, आईबीएम के मूल रिलेशनल डेटाबेस उत्पाद सिस्टम आर. (System R) में संग्रहित डेटा के फेर-बदल तथा पुनःप्रतिष्ठापन के लिए डिजाइन किया गया था। IBM ने SQL के इस संस्करण का 1985 में पेटेंट करा लिया।

1970 के दशक के दौरान, IBM सैन जोस रिसर्च लैबॉरेटरी में एक समूह ने सिस्टम रिलेशनल डेटाबेस मैनेजमेंट सिस्टम को विकसित किया। उसके बाद IBM के डॉनल्ड डी. चैंबर्लिन और रेमंड एफ. बॉयस ने सिस्टम आर. (System R) में संग्रहित डेटा के प्रबंधन के लिए स्ट्रक्चर्ड इंग्लिश क्वेरी लैंग्वेज़ (SEQUEL या SEQL) की रचना की।  आदिवर्णिक शब्द SEQUEL को बाद में बदल कर SQL कर दिया गया क्योंकि "SEQUEL" UK स्थित हॉकर सिडली नामक विमान कंपनी का ट्रेडमार्क था।

1970 के दशक के आरंभ में MIT में विकसित RDMS और 1974 में यू.सी. बर्कले (U.C. Berkely) में विकसित इन्ग्रेस (Ingres), पहले रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) थे। इन्ग्रेस (Ingres) ने QUEL नामक एक क्वेरी लैंग्वेज़ को कार्यान्वित किया जिसे बाद में बाज़ार में SQL ने विस्थापित कर दिया। 

1970 के दशक के आखिर में, रिलेशनल सॉफ्टवेयर, इंक. [Relational Software, Inc.] (अब ओरेकल कॉर्पोरेशन) ने कॉड, चैंबर्लिन और बॉयस द्वारा उल्लेखित अवधारणाओं की संभाव्यता को देखा और स्वयं की SQL आधारित RDBMS को इस आकांक्षा के साथ विकसित किया कि वह उसे यू.एस. नेवी, सेन्ट्रल इंटेलिजेंस एजेंसी और यू.एस. गवर्नमेंट एजेंसियों को बेच सके। 1979 की गर्मियों में, रिलेशनल सॉफ्टवेयर, इंक. ने वैक्स कंप्यूटरों के लिए व्यावसायिक तौर पर उपलब्ध SQL के प्रथम कार्यान्वयन, ओरेकल V2 (संस्करण 2) को प्रस्तुत किया। ओरेकल V2 [Oracle V2] ने बाज़ार में IBM के सिस्टम/38 RDBMS के रिलीज़ को कुछ सप्ताहों में ही मात दे दी। 

सिस्टम की उपयोगिता और व्यवहारिकता का निर्धारण करने हेतु ग्राहक परीक्षण स्थलों पर SQL का परीक्षण करने के बाद IBM ने उनके सिस्टम आर (System R) के मूलरूप पर आधारित व्यावसायिक उत्पादों का विकास करना शुरु किया। सिस्टम आर (System R) के मूलरूप में सिस्टम/38 (System/38), एसक्यूएल/डीएस और डीबी २ शामिल थे और जो क्रमशः 1979, 1981 और 1983 में व्यावसायिक रूप से उपलब्ध थे।

SQL की आम आलोचनाओं में वेंडर्स के बीच विभिन्न प्रचालन तंत्रों पर सुवाह्यता की कमी, खोए हुए डेटा का अनुपयुक्त संचालन (देखें Null(SQL)) और अनावश्यक रूप से जटिल और कभी-कभी अस्पष्ट भाषा व्याकरण और अर्थ शामिल थे। इसमें रिलेशनल ऐलजेब्रा जैसे औपचारिक भाषा की कठोरता का भी अभाव है।

भाषा के तत्त्व 

SQL भाषा कई भाषा तत्वों में उप-विभाजित है, इनमें शामिल हैं:
 क्लॉजेज़, जो कुछ मामलों में 'स्टेटमेंट्स' और 'क्वेरीज़' की संघटक, वैकल्पिक इकाइयां हैं।
 एक्सप्रेशंस जो या तो स्कैलर वैल्यूज़ या सारणी में डेटा वाली पंक्तियों और लम्बवत पंक्तियों से बने टेबलों का निर्माण कर सकते हैं।
 प्रेडिकेट्स जो वैसे 'कंडीशंस' निर्दिष्ट करते हैं जिन्हें SQL थ्री-वैल्यूड लॉजिक (3VL) बूलियन ट्रूथ मानों में मूल्यांकित किया जा सकता है और जो स्टेटमेंट्स और क्वेरीज़ के प्रभावों को कम करने, या प्रोग्राम के प्रवाह को बदलने के लिए प्रयुक्त किए जाते हैं।
 क्वेरीज जो विशिष्ट मापदंडों के आधार पर डेटा का पुनःप्रतिष्ठापन करते हैं।
 स्टेटमेंट्स (प्रश्न वाक्य) जिनका स्कीमाज़ और डेटा पर निरंतर प्रभाव रह सकता है, या जो लेनदेन, प्रोग्राम प्रवाह, कनेक्शन, सत्र, या डायग्नोस्टिक्स का नियंत्रण कर सकते हैं।
 SQL प्रश्न वाक्यों में सेमी कॉलन (";") भी शामिल है। इसे प्रश्न समाप्ति सूचक के तौर पर इस्तेमाल किया जाता है। हालांकि हरेक प्लेटफॉर्म पर इसकी ज़रुरत नहीं होती, इसे SQL व्याकरण के मानक हिस्से के रूप में निरूपित किया जाता है।
 निरर्थक खाली जगहों को SQL वाक्यों और क्वेरीज़ में सामान्यतः नज़रंदाज़ कर दिया जाता है, इससे SQL वाक्यों को सुपाठ्यता के लिए लिखना आसन हो जाता है।

क्वेरीज़ 
SQL में सबसे आम कार्यवाही क्वेरी करना यानि आँकंणों के बारे में प्रश्न करना है, जो डिक्लेयरेटिव SELECT स्टेटमेंट के साथ निष्पादित किया जाता है। SELECT एक या एक से अधिक टेबल या एक्स्प्रेसंस से डेटा पुनःप्रतिष्ठापित करता है। मानक SELECT स्टेटमेंट्स का डेटाबेस पर कोई स्थायी प्रभाव नहीं होता है। SELECT की कुछ गैर-मानक परिणतियों का स्थायी प्रभाव रह सकता है, जैसे SELECT INTO वाक्यविन्यास (सिन्टैक्स) जो कुछ डेटाबेसों में मौजूद रहता है।

क्वेरीज़, उपयोगकर्त्ता को वांछित डेटा की व्याख्या करने की क्षमता प्रदान करता है, इससे उस परिणाम (वांछित) को प्राप्त करने के लिए नियोजन, इष्टतमीकरण और आवश्यक भौतिक परिचालनों को अंजाम देने की ज़िम्मेदारी डेटाबेस मैनेजमेंट सिस्टम (DBMS) की होती है।

एक क्वेरी में SELECT कीवर्ड के तुरंत बाद के परिणाम में सम्मिलित करने के लिए कॉलमों की एक सूची शामिल रहती है। यह निर्दिष्ट करने के लिए कि क्वेरी क्वेरिड टेबलों के सभी कॉलमों को रिटर्न करे, एक ऐस्टेरिस्क (*) का भी उपयोग किया जा सकता है। SELECT, SQL का सबसे जटिल स्टेटमेंट है जिसमें वैकल्पिक कीवर्ड्स और क्लॉजेज़ भी होते हैं। इनमें शामिल हैं:
 FROM क्लॉज़ जो यह इंगित करता है कि कौन से टेबलों से डेटा को पुनःप्रतिष्ठापित किया जाना है। FROM क्लॉज़ में टेबलों को जोड़ने के लिए वैकल्पिक JOIN सबक्लॉज़ को शामिल किया जा सकता है।
 WHERE क्लॉज़ में एक 'कम्पॅरिजन प्रेडीकेट' शामिल है जो क्वेरी द्वारा रिटर्न पंक्तियों को सीमित करता है। WHERE क्लॉज़ उन सभी पंक्तियों को रिजल्ट सेट से बाहर कर देता है जिनके लिए 'कम्पॅरिजन प्रेडिकेट्स' का मान 'ट्रू' नहीं हो पाता है।
 GROUP BY क्लॉज़ का उपयोग समान मान वाली पंक्तियों को पंक्तियों के एक छोटे समूह में बदलने के लिए किया जाता है। GROUP BY का उपयोग अक्सर SQL ऐग्रिग्रेसन फंक्शनों के साथ संयोजन के रूप में डुप्लीकेट पंक्तियों को परिणामी सेट (रिजल्ट सेट) से बाहर करने के लिए होता है। WHERE क्लॉज GROUP BY क्लॉज़ से पहले प्रयुक्त होता है।
 HAVING क्लॉज़ में GROUP BY क्लॉज़ से उत्पन्न पंक्तियों के निस्पंदन के लिए प्रयुक्त होने वाला एक प्रेडीकेट शामिल रहता है। चूंकि यह GROUP BY क्लॉज़ के परिणामों पर काम करता है, इसलिए HAVING क्लॉज़ प्रेडीकेट में ऐग्रिगेशन फंक्शनों का प्रयोग किया जा सकता है।
 ORDER BY क्लॉज़ बतलाता है कि कौन से कॉलम परिणामी डेटा को क्रमबद्ध करने में प्रयुक्त होते हैं और कौन से क्रम में वे क्रमबद्ध होने चाहिए (विकल्प हैं, बढ़ते या घटते क्रम में). एक ORDER BY क्लॉज़ के बिना, एक SQL क्वेरी द्वारा रिटर्न किये गए पंक्तियों का अनुक्रम अपरिभाषित रहता है।

निम्नलिखित SELECT क्वेरी का एक उदाहरण है जो महंगी किताबों की एक सूची को रिटर्न करता है। क्वेरी BOOK नामक टेबल से उन पंक्तियों को प्राप्त कर लेता है जिनमें कि Price कॉलम में मौजूद मान 100.00 से ज्यादा है। परिणाम title के अनुसार बढ़ते हुए क्रम में क्रमबद्ध रहता है। select list में मौजूद ऐस्टरिस्क (*) यह दर्शाता है कि Book टेबल के सारे कॉलम रिजल्ट सेट में उपस्थित रहने चाहिए।
SELECT * 
 FROM Book
 WHERE price>100.00
 ORDER BY title;

नीचे दिया गया उदाहरण किताबों की एक सूची और प्रत्येक किताब से संबद्ध लेखकों की संख्या रिटर्न कर मल्टिपल टेबल, ग्रुपिंग और ऐग्रीगेशन की एक क्वेरी को दर्शाता है।

SELECT Book.title,
 count(*)AS Authors
 FROM Book
 JOIN Book_author ON Book.isbn = Book_author.isbn
 GROUP BY Book.title;

उदाहरण आउटपुट निम्नलिखित के जैसा हो कता है:

 Title Authors
 ---------------------- -------
 SQL Examples and Guide 4
 The Joy of SQL 1
 An Introduction to SQL 2
 Pitfalls of SQL 1

इस पूर्व शर्त के अंतर्गत कि दोनों टेबलों में सिर्फ isbn ही सामान नाम वाले कॉलमों का नाम है और यह कि title नामक कॉलम सिर्फ Books टेबल में ही मौजूद है, ऊपर लिखित क्वेरी को निम्नलिखित रूप में दुबारा लिखा जा सकता है:

SELECT title,
 count(*) AS Authors
 FROM Book 
 NATURAL JOIN Book_author 
 GROUP BY title;

हालांकि, कई वेंडर्स या तो इस तरीके को सपोर्ट नहीं करते, या फिर उन्हें कॉलम नामकरण की परिपाटियों की ज़रुरत होती है।

SQL में संगृहीत मानों पर गणना करने के लिए ऑपरेटर्स और फंक्शन्स मौजूद होते हैं। SQL, डेटा को परियोजित करने के लिए select list (सेलेक्ट सूची) में एक्सप्रेशंस के प्रयोग की अनुमति देता है, जैसा निम्नलिखित उदाहरण में दर्शाया गया है जो उन पुस्तकों की एक सूची रिटर्न करता है जिनकी कीमत 100.00 से ज्यादा है, साथ में एक अतिरिक्त सेल्स टैक्स कॉलम भी है जिसमें sales tax (सेल्स टैक्स) का मान मौजूद है और यह मान price (कीमत) का 6% है।

SELECT isbn
 title,
 price, 
 price*0.06 AS sales_tax
 FROM Book
 WHERE price>100.00
 ORDER BY title;

नल और थ्री-वैल्यूड लॉजिक (3VL) 
SQL में नल (Null) की अवधारणा, रिलेशनल मॉडल में अनुपस्थित जानकारी को नियंत्रित करने के लिए डाली गई थी। ट्रू और फॉल्स के साथ नल (या अज्ञात) की स्थापना थ्री-वैल्यूड लॉजिक की नींव है। नल का कोई मान नहीं होता (और न ही यह किसी डेटा अनुक्षेत्र (डोमेन) का सदस्य है), अपितु यह अनुपस्थित जानकारी के लिए प्रयोग किया जाने वाला एक स्थानधारक या चिह्न है। इसलिए नल (Null) के साथ की गयी तुलनाओं का परिणाम कभी भी ट्रू या फॉल्स नहीं हो सकता बल्कि यह सदा तीसरा लॉजिकल परिणाम- 'अननोन'(अज्ञात) होता है।

SQL, नल को अनुपस्थित जानकारी को नियंत्रित करने के लिए प्रयोग करता है। यह थ्री-वैल्यूड लॉजिक (3VL) को सपोर्ट करता है। वो नियम जो SQL थ्री-वैल्यूड लॉजिक को नियमित करते हैं, नीचे दिए गए हैं (p और q लॉजिकल अवस्थाओं को दर्शाते हैं). शब्द NULL SQL में एक आरक्षित कीवर्ड (रिज़र्व्ड कीवर्ड) भी है जो विशेष नल मार्कर (स्पेशल नल मार्कर) की पहचान करने में प्रयोग होता है।

इसके अतिरिक्त, चूंकि जब भी किसी चीज़ की तुलना नल से होती है तो SQL ऑपरेटर्स 'अननोन' रिटर्न करते हैं, इसलिए SQL विशेषतया नल संबंधी दो कम्पैरिजन प्रेडीकेट की सुविधा प्रदान करता है: IS NULL और IS NOT NULL जांच करते हैं कि डेटा नल है या नहीं। 

ध्यान दें कि SQL केवल उन परिणामों के लिए मान रिटर्न करता है जिनके लिए WHERE क्लॉज़ एक ट्रू मान रिटर्न करता है। यानी, यह फॉल्स मान वाले परिणाम अपवर्जित कर देता है, लेकिन यह उनको भी अपवर्जित कर देता है जिनके मान मालूम नहीं (अज्ञात) हैं।

SQL, यूनिवर्सल क्वांटिफिकेशन (परिमाणन) को स्पष्टतया सपोर्ट नहीं करता और इसे 'निगेटेड एग्जिसटेनशिअल क्वानटिफिकेशन (परिमाणन)' के रूप में निकाला जाना ज़रूरी है।

'इन फिक्सड कम्पेरिज़न ऑपरेटर' "<row value expression> IS DISTINCT FROM <row value expression>" भी है जो दोनों ऑपरैंड के बराबर होने पर या NULL होने पर TRUE रिटर्न करता है। इसी प्रकार IS NOT DISTINCT FROM को "NOT (<row value expression> IS DISTINCT FROM <row value expression>") के रूप में परिभाषित किया जाता है।

डेटा परिचालन 

डेटा मैनिप्युलेशन लैंग्वेज़ (DML), SQL का एक सबसेट है जिसे डेटा को जोड़ने (ऐड), अद्यतन करने (अपडेट) और विलोपन करने (डिलीट) के लिए प्रयोग किया जाता है।
 INSERT, एक मौजूदा टेबल में नई पंक्तियों (पहले टपल्स) को जोड़ता है, उदाहरणार्थ:
INSERT INTO My_table 
 (field1,field2,field3) 
 VALUES 
 ('test','N',NULL);
 UPDATE, मौजूदा टेबल की पंक्तियों के एक सेट को रूपांतरित करता है।
UPDATE My_table 
 SET field1='updated value' 
 WHERE field2='N';
 DELETE एक टेबल में मौजूद पंक्तियों को हटाता है, उदाहरणार्थ:
DELETE FROM My_table 
 WHERE field2='N'; 
 TRUNCATE एक टेबल से सारे डेटा को बहुत शीघ्रता से मिटा देता है। आमतौर पर यह एक अनुवर्ती COMMIT ऑपरेशन का कार्यान्वयन करता है।
 MERGE का एकाधिक टेबलों के डेटा को संयुक्त करने में प्रयोग किया जाता है। यह INSERT और UPDATE तत्वों को संयुक्त करता है। यह SQL:2003 मानक में परिभाषित है; इसके पहले, कुछ डेटाबेसों ने समान कार्यात्मकता को अलग सिंटेक्स (वाक्यविन्यास), जो कभी-कभी "upsert" के नाम से जाने जाते थे, के माध्यम से उपलब्ध कराया था।

ट्रांज़ैक्शन कंट्रोल्स 

ट्रांज़ैक्शंस, यदि उपलब्ध हैं, DML ऑपरेशंस को सम्मिलित कर लेते हैं:

 START TRANSACTION (या BEGIN WORK, या BEGIN TRANSACTION, SQL डायलेक्ट पर निर्भर), डेटाबेस ट्रांज़ैक्शन के आरम्भ को अंकित करते हैं जो (ट्रांज़ैक्शन) या तो पूरी तरह सम्पूर्ण हो जाते हैं या बिलकुल भी नहीं।
 COMMIT, एक ट्रांज़ैक्शन में सभी डेटा परिवर्तनों को स्थायी बनाता है।
 ROLLBACK, पिछले COMMIT या ROLLBACK के बाद से हुए सभी डेटा परिवर्तनों को हटा देता है जिससे डेटा की अवस्था वैसी रह जाती है जैसी उन बदलावों से पहले थी।

एक बार जब COMMIT स्टेटमेंट पूरा हो जाता है, तो ट्रांज़ैक्शन में हुए बदलाव को वापस नहीं लाया जा सकता है।

COMMIT और ROLLBACK वर्तमान ट्रांज़ैक्शन का अंत कर देते हैं और डेटा लॉक्स को रिलीज़ कर देते हैं। एक START TRANSACTION या इस जैसे स्टेटमेंट के अभाव में, SQL के सिमेंटिक्स कार्यान्वयन पर निर्भर होते हैं।
उदाहरण: फंड ट्रांज़ैक्शन का एक क्लासिक बैंक हस्तांतरण (ट्रांसफर) .

START TRANSACTION;
 UPDATE Account SET amount=amount-200 WHERE account_number=1234;
 UPDATE Account SET amount=amount-200 WHERE account_number=2345;
IF ERRORS=0 COMMIT;
IF ERRORS<>0 ROLLBACK;

डेटा डेफिनिशन (डेटा निरूपण) 

डेटा डेफिनिशन लैंग्वेज़ (DDL) टेबल और अनुक्रमणिका संरचना का प्रबंधन करता है। DDL की सबसे बुनियादी इकाइयां हैं- CREATE, ALTER, RENAME, DROP और TRUNCATE स्टेटमेंट्स:

 CREATE डेटाबेस में एक ऑब्जेक्ट (जैसे, एक टेबल) का निर्माण करता है।
 DROP डेटाबेस में ऑब्जेक्ट को मिटा देता है, आमतौर पर यह अप्राप्य होता है।
 ALTER एक मौजूदा ऑब्जेक्ट की संरचना को विभिन्न तरीकों से रूपांतरित करता है—उदाहरण के लिए, एक मौजूदा टेबल में एक कॉलम जोड़ना.
उदाहरण:
CREATE TABLE My_table
(
 my_field1 INT,
 my_field2 VARCHAR (50),
 my_field3 DATE NOT NULL,
 PRIMARY KEY (my_field1, my_field2) 
);

डेटा टाइप्स (प्रकार) 

SQL टेबल का प्रत्येक कॉलम, उस टाइप/टाइप्स को 'डिक्लेयर' करता है जो कॉलम में समाहित हो सकता है। ANSI SQL में निम्नलिखित डेटाटाइप्स शामिल हैं।

कैरेक्टर स्ट्रिंग्स 

 CHARACTER(n) या CHAR(n) — निर्धारित चौड़ाई वाला n-कैरेक्टर स्ट्रिंग, जिसमें आवश्यकता के अनुसार रिक्त स्थानों की समाविष्टि भी की जा सकती है।
 CHARACTER VARYING (n) या VARCHAR (n) — परिवर्तनीय चौड़ाई वाला स्ट्रिंग जिसका अधिकतम आकर n कैरेक्टरों का हो सकता है।
 NATIONAL CHARACTER (n) या NCHAR (n) — निर्धारित चौड़ाई वाला स्ट्रिंग जो एक अंतर्राष्ट्रीय कैरेक्टर सेट को सपोर्ट करता है।
 NATIONAL CHARACTER VARYING (n) या NVARCHAR (n) — परिवर्तनीय चौड़ाई वाला NCHAR स्ट्रिंग

बिट स्ट्रिंग 

 BIT (n) — n बिट्स का एक एरे
 BIT VARYING (n) — n बिट्स तक के आकार का एक एरे

नम्बर्स (संख्याएं) 

 INTEGER और SMALLINT
 FLOAT REAL और DOUBLE PRECISION
 NUMERIC (precision, scale) या DECIMAL (precision, scale)

SQL, संख्याओं या तारीखों को 'राउंड' करने हेतु एक फंक्शन की सुविधा प्रदान करता है। इसे (DB2, PostgreSQL [पोस्टग्रीSQL], Oracle [ओरेकल] और MySQL में) TRUNC, या (Sybase [सीबेस], Oracle [ओरेकल] और Microsoft SQL Server [माइक्रोसॉफ्ट SQL सर्वर]) में ROUND कहा जाता है।

दिनांक और समय 

 DATE
 TIME
 TIMESTAMP
 INTERVAL

डेटा कंट्रोल (नियंत्रण) 

डेटा कंट्रोल लैंग्वेज़ (DCL) उपयोगकर्ताओं और उपयोगकर्ताओं के समूहों को डेटा को ऐक्सेस और मेनीप्यूलेट (जोड़-तोड़) करने के लिए अधिकृत करता है।
इसके दो मुख्य स्टेटमेंट्स हैं:

 GRANT एक या अधिक उपयोगकर्ताओं को एक ऑब्जेक्ट पर किसी संक्रिया या संक्रियाओं के समूह के निष्पादन के लिए अधिकृत करता है।
 REVOKE एक ग्रांट को, जो हो सकता है कि डिफॉल्ट ग्रांट हो, हटा देता है।

उदाहरण:
GRANT SELECT, UPDATE 
 ON My_table 
 TO Some_user, another_user;

REVOKE SELECT,UPDATE 
 ON My_table 
 FROM Some_user, another_user;

प्रोसीडूरल एक्सटेंशंस (प्रक्रियात्मक विस्तारण) 

SQL एक विशिष्ट प्रयोजन: रिलेशनल डेटाबेस में रखे हुए डेटा के क्वेरी के लिए डिजाइन किया गया है। SQL एक सेट-आधारित, डिक्लेयरेटिव, क्वेरी लैंग्वेज़ है, न कि C या BASIC (बेसिक)की तरह का एक 'इम्पेरेटिव लेंग्वेज'. हालांकि, मानक SQL के विस्तारण मौजूद हैं जो प्रोसीडूरल प्रोगार्मिंग लैंग्वेज़ की क्रियात्मकता, जैसे कि 'कंट्रोल-ऑफ-फ्लो कन्सट्रक्ट्स', प्रदान करते हैं। ये हैं:

मानक SQL/PSM एक्सटेंशंस (विस्तारणों) और प्रोपरायटरी SQL एक्सटेंशंस (विस्तारणों) के अलावा, प्रोसीडूरल और ऑब्जेक्ट ओरिएन्टेड प्रोग्रामिंग विशिष्टताओं की सुविधा DBMS के दूसरे लैंग्वेज़ों के साथ एकीकरण के ज़रिये प्राप्त की जा सकती है। SQL मानक, SQL डेटाबेस में जावा कोड को सपोर्ट करने के लिए, SQL/JRT एक्सटेंशंस (जावा प्रोग्रामिंग लैंगवेज़ के लिए SQL रूटीन्स और टाइप्स) को निरूपित करता है। SQL सर्वर 2005 SQLCLR (SQL सर्वर कॉमन लैंग्वेज़ रन टाइम) का प्रयोग डेटाबेस में प्रबंधित .NET असेम्बलियों की मेजबानी के लिए होता है, जबकि SQL सर्वर के पूर्व संस्करण मुख्यतः C में लिखे गए अप्रबंधित एक्सटेन्डेड स्टोर्ड प्रोसीज़रों के उपयोग तक ही सीमित थे। अन्य डेटाबेस प्लैटफॉर्म्स, जैसे MySQL और पोस्टग्रीस (Postgres), फंक्शनों को पर्ल (Perl), पायथन (python), Tcl और C जैसे विभिन्न प्रकार के लैंग्वेज़ों में लिखने की अनुमति देते हैं।

SQL की आलोचना 

SQL, रिलेशनल डेटाबेसों के साथ प्रयोग में लाए जाने हेतु एक डेक्लेयरेटिव कंप्यूटर लैंग्वेज़ है। सबसे दिलचस्प बात यह है कि SQL की मूल विशेषताओं में से कई विशेषताएं, रिलेशनल मॉडल के सिमेंटिक्स और इसके टपल कैलकुलस रियलाइज़ेशन से प्रेरित, लेकिन उल्लंघित, थे। SQL के हाल के विस्तारणों ने रिलेशनल संपूर्णता प्राप्त की लेकिन उल्लंघनों को और भी बदतर बना दिया है जिसके दस्तावेज़ द थर्ड मेनिफेस्टो में उपलब्ध हैं।

SQL के प्रयोगात्मक आलोचनाओं में शामिल हैं:
 कार्यान्वयन, असंगत हैं और आम तौर पर विक्रेताओं के मध्य इनका कोई तालमेल नहीं है। विशिष्ट दिनांक और समय पर, वाक्यविन्यास, स्ट्रिंग का जुड़ाव, नल्स और तुलनात्मक वर्ण संवेदनशीलता, एक विक्रेता दूसरे विक्रेता तक अलग-अलग होती है।
 यह लैंग्वेज़ इसे कार्टीज़ियन जुड़ाव (सभी संभव संयोजनों को जोड़ने) का कार्य करने में इसे बहुत आसान बना डेटा है जिसके परिणामस्वरूप "रन-अवे" परिणाम सेट प्राप्त होते हैं जब WHERE क्लॉज़ों को गलत टाइप कर दिया जाता है। कार्टीज़ियन जुड़ाव का व्यव्हार इतना कम होता है कि एक स्पष्ट CARTESIAN कीवर्ड की आवश्यकता का समर्थन प्राप्त हो सकता है। (SQL 1992 में CROSS JOIN कीवर्ड को समाविष्ट किया गया जो प्रयोक्ता को यह निर्दिष्ट करने की अनुमति प्रदान करता है कि एक कार्टीज़ियन जुड़ाव की आवश्यकता है लेकिन आशुलिपि "अल्पविराम-जुड़ाव", जिसमें कोई विधेय न हों, अभी भी स्वीकार्य वाक्यविन्यास है जो उसी गलती को फिर भी आमंत्रित करता है।)
 यह भी संभव है कि अपडेट या डिलीट करते समय WHERE की संरचना में गलती हो जाए जो टेबल के वांछनीय पंक्तियों से भी ज्यादा पंक्तियों को प्रभावित कर देता है। (सबसे पहले WHERE क्लॉज़ में लेनदेन या आदतन प्रकार का प्रयोग करने के लिए एक वर्क-अराउंड होता है, तब जाकर बाकी सब को भरा जाता है।)
 SQL का व्याकरण शायद अनावश्यक रूप से जटिल होता है और एक COBOL-जैसी कीवर्ड दृष्टिकोण का अनुकरण करता है जब एक कार्य-प्रभावित वाक्यविन्यास के परिणामस्वरूप कुछ व्याकरण और वाक्यविन्यास नियमों का पुनः प्रयोग किया जाता है।

क्रॉस-वेंडर पोर्टेबिलिटी 

SQL के अधिकांश कार्यान्वयनों में सामान्यतः DATE या TIME डेटा प्रकारों जैसे स्टैंडर्ड SQL के बुनियादी विशेषताओं के समर्थन को भुला दिया जाता है। जिसके परिणामस्वरूप, शायद ही कभी SQL कोड को बिना संशोधनों के डेटाबेस सिस्टमों में रखा जा सकता है।

डेटाबेस सिस्टमों में पोर्टेबिलिटी (संगतता) के इस अभाव के पीछे कई कारण हैं:
 SQL मानक की जटिलता और आकार का तात्पर्य यही है कि अधिकांश कार्यान्वयक संपूर्ण मानक का समर्थन नहीं करते हैं।
 मानक, कई महत्वपूर्ण क्षेत्रों (जैसे, अनुक्रम, फ़ाइल भंडारण...) में डेटाबेस के आचरण को निर्दिष्ट नहीं करता है लेकिन यह कार्यान्वयन को निर्दिष्ट करता है ताकि इसके आचरण का निर्णय लिया जा सके।
 SQL मानक सटीक रूप से वाक्यविन्यास को निर्दिष्ट करता है कि एक अनुरूप डेटाबेस सिस्टम को अवश्य ही कार्यान्वित किया जाना चाहिए। हालांकि, लैंग्वेज़ की संरचनाओं के सिमेंटिक्स के प्रति मानक के विनिर्देश का बहुत कम निरूपण प्राप्त होता है जो संदिग्धता की ओर ले जाती है।
 कई डेटाबेस विक्रेताओं के पास बड़े-बड़े मौजूदा ग्राहक डेटाबेस हैं; जब SQL मानक, विक्रेता के डेटाबेस के पूर्व आचरण का विरोध करता है तो विक्रेता, पिछड़ी संगतता को छोड़ने के लिए अनिच्छुक हो सकता है।
 सॉफ्टवेयर विक्रेता अक्सर अन्य उत्पादों के साथ असंगतता का निर्माण करने के इच्छुक रहते हैं क्योंकि इससे उसके मौजूदा प्रयोक्ता उसके प्रति वफादार बने रहते हैं (वेंडर लॉक-इन देखें).

मानकीकरण 
SQL को 1986 में अमेरिकन नैशनल स्टैंडर्ड्स इंस्टिट्यूट [अमरीकी राष्ट्रीय मानक संस्थान] (ANSI) ने एक मानक के रूप में और 1987 में इंटरनैशनल ऑर्गनाइज़ेशन फॉर स्टैंडर्डाइज़ेशन [अंतर्राष्ट्रीय मनाकीकरण संगठन] (ISO) ने SQL-86 के रूप में ग्रहण किया। मूल SQL मानक ने घोषणा की कि SQL का आधिकारिक उच्चारण, "es queue el [एस क्यू एल]" है। कई अंग्रेज़ी-बोलने वाले डेटाबेस संव्यावसायिक अभी भी गैरमानक उच्चारण  (शब्द "सिक्वल" की तरह) का प्रयोग करते हैं। SEQUEL, एक प्रारंभिक IBM डेटाबेस लैंग्वेज़, SQL लैंग्वेज़ का एक पूर्ववर्ती लैंग्वेज़ था।

1996 तक, [[नैशनल इंस्टिट्यूट ऑफ़ स्टैंडर्ड्स ऐंड टेक्नोलॉजी [राष्ट्रीय मानक और प्रौद्योगिकी संस्थान]]] (NIST) के डेटा प्रबंधन मानक कार्यक्रम के तहत SQL मानक के साथ SQL DBMS अनुपालन को प्रमाणिकता दी गई। विक्रेता अब अपने उत्पादों के अनुपालन को स्वयं ही प्रमाणिकता प्रदान करते हैं।

SQL मानक को कई बार संशोधित किया गया है जैसा कि नीचे दर्शाया गया है:

इच्छुक पार्टियां, इन SQL मानक दस्तावेजों को ISO या ANSI से खरीद सकती हैं। SQL:2008 का एक ड्राफ्ट, एक ज़िप आर्काइव के रूप में निःशुल्क उपलब्ध है।

मानक संरचना 
SQL मानक को कई भागों में बांटा गया हैं जिनमें शामिल हैं:

SQL फ्रेमवर्क जो तार्किक अवधारणा प्रदान करता है

SQL/फाउंडेशन जिसे ISO/IEC 9075, भाग 2 में परिभाषित किया गया है। मानक के इस भाग में लैंग्वेज़ के सबसे मुख्य तत्त्व मौजूद हैं। इसमें अनिवार्य और वैकल्पिक दोनों ही विशेषताएं उपलब्ध हैं।

SQL/बाइंडिंग्स जो यह निर्दिष्ट करता है कि SQL, जावा (Java) को छोड़कर, अलग-अलग मेज़बान लैंग्वेज़ों में कैसे बाध्य है।

SQL/CLI, या कॉल-लेवल इंटरफेस, इस भाग को ISO/IEC 9075, भाग 3 में परिभाषित किया गया है। SQL/CLI, सामान्य इंटरफेसिंग घटकों (संरचना और प्रक्रिया) को परिभाषित करता है जिसे अन्य प्रोग्रामिंग लैंग्वेज़ों में रचित अनुप्रयोगों से SQL स्टेटमेंट्स को निष्पादित करने के लिए प्रयोग किया जा सकता है। SQL/CLI को इस प्रकार से परिभाषित किया गया है कि SQL स्टेटमेंट्स और SQL/CLI प्रक्रिया कॉल्स को अनुप्रयोग के स्रोत कोड की कॉलिंग से अलग के रूप में व्यवहृत किया जाता है। ओपन डेटाबेस कनेक्टिविटी, SQL/CLI का एक जाना-माना सुपरसेट है। मानक के इस भाग में सिर्फ अनिवार्य विशेषताएं ही होती हैं।

SQL/PSM, या पर्ज़िस्टेंट स्टोर्ड मॉड्यूल्स [लगातार संग्रहित मॉड्यूल], इस भाग को ISO/IEC 9075, भाग 4 द्वारा परिभाषित किया गया है। SQL/PSM, नियंत्रण-प्रवाह, स्थिति प्रबंधन, स्टेटमेंट स्थिति संकेत और पुनर्संकेत, कर्सर और स्थानीय वेरिएबल और वेरिएबल और पैरामीटर के लिए अभिव्यक्ति का कार्य सहित SQL के प्रक्रियात्मक विस्तारणों को मानकीकृत करता है। इसके अतिरिक्त, SQL/PSM, पर्ज़िस्टेंट डेटाबेस लैंग्वेज़ के नित्यकर्मों की घोषणा और रखरखाव का कार्य करता है। मानक के इस भाग में केवल वैकल्पिक विशेषताएं होती हैं।

SQL/MED, या मैनेजमेंट ऑफ़ एक्सटर्नल डेटा [बाह्य डेटा का प्रबंधन], इस भाग को ISO/IEC 9075, भाग 9 द्वारा परिभाषित किया गया है। SQL/MED, SQL में विस्तारण प्रदान करता है जो एक्सटर्नल डेटा का प्रबंधन करने के लिए SQL को अनुमति देने के लिए फोरेन-डेटा रैपर्स और डेटालिंक प्रकारों को परिभाषित करता है। एक्सटर्नल डेटा, वह डेटा है जिसे SQL-आधारित DBMS में ऐक्सेस तो किया जा सकता है लेकिन इसका प्रबंधन नहीं किया जा सकता है। मानक के इस भाग में केवल वैकल्पिक विशेषताएं होती हैं।

SQL/OLB, या ऑब्जेक्ट लैंग्वेज़ बाइंडिंग्स, इस भाग को ISO/IEC 9075, भाग 10 द्वारा परिभाषित किया गया है। SQL/OLB, SQLJ के वाक्यविन्यास और सिमेंटिक्स को परिभाषित करता है जो जावा (Java) में SQL एम्बेडेड होता है। यह मानक, SQLJ अनुप्रयोगों की बाइनरी पोर्टेबिलिटी सुनिश्चित करने वाले क्रियाविधियों का भी वर्णन करता है और विभिन्न जावा (Java) पैकेजों और उनमें समाहित वर्गों को भी निर्दिष्ट करता है। मानक के इस भाग में केवल वैकल्पिक विशेषताएं होती हैं।

SQL/MM (मल्टीमीडिया), बड़े, जटिल और कभी-कभी स्ट्रीमिंग आइटम वाले डेटा जैसे वीडियो, ऑडियो और स्थानिक डेटा के साथ होशियारी से निपटने के लिए SQL का विस्तार करता है।

SQL/स्कीमाटा, या इनफॉरमेशन ऐंड डेफिनिशन स्कीमाज़, इस भाग को ISO/IEC 9075, भाग 11 द्वारा परिभाषित किया गया है। SQL/स्कीमाटा, इनफॉरमेशन स्कीमा और डेफिनिशन स्कीमा को परिभाषित करता है और इसके लिए यह SQL डेटाबेसों और ऑब्जेक्टों स्व-वर्णी बनाने के लिए उपकरणों का एक सामान्य सेट प्रदान करता है। इन उपकरणों में SQL ऑब्जेक्ट परिचायक, संरचना और एकीकरण बाध्यता, सुरक्षा और प्राधिकरण निर्दिष्टीकरण, ISO/IEC 9075 की विशेषता और पॅकेज, SQL-आधारित DBMS कार्यान्वयनों द्वारा प्रदत्त विशेषताओं का समर्थन, SQL-आधारित DBMS कार्यान्वयन सूचना और साइज़िंग आइटम और DBMS कार्यान्वयनों द्वारा समर्थित मूल्य शामिल हैं। मानक के इस भाग में अनिवार्य और वैकल्पिक दोनों विशेषताएं शामिल हैं।

SQL/JRT, या SQL रूटीन्स ऐंड टाइप्स फॉर द जावा प्रोग्रामिंग लैंग्वेज़ (जावा प्रोग्रामिंग लैंग्वेज़ के लिए SQL के नित्यकर्म और प्रकार), इस भाग को ISO/IEC 9075, भाग 13 द्वारा परिभाषित किया गया है। SQL/JRT, स्थिर जावा तरीकों को SQL अनुप्रयोग के भीतर से नित्यकर्मों के रूप में लागू करने की क्षमता को निर्दिष्ट करता है। यह जावा वर्गों को SQL संरचित प्रयोक्ता-परिभाषित प्रकारों के रूप में प्रयुक्त करने की क्षमता के लिए भी कॉल करता है। मानक के इस भाग में केवल वैकल्पिक विशेषताएं ही मिलती हैं।

SQL/XML, या XML-संबंधित निर्दिष्टीकरण, इस भाग को ISO/IEC 9075, भाग 14 द्वारा परिभाषित किया गया है। SQL/XML, SQL के साथ संयोजन के रूप में XML का उपयोग करने के लिए SQL-आधारित विस्तारणों को निर्दिष्ट करता है। XML डेटा प्रकार के साथ-साथ SQL डेटाबेस में XML के फेर बदल और भंडारण का समर्थन करने के लिए XML से SQL डेटा प्रकार मैपिंग, कई रूटीन्स और फंक्शंस का भी आरंभ किया गया है। मानक के इस भाग में केवल वैकल्पिक विशेषताएं ही शामिल है।

SQL के विकल्प 

रिलेशनल क्वेरी लैंग्वेज़ और SQL के विकल्पों में एक अन्तर स्थापित करना आवश्यक है। SQL के प्रस्तावित रिलेशनल विकल्पों को नीचे प्रस्तुत किया गया है। रिलेशनल के विकल्पों के लिए नेविगेशनल डेटाबेस देखें:
 .QL - ऑब्जेक्ट-ओरिएन्टेड डेटालॉग
 4D क्वेरी लैंग्वेज़ [4D Query Language] (4D QL)
 डेटालॉग
 हाइबरनेट क्वेरी भाषा [Hibernate Query Language] (HQL) - एक जावा-आधारित उपकरण जो संशोधित SQL का उपयोग करता है।
 IBM बिज़नस सिस्टम 12 [IBM Business System 12] (IBM BS12)
 ISBL
 जावा पर्ज़िस्टेंस क्वेरी लैंग्वेज़ [Java Persistence Query Language] (JPQL) - जावा EE5 [Java EE5] में जावा पर्ज़िस्टेंस API [Java Persistence API] द्वारा प्रयुक्त क्वेरी लैंग्वेज़
 LINQ
 ऑब्जेक्ट क्वेरी लैंग्वेज़ (Object Query Language)
 QBE (क्वेरी बाइ एक्ज़ाम्पल) मोशे ज़्लूफ, IBM 1977 द्वारा निर्मित
 क्यूएल जिसका आरंभ यू.सी. बर्कले इन्ग्रेस (U.C. Berkeley Ingres) परियोजना द्वारा 1974 में किया गया
 ट्यूटोरियल D (Tutorial D)
 Xक्वेरी (XQuery)

इन्हें भी देखें 
 ऑब्जेक्ट-रिलेशनल डेटाबेस प्रबंधन प्रणालियों की तुलना
 रिलेशनल डेटाबेस प्रबंधन प्रणालियों की तुलना
 D (डेटा लैंग्वेज़ विनिर्देशन)
 D4 (प्रोग्रामिंग लैंग्वेज़) (D का एक कार्यान्वयन)
 पदानुक्रमित मॉडल
 कंप्यूटर मानकों की सूची
 रिलेशनल डेटाबेस प्रबंधन प्रणालियों की सूची
 MUMPS
 ड्रॉप-डाउन सूची का खोज सुझाव

सन्दर्भ 

 "ए रिलेशनल मॉडल ऑफ़ डेटा फॉर लार्ज शेयर्ड डेटा बैंक्स"  इ. एफ. कॉड, कम्युनिकेशंस ऑफ़ द ACM, खंड 13, अंक 6, जून 1970, पीपी. 377-387.
 कथित SQL दोषों (C2 wiki [विकी]) पर चर्चा

बाहरी कड़ियाँ 

 1995 SQL रियूनियन: पीपुल, प्रोजेक्ट्स, ऐंड पॉलिटिक्स, पॉल मैकजोन्स (ed.) द्वारा: रिलेशनल डेटाबेस और SQL के निजी इतिहास को समर्पित एक पुनर्मिलन बैठक की प्रतिलिपि.
 अमेरिकन नैशनल स्टैंडर्ड्स इंस्टिट्यूट (अमरीकी राष्ट्रीय मानक संस्थान). X3H2 रिकॉर्ड्स, 1978-1995 चार्ल्स बैबेज इंस्टिट्यूट कलेक्शन ने NDL और SQL मानकों के सन्दर्भ में H2 समिति के विकास के दस्तावेज़ प्रस्तुत किए।
 डॉनल्ड डी. चैंबर्लिन के साथ मौखिक इतिहास साक्षात्कार, चार्ल्स बैबेज इंस्टिट्यूट, इस मौखिक इतिहास में, चैंबर्लिन ने अपने प्रारंभिक जीवन, हार्वे मड कॉलेज और स्टैनफोर्ड यूनिवर्सिटी में प्राप्त अपनी शिक्षा और रिलेशनल डेटाबेस प्रौद्योगिकी पर किए गए अपने कार्य का वर्णन प्रस्तुत किया। चैंबर्लिन, सिस्टम R रिसर्च टीम के एक सदस्य थे और रेमंड एफ. बॉयस के साथ मिलकर उसने SQL डेटाबेस लैंग्वेज़ को विकसित किया। चैंबर्लिन ने XML क्वेरी लैंग्वेजों पर हाल ही में की गई
रिसर्च के सन्दर्भ में भी संक्षेप में विचार-विमर्श किया।
 विभिन्न SQL कार्यान्वयनों की तुलना विभिन्न SQL कार्यान्वयनों की इस तुलना का उद्देश्य विभिन्न RDBMS उत्पादों में SQL कोड को डालने के इच्छुक लोगों के एक मार्गनिर्देशक के रूप में अपनी सेवा प्रदान करना और SQL:2008, पोस्टग्रीSQL (PostgreSQL), DB2, MS SQL सर्वर (MS SQL Server), माइSQL (MySQL), ओरेकल (Oracle) और इनफॉर्मिक्स (Informix) के बीच तुलना शामिल करना है।
 ऑनलाइन शिक्षण एसक्यूएल प्रश्नों के लिए स्क्रिप्ट. 

डिक्लेयरेटिव प्रोग्रामिंग लैंग्वेज़
क्वेरी लैंग्वेज़
SQL
डेटाबेस
IBM सॉफ्टवेयर
डेटा मॉडलिंग लैंग्वेज़
SQL कोड के उदाहरण वाले लेख
क्रॉस-प्लेटफॉर्म सॉफ्टवेयर
श्रेष्ठ लेख योग्य लेख
गूगल परियोजना