ایس کیو ایل

سانچہ:خانہ معلومات پروگرامنگ زبان
ایس کیو ایل (انگریزی: SQL) (یا سیکول (Structured Query Language) ایک ڈیٹابیس پروگرامنگ زبان ہے جسے نسبتی ڈیٹابیس منتظم سسٹم (Relational Database management system، مختصراً RDBMS) میں ڈیٹا کو منظم رکھنے کے لیے بنایا گیا ہے۔ یہ بنیادی طور ریلیشنل الجبرا اور ٹوپل ریلیشنل کیلکولس پر مبنی ہے۔ اس کے دائرہ کار میں ڈیٹا کا اندراج، کوئری، ڈیٹا کا حذف و اضافہ، سکیما تعمیر اور اصلاح، نیز ڈیٹا ایکسس کنٹرول (ڈیٹا کے استعمال پر کنٹرول) شامل ہے۔ ایس کیو ایل ایڈگر ایف کوڈ (Edgar F. Codd) کے ریلیشنل ماڈل کی اولین زبانوں میں شامل تھی، جسے انھوں نے اپنے 1970ء کے ایک مقالہ "A Relational Model of Data for Large Shared Data Banks" میں پیش کیا تھا۔ گرچہ موجودہ ایس کیو ایل ایڈگر کوڈ کے بیان کردہ ماڈل سے مکمل مماثلت اور تعلق نہیں رکھتی، اس کے باوجود یہ ریلیشنل ڈیٹابیس کے لیے انتہائی وسیع پیمانے پر استعمال کی جانے والی زبان بن گئی ہے۔
ایس کیو ایل کو 1970 کی دہائی کے آغاز میں ڈونالڈ ڈی چیمبرلین (Donald D. Chamberlin) اور ریمنڈ ایف بوئیس ( Raymond F. Boyce) نے آئی بی ایم میں تیار کیا تھا۔ یہ ورژن، جس کا ابتدائی نام SEQUEL (سیکول) (Structured English Query Language) تھا، آئی بی ایم کے اصل نیم ریلیشنل ڈیٹا بیس آر سسٹم (System R) میں محفوظ ڈیٹا کے سلیقہ بندی اور حصول کے لیے ڈیزائن کیا گیا تھا۔ آئی بی ایم نے ایس کیو ایل کے اس ورژن کا 1985 میں پیٹنٹ کرا لیا۔
1970 کی دہائی کے دوران میں آئی بی ایم سان جوسے ریسرچ لیباریٹری میں ایک گروپ نے آر سسٹم ریلیشنل ڈیٹا بیس مینجمنٹ سسٹم کو تیار کیا تھا، جسے بعد میں آئی بی ایم کے ڈونالڈ ڈی چیمبرلین اور ریمنڈ ایف بوئیس نے آر سسٹم میں محفوظ ڈیٹا کے انتظام کے لیے سٹرکچرڈ انگلش کیوری لینگویج (SEQUEL یا SEQL) کی تخلیق کی۔ مخفف لفظ SEQUEL کو بعد میں تبدیل کرکے SQL کر دیا گیا کیونکہ یہ برطانیہ کی ہاکر سڈلے نامی ایئرکرافٹ کمپنی کا ٹریڈ مارک تھا۔
1970 کی دہائی کے شروع میں ایم آئی ٹی (MIT) میں تیار RDMS اور 1974 میں یو سی برکلے (UC Berkely) میں تیار انگریس (Ingres) پہلے نسبتی ڈیٹابیس منتظم سسٹم (RDBMS) تھے۔ انگریس (Ingres) نے کیول (QUEL) نامی ایک کوئری زبان تیار کی تھی جسے بازار میں SQL نے مات دے دیا۔
1970 کی دہائی کے آخر میں ریلیشنل سافٹ ویئر، انکارپوریشن (اب اوریکل کارپوریشن) نے ایڈگر کوڈ کے بیان کردہ تصوارت کی صلاحیتوں کو محسوس کیا تو چیبرلین اور بوئیس نے خود کی ایس کیو ایل پر مبنی RDBMS کو اس خواہش کے ساتھ تیار کیا کہ وہ اسے امریکی بحریہ، سینٹرل انٹیلی جنس ایجنسی اور دیگر امریکی حکومتی ایجنسیوں کو فروخت کرسکیں۔ 1979 کے موسم گرما میں ریلیشنل سافٹ ویئر، انکارپوریشن نے ویکس (VAX) کمپیوٹرز کے لیے کاروباری طور پر دستیاب ایس کیو ایل، اوریکل (ورژن 2) کو متعارف کریا۔ اوریکل (ورژن 2) نے بازار میں آئی بی ایم کے نظام / 38 RDBMS کے ریلیز کو کچھ ہفتوں میں ہی پیچھے کر دیا۔
سسٹم کی افادیت اور عملیت کا تعین کرنے کے لیے صارفین کے جانچ مقامات (test sites) پر SQL کو ٹیسٹ کرنے کے بعد آئی بی ایم نے ان کے نظام آر (System R) پر مبنی کاروباری مصنوعات کو ترقی دینا شروع کر دیا۔ اس سسٹم میں نظام / 38 (سسٹم / 38)، SQL / DS اور DB2 شامل تھے اور جو بالترتیب 1979، 1981 اور 1983 میں تجارتی طور پر دستیاب تھے۔
SQL متعدد لسانی عناصر میں منقسم ہے، بشمول:
ایس کیو ایل میں سب سے زیادہ عام کام کیوری ہے، جو تشریحی SELECT بیان کے ساتھ چلائی جاتی ہے۔ SELECT ایک یا ایک سے زائد جدول یا ایکسپریشنز سے ڈیٹا نکالتا ہے۔ معیاری SELECT سٹیٹ منٹ کا ڈیٹا بیس پر کوئی مستقل اثر نہیں ہوتا ہے۔ ہاں SELECT کی کچھ غیر معیاری تطبیقات کا مستقل اثر رہ سکتا ہے، جیسے SELECT INTO نحو (syntax) جو چند ڈیٹابیس میں موجود ہوتا ہے۔
کوئریز صارفین کو مطلوبہ ڈیٹا کی تشریح کرنے کی صلاحیت فراہم کرتا ہے، اس سے نتیجہ (مطلوب) کو حاصل کرنے کے لیے منصوبہ بندی، آپٹیمائزر اور ضروری آپریشنز کو انجام دینے کی ذمہ داری ڈیٹا بیس مینجمنٹ سسٹم (DBMS) کی ہوتی ہے۔
ایک کوئری میں SELECT کلیدی الفاظ کے فورا بعد کے نتائج میں شامل کرنے کے لیے کالموں کی ایک فہرست شامل رہتی ہے۔ یہ وضاحت کرنے کے لیے کہ کیوری جدول کے تمام کولمز کو ریٹرن کرے، ایک اسیٹریسک ( * ) کا بھی استعمال کیا جا سکتا ہے۔ SELECT، SQL کا سب سے پیچیدہ بیان ہے جس میں متبادل الفاظ اور کلاززبھی ہوتے ہیں۔ مثلاً:
مندرجہ ذیل SELECT کیوری کی ایک مثال جو مہنگی کتابوں کی ایک فہرست اخذ کرتا ہے۔ کیوری BOOK نامی جدول سے ان قطاروں کو حاصل کرتی ہے جن کی Price کالم میں موجود قدر یا ویلیو 100.00 سے زیادہ ہے اور نتائج title کالم کے مطابق چڑھتی ترتیب میں درج ہوں گے۔ select list میں موجود آسٹرسک (*) سے یہ ظاہر ہوتا ہے کہ Book ٹیبل کے سارے کالم رزلٹ سیٹ میں موجود رہنے چاہیے۔
نیچے دی گئی مثال ایک فہرست کتب اور ہر ایک کتاب سے وابستہ ادیبوں کی تعداد کو متعدد جدولوں، گروہ بندی اور ایگریگیشن کے ساتھ اخذ کرنے والی ایک کیوری کی عکاسی کرتا ہے۔
اس نمونہ کیوری کا نتیجہ یوں ہو سکتا ہے :
اس سابقہ شرط کے تحت کہ دونوں جدول میں صرف isbn ہی سامان نام والے کالموں کا نام ہے اور title نامی کالم صرف Books ٹیبل میں ہی موجود ہے، اوپر درج کیوری کو درج ذیل طور پر دوبارہ لکھا جا سکتا ہے :
تاہم، بہت سے کتب فروش یا تو اس طریقے کو سپورٹ نہیں کرتے یا پھر انھیں کالم نام دینے کی ضرورت ہوتی ہے۔
ایس کیو ایل میں محفوظ اقدار پر حساب کرنے کے لیے آپریٹرز اور فنکشنز موجود ہوتے ہیں۔ ایس کیو ایل ڈیٹا کو اخذ کرنے کے لیے select list میں ایکسپریشن کے استعمال کی اجازت دیتا ہے، جیسا کہ مندرجہ ذیل مثال میں موجود ہے جو ان کتابوں کی ایک فہرست اخذ کرتا ہے جن کی قیمت 100.00 سے زیادہ ہے، ساتھ میں ایک اضافی سیلز ٹیکس کالم بھی ہے جس میں sales tax کی ویلیو موجود ہے اور یہ قدر price کا 6٪ ہے۔
ایس کیو ایل میں نل (Null) کا تصور، ریلیشنل ماڈل میں غائب معلومات کو قابو کرنے کے لیے متعارف کریا گیا تھا۔ ٹرو اور فالس کے ساتھ نل (یا نامعلوم) کا قیام تھری-ویلیوڈ لاجک کی بنیاد ہے۔ نل کی کوئی قدر نہیں ہوتی، بلکہ یہ غائب معلومات کے لیے استعمال کی جانے والی ایک علامت ہے۔ اس لیے نل (Null) کے ساتھ کیا گیا کوئی بھی موازنہ کا نتیجہ کبھی ٹرو یا فالس نہیں ہو سکتا بلکہ یہ ہمیشہ تھری ویلیوڈ لاجکل- 'نامعلوم' ہوتا ہے۔
ایس کیو ایل نل کو غائب معلومات کو قابو کرنے کے لیے استعمال کرتا ہے۔ یہ تھری-ویلیوڈ لاجک (3VL) کو سپورٹ کرتا ہے۔ جو اصول ایس کیو ایل تھری-ویلیوڈ لاجک پر نافذ ہوتے ہیں، وہ نیچے درج ہیں (p اور q لاجکل صورتوں کو ظاہر کرتے ہیں)۔ لفظ NULL ایس کیو ایل کا ایک مخصوص کلیدی لفظ ہے جو خاص نل مارکر (special null marker) کی شناخت کرنے میں استعمال ہوتا ہے۔
اس کے علاوہ، چونکہ جب بھی کسی چیز کا موازنہ نل سے ہوتا ہے تو ایس کیو ایل آپریٹرز 'نامعلوم' نتیجہ دیتے ہیں، اس لیے ایس کیو ایل خصوصا نل ویلیو سے متعلق دو کمپیریزن پریڈیکیٹ کی سہولت فراہم کرتا ہے : IS NULL اور IS NOT NULL جانچ کرتے ہیں کہ ڈیٹا نل ہے یا نہیں۔
نوٹ کریں کہ ایس کیو ایل صرف ان نتائج کی قدروں کو ریٹرن کرتا ہے جن کے لیے WHERE کلاز ایک ٹرو ویلیو ریٹرن کرے۔ یعنی، یہ فالس قدر والے نتائج علاحدہ کردیتا ہے، لیکن یہ ان کو بھی خارج کر دیا کرتا ہے جن کی قدر معلوم نہیں، نامعلوم ہو۔
ایس کیو ایل یونیورسل کوانٹیفیکیشن کو سپورٹ نہیں کرتا، اس پر بطور 'negated existential quantification' عمل کرنا ضروری ہے۔
'ان فکسڈ کمپیریزن آپریٹر' "<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) ایس کیو ایل کا ایک سب سیٹ ہے جسے ڈیٹا کو شامل کرنے (اضافہ)، اپ ڈیٹ اور حذف کرنے کے لیے استعمال کیا جاتا ہے۔
ٹرانزیکشن، اگر دستیاب ہو تو، DML آپریشنز کو شامل کر لیتے ہیں :
ایک بار جب COMMIT سٹیٹ منٹ مکمل ہو جاتا ہے، تو ٹرانزیکشن تبدیلیوں کو واپس نہیں لایا جا سکتا۔
COMMIT اور ROLLBACK موجودہ ٹرانزیکشن کو ختم کرکے ڈیٹا لاکس کو ریلیز کر دیتے ہیں۔ START TRANSACTION یا اس کے مشابہ سٹیٹ منٹ کی غیر موجودگی میں، اسی کیو ایل کے سمینٹکس عمل پر منحصر ہوتے ہیں۔ مثال: فنڈ ٹرانزیکشن کا ایک کلاسک بینک ٹرانسفر
ڈیٹا ڈیفینیشن لینگویج (DDL) ٹیبل اور انڈیکس سٹرکچر کو سنبھالتی ہے۔ DDL کی بالکل بنیادی چیزیں ہیں : CREATE، ALTER، RENAME، DROP اور TRUNCATE سٹیٹ منٹس:
ایس کیو ایل ٹیبل کا ہر کالم ان اقسام کو ڈکلیئر کرتا ہے جو کالم میں موجود ہو سکتے ہیں۔ ANSI ایس کیو ایل میں مندرجہ ذیل ڈیٹا ٹائپس شامل ہیں :
ایس کیو ایل اعداد یا تاریخوں کو 'راؤنڈ' کرنے کے لیے ایک فنکشن فراہم کرتا ہے۔ اسے (DB2، PostgreSQL اوریکل اور MySQL میں) TRUNC یا (Sybase، اوریکل اور Microsoft SQL Server) میں ROUND کہا جاتا ہے۔
ڈیٹا کنٹرول لینگویج (DCL) صارفین کو ڈیٹا تک رسائی اور استعمال کرنے کا اختیار دیتی ہے۔ اس کے دو اہم سٹیٹ منٹس ہیں :
مثال:
ایس کیو ایل ایک مخصوص مقصد ریلیشنل ڈیٹا بیس میں محفوظ ڈیٹا کو تلاش کرنے کے لیے بنائی گئی ہے۔ ایس کیو ایل ایک سیٹ -بیسڈ، بیانیہ کیوری لینگویج ہے، نہ کہ C یا BASIC کی طرح کی ایک 'امپریٹیو لینگویج'۔ تاہم، معیاری ایس کیو ایل کی توسیعات (extensions) اس میں پروسیجرل پروگرامنگ لینگویج کی خصوصیت کا اضافہ کردیتی ہیں، جیسے کنٹرول-آف-فلو كنسٹركٹس (control-of-flow constructs)۔ ملاحظہ فرمائیں :
معیاری SQL / PSM توسیع اور پروپرائٹری ایس کیو ایل توسیع کے علاوہ، پروسیجرل اور آبجیکٹ اوریئنٹڈ پروگرامنگ کی خصوصیات کی سہولت DBMS کی دوسرے لینگویج کو ضم کرکے حاصل کی جا سکتی ہے۔ معیاری ایس کیو ایل ایس کیو ایل ڈیٹابیس میں جاوا کوڈ کو سپورٹ کرنے کے لیے، SQL / JRT توسیعات (جاوا پروگرامنگ زبان کے لیے SQL روٹينس اینڈ ٹائپس) کا مشورہ دیتی ہے۔ ایس کیو ایل سرور 2005 SQLCLR (SQL سرور کامن لینگویج رن ٹائم) کا استعمال ڈیٹا بیس میں منظم۔NET اسیمبلیز کو ہوسٹ کرنے کے لیے ہوتا ہے، جبکہ SQL سرور کے سابق ورژن بنیادی طور C میں لکھے گئے غیر منظم توسیع شدہ محفوظ پروسیجرز کے استعمال تک ہی محدود تھے۔ دیگر ڈیٹا بیس صارفین کو MySQL اور پوسٹگريس (Postgres) فنکشنوں کو پرل (Perl)، پائتھون، Tcl اور C جیسے مختلف قسم کے زبانوں میں لکھنے کی اجازت دیتے ہیں۔