ایس کیو ایل

ایس کیو ایل  (یا سیکول (**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 میں تجارتی طور پر دستیاب تھے۔ 

## زبان کے عناصر
تصغیر|275px|اس چارٹ سے ایس کیو ایل لینگویج کے ان عناصر کا پتہ چلتا ہے جو ایک واحد بیان کی تخلیق کرتے ہیں۔

SQL متعدد لسانی عناصر میں منقسم ہے، بشمول:
* کلاز (Clauses)، جو بعض صورتوں میں 'بیان' اور 'سوالات' کے جزوی متبادل اجزاء پر مشتمل ہوتے ہیں۔ (بعض حالات میں اختیاری) 
* *اظہاریے * (Expressions)، جو یا تو مقداری قیمت (Scalar values) یا ڈیٹا کے عمودی اور افقی ستونوں پر مشتمل جدول(table) کی تعمیر کر سکتے ہیں۔
* *پری ڈیکیٹس* (Predicates)، جو ایسے 'کنڈیشنز' درج کرتے ہیں جنھیں SQL سہ قیمتی منطق (3VL) بولین ٹرتھ ویلیوز میں جانچا جا سکتا ہے اور جو بیانات اور سوالات کے اثرات کو کم کرنے یا پروگرام کے بہاو کو تبدیل کرنے کے لیے استعمال کیے جاتے ہیں۔
* *سوالات* (Queries) جو مخصوص پیرامیٹرز کی بنیاد پر اعداد و شمار کو پیش کرتے ہیں، یہ ایس کیو ایل کا اہم عنصر ہے۔
* *بیانیے * (Statements) جن کا سكيما اور ڈیٹا پر مسلسل اثر رہتا ہے یا جو لین دین، پروگرام بہاو، کنکشن، سیشن یا تجزیے کو قابو کر سکتے ہیں۔
* * SQL سٹیٹ منٹس میں کومہ فوق النقطہ ("؛") بیانیہ اختتامیہ بھی شامل ہے۔ اگرچہ ہر ایک پلیٹ فارم پر اس کی ضرورت نہیں ہوتی، تاہم اسے SQL گرامر کے معیاری حصہ کے طور پر درج کرنا ہوتا ہے۔
* *غیر اہم خالی جگہ* (Insignificant whitespace) ایس کیو ایل سٹیٹ منٹس اور کوئریز میں عموما نظر انداز کر دیا جاتا ہے، اس سے SQL کوڈ کو پڑھ کر سمجھنا آسان ہوجاتا ہے۔

### آپریٹرز

### کیوریز (Queries)
ایس کیو ایل میں سب سے زیادہ عام کام کیوری ہے، جو تشریحی `SELECT` بیان کے ساتھ چلائی جاتی ہے۔ `SELECT` ایک یا ایک سے زائد جدول یا ایکسپریشنز سے ڈیٹا نکالتا ہے۔ معیاری SELECT سٹیٹ منٹ کا ڈیٹا بیس پر کوئی مستقل اثر نہیں ہوتا ہے۔ ہاں `SELECT` کی کچھ غیر معیاری تطبیقات کا مستقل اثر رہ سکتا ہے، جیسے `SELECT INTO` نحو (syntax) جو چند ڈیٹابیس میں موجود ہوتا ہے۔ 

کوئریز صارفین کو مطلوبہ ڈیٹا کی تشریح کرنے کی صلاحیت فراہم کرتا ہے، اس سے نتیجہ (مطلوب) کو حاصل کرنے کے لیے منصوبہ بندی، آپٹیمائزر اور ضروری آپریشنز کو انجام دینے کی ذمہ داری ڈیٹا بیس مینجمنٹ سسٹم (DBMS) کی ہوتی ہے۔

ایک کوئری میں `SELECT` کلیدی الفاظ کے فورا بعد کے نتائج میں شامل کرنے کے لیے کالموں کی ایک فہرست شامل رہتی ہے۔ یہ وضاحت کرنے کے لیے کہ کیوری جدول کے تمام کولمز کو ریٹرن کرے، ایک اسیٹریسک ( `*` ) کا بھی استعمال کیا جا سکتا ہے۔ `SELECT`، SQL کا سب سے پیچیدہ بیان ہے جس میں متبادل الفاظ اور کلاززبھی ہوتے ہیں۔ مثلاً:
* `FROM` کلاز جو اس کی طرف اشارہ کرتا ہے کہ کون سے جدول سے ڈیٹا کو اخذ کیا جانا ہے۔ `FROM` کلاز میں جدول کو شامل کرنے کے لیے متبادل `JOIN` سب کلاز کو شامل کیا جا سکتا ہے۔
* `WHERE` کلاز میں ایک 'کمپیریزن پریڈیکیٹ' شامل ہے جو کوئری رن ہونے کے نتیجہ میں آنے والی قطاروں کو محدود کرتا ہے۔ `WHERE` کلاز ان تمام قطاروں کو رزلٹ سیٹ سے باہر کر دیتا ہے جن کے لیے 'کمپیریزن پریڈیکیٹ' کی ویلیو 'ٹرو' نہیں ہو پاتی۔
* `GROUP BY` کلاز کا استعمال اسی ویلیو والی قطاروں کو قطار کے ایک چھوٹے گروپ میں تبدیل کرنے کے لیے کیا جاتا ہے۔ `GROUP BY` کا استعمال اکثر ایس کیو ایل ایگری گیشن فنکشنز کے ساتھ مل کر نقلی قطاروں کو زلٹ سیٹ سے باہر کرنے کے لیے ہوتا ہے۔ `WHERE` کلاز `GROUP BY` کلاز سے پہلے استعمال کیا جاتا ہے۔
* `HAVING` کلاز میں `GROUP BY` کلاز سے ظاہر ہونے والی قطاروں کے فلٹریشن کے لیے استعمال ہونے والا ایک پریڈیکیٹ شامل رہتا ہے۔ چونکہ یہ `GROUP BY` کلاز کے نتائج پر کام کرتا ہے، اس لیے `HAVING` کلاز پریڈیکیٹ میں ایگری گیشن فنکشنز کا استعمال کیا جا سکتا ہے۔
* `ORDER BY` کلاز بتاتا ہے کہ کون سے کالم کو نتیجے میں آنے والے ڈیٹا کی ترتیب کے لیے استعمال کرنا ہے اور کون سی ترتیب میں وہ ہونے چاہیے (چڑھتی ترتیب یا اترتی ترتیب میں)۔ ایک `ORDER BY` کلاز کے بغیر، ایک اسی کیو ایل کیوری کے نتیجہ میں ظاہر ہونے والی قطاروں کی ترتیب غیر واضح رہتی ہے۔

مندرجہ ذیل `SELECT` کیوری کی ایک مثال جو مہنگی کتابوں کی ایک فہرست اخذ کرتا ہے۔ کیوری *BOOK* نامی جدول سے ان قطاروں کو حاصل کرتی ہے جن کی *Price* کالم میں موجود قدر یا ویلیو 100.00 سے زیادہ ہے اور نتائج *title* کالم کے مطابق چڑھتی ترتیب میں درج ہوں گے۔ *select list* میں موجود آسٹرسک (*) سے یہ ظاہر ہوتا ہے کہ *Book* ٹیبل کے سارے کالم رزلٹ سیٹ میں موجود رہنے چاہیے۔


```sql
SELECT  *
 FROM Book
 WHERE price> 100.00
 ORDER BY title;
```


نیچے دی گئی مثال ایک فہرست کتب اور ہر ایک کتاب سے وابستہ ادیبوں کی تعداد کو متعدد جدولوں، گروہ بندی اور ایگریگیشن کے ساتھ اخذ کرنے والی ایک کیوری کی عکاسی کرتا ہے۔


```sql
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* ٹیبل میں ہی موجود ہے، اوپر درج کیوری کو درج ذیل طور پر دوبارہ لکھا جا سکتا ہے :


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


تاہم، بہت سے کتب فروش یا تو اس طریقے کو سپورٹ نہیں کرتے یا پھر انھیں کالم نام دینے کی ضرورت ہوتی ہے۔

ایس کیو ایل میں محفوظ اقدار پر حساب کرنے کے لیے آپریٹرز اور فنکشنز موجود ہوتے ہیں۔ ایس کیو ایل ڈیٹا کو اخذ کرنے کے لیے *select list* میں ایکسپریشن کے استعمال کی اجازت دیتا ہے، جیسا کہ مندرجہ ذیل مثال میں موجود ہے جو ان کتابوں کی ایک فہرست اخذ کرتا ہے جن کی قیمت 100.00 سے زیادہ ہے، ساتھ میں ایک اضافی سیلز ٹیکس کالم بھی ہے جس میں *sales tax* کی ویلیو موجود ہے اور یہ قدر *price* کا 6٪ ہے۔


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


#### نل اور تھری-ویلیوڈ لاجک (3VL)
ایس کیو ایل میں نل (Null) کا تصور، ریلیشنل ماڈل میں غائب معلومات کو قابو کرنے کے لیے متعارف کریا گیا تھا۔ ٹرو اور فالس کے ساتھ نل (یا نامعلوم) کا قیام تھری-ویلیوڈ لاجک کی بنیاد ہے۔ نل کی کوئی قدر نہیں ہوتی، بلکہ یہ غائب معلومات کے لیے استعمال کی جانے والی ایک علامت ہے۔ اس لیے نل (Null) کے ساتھ کیا گیا کوئی بھی موازنہ کا نتیجہ کبھی ٹرو یا فالس نہیں ہو سکتا بلکہ یہ ہمیشہ تھری ویلیوڈ لاجکل- 'نامعلوم' ہوتا ہے۔ 

ایس کیو ایل نل کو غائب معلومات کو قابو کرنے کے لیے استعمال کرتا ہے۔ یہ تھری-ویلیوڈ لاجک (3VL) کو سپورٹ کرتا ہے۔ جو اصول ایس کیو ایل تھری-ویلیوڈ لاجک پر نافذ ہوتے ہیں، وہ نیچے درج ہیں (p اور q لاجکل صورتوں کو ظاہر کرتے ہیں)۔  لفظ NULL ایس کیو ایل کا ایک مخصوص کلیدی لفظ ہے جو خاص نل مارکر (special null marker) کی شناخت کرنے میں استعمال ہوتا ہے۔

اس کے علاوہ، چونکہ جب بھی کسی چیز کا موازنہ نل سے ہوتا ہے تو ایس کیو ایل آپریٹرز 'نامعلوم' نتیجہ دیتے ہیں، اس لیے ایس کیو ایل خصوصا نل ویلیو سے متعلق دو کمپیریزن پریڈیکیٹ کی سہولت فراہم کرتا ہے : `IS NULL` اور `IS NOT NULL` جانچ کرتے ہیں کہ ڈیٹا نل ہے یا نہیں۔ 

نوٹ کریں کہ ایس کیو ایل صرف ان نتائج کی قدروں کو ریٹرن کرتا ہے جن کے لیے WHERE کلاز ایک ٹرو ویلیو ریٹرن کرے۔ یعنی، یہ فالس قدر والے نتائج علاحدہ کردیتا ہے، لیکن یہ ان کو بھی خارج کر دیا کرتا ہے جن کی قدر معلوم نہیں، نامعلوم ہو۔

ایس کیو ایل یونیورسل کوانٹیفیکیشن کو سپورٹ نہیں کرتا، اس پر بطور 'negated existential quantification' عمل کرنا ضروری ہے۔ 

'ان فکسڈ کمپیریزن آپریٹر' " IS DISTINCT FROM " بھی ہے جو دونوں آپرینڈ کے برابر ہونے پر یا NULL ہونے پر TRUE واپس کرتا ہے۔ اسی طرح IS NOT DISTINCT FROM کو "NOT ( IS DISTINCT FROM ") کے طور پر بیان کیا جاتا ہے۔

### ڈیٹا مینیوپلیشن

ڈیٹا مینیوپلیشن لینگویج (DML) ایس کیو ایل کا ایک سب سیٹ ہے جسے ڈیٹا کو شامل کرنے (اضافہ)، اپ ڈیٹ اور حذف کرنے کے لیے استعمال کیا جاتا ہے۔
* `INSERT` ایک موجود جدول میں نئی لائنوں کو درج کرتا ہے، مثال کے طور پر:

```sql
INSERT INTO My_table
 (field1، field2، field3)
 VALUES
 ('test'، 'N'، NULL)؛
```

* `UPDATE`، موجود ٹیبل کی قطاروں کے ایک سیٹ کو تبدیل کرتا ہے، مثلاً

```sql
UPDATE My_table
 SET field1 = 'updated value'
 WHERE field2 = 'N'؛
```

* `DELETE` ایک ٹیبل میں موجود قطاروں کو حذف کرتا ہے، مثال کے طور پر:

```sql
DELETE FROM My_table
 WHERE field2 = 'N'؛
```

* `MERGE` ایک سے زیادہ جدولوں کے ڈیٹا کو ضم کرنے کے لیے استعمال کیا جاتا ہے۔ یہ `INSERT` اور `UPDATE` عناصر کو ضم کرتا ہے۔ اس کی وضاحت ایس کیو ایل: 2003 معیار میں کی گئی ہے ؛ اس کے پہلے، کچھ ڈیٹابیسز اسی طرح کی فنکشنلٹی مختلف سنٹیکس میں فراہم کرتے تھے، جنھیں بسااوقات "upsert" کہا جاتا تھا۔

```sql
MERGE INTO TABLE_NAME USING table_reference ON (condition)
 WHEN MATCHED THEN
 UPDATE SET column1 = value1 [, column2 = value2 ...]
 WHEN NOT MATCHED THEN
 INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...
```


### ٹرانزیکشن کنٹرولز

ٹرانزیکشن، اگر دستیاب ہو تو، DML آپریشنز کو شامل کر لیتے ہیں :
* `START TRANSACTION` (یا `BEGIN WORK` یا `BEGIN TRANSACTION`، ایس کیو ایل ڈائلیکٹ پر منحصر)، ڈیٹابیس ٹرانزیکشن کو شروع کرتے ہیں جو (ٹرانزیکشن) یا تو مکمل ہو جاتے ہیں یا نہیں ہوتے۔
* `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` ڈیٹا بیس میں ایک آبجیکٹ (مثلا، ایک ٹیبل) تخلیق کرتا ہے۔

```sql
CREATE TABLE My_table
(
 my_field1 INT،
 my_field2 VARCHAR (50)،
 my_field3 DATE NOT NULL،
 PRIMARY KEY (my_field1، my_field2)
)؛
```

* `DROP` ڈیٹا بیس سے آبجیکٹ کو حذف کردیتا ہے، عموماً پھر حذف شدہ آبجیکٹ واپس نہیں لایا جا سکتا۔

```sql
DROP TABLE example;
```

* `ALTER` ایک موجود آبجیکٹ کی ساخت کو مختلف طریقوں سے تبدیل کرتا ہے۔ مثلا، ایک موجود ٹیبل میں ایک کالم شامل کرنا، مثال:

```sql
ALTER TABLE example ADD field4 NUMBER(3) NOT NULL;
```

* `TRUNCATE` ایک ٹیبل سے سارے ڈیٹا کو بہت تیزی سے مٹا دیتا ہے۔

```sql
TRUNCATE TABLE example;
```


### اقسام ڈیٹا

ایس کیو ایل ٹیبل کا ہر کالم ان اقسام کو ڈکلیئر کرتا ہے جو کالم میں موجود ہو سکتے ہیں۔ ANSI ایس کیو ایل میں مندرجہ ذیل ڈیٹا ٹائپس شامل ہیں :

#### کریکٹر سٹرنگز
* `CHARACTER( <var>n</var> )` یا `CHAR( <var>n</var> )` - متعین چوڑائی والا n -کیریکٹر سٹرنگ، جس میں ضرورت کے مطابق خالی جگہوں کو پر بھی کی جا سکتا ہے۔
* `CHARACTER VARYING ( <var>n</var> )` یا `VARCHAR ( <var>n</var> )` - متغیر چوڑائی والا سٹرنگ n کیریکٹر کے زیادہ سے زیادہ حجم کے ساتھ۔
* `NATIONAL CHARACTER ( <var>n</var> )` یا `NCHAR ( <var>n</var> )` - متعین چوڑائی والا سٹرنگ جو ایک بین الاقوامی کریکٹر سیٹ کو سپورٹ کرتا ہے۔
* `NATIONAL CHARACTER VARYING ( <var>n</var> )` یا `NVARCHAR` (n) - متغیر چوڑائی والا `NCHAR` سٹرنگ

#### بٹ سٹرنگ
* `BIT ( <var>n</var> )` - n بٹس کا ایک ایرے
* `BIT VARYING ( <var>n</var> )` - n بٹس تک کے سائز کا ایک ایرے

#### نمبرز
* `INTEGER` اور `SMALLINT`
* `FLOAT REAL` اور `DOUBLE PRECISION`
* `NUMERIC ( <var>precision</var> , <var>scale</var> )` یا `DECIMAL ( <var>precision</var> , <var>scale</var> )`

ایس کیو ایل اعداد یا تاریخوں کو 'راؤنڈ' کرنے کے لیے ایک فنکشن فراہم کرتا ہے۔ اسے (DB2، PostgreSQL اوریکل اور MySQL میں) `TRUNC` یا (Sybase، اوریکل اور Microsoft SQL Server) میں `ROUND` کہا جاتا ہے۔ 

#### تاریخ اور وقت
* `DATE`
* `TIME`
* `TIMESTAMP`
* `INTERVAL`

### ڈیٹا کنٹرول (کنٹرول)

ڈیٹا کنٹرول لینگویج (DCL) صارفین کو ڈیٹا تک رسائی اور استعمال کرنے کا اختیار دیتی ہے۔
اس کے دو اہم سٹیٹ منٹس ہیں :
* `GRANT` ایک یا زائد صارفین کو ایک آبجیکٹ پر آپریشن کو عملدرآمد کرنے کا اختیار دیتا ہے۔
* `REVOKE` ایک گرانٹ کو، جو ممکن ہے ڈیفالٹ گرانٹ ہو، ختم کردیتا ہے۔

مثال:

```sql
GRANT SELECT، UPDATE
 ON My_table
 TO Some_user، another_user؛

REVOKE SELECT، UPDATE
 ON My_table
 FROM Some_user، another_user؛
```


### پروسیجرل توسیعات

ایس کیو ایل ایک مخصوص مقصد ریلیشنل ڈیٹا بیس میں محفوظ ڈیٹا کو تلاش کرنے کے لیے بنائی گئی ہے۔ ایس کیو ایل ایک سیٹ -بیسڈ، بیانیہ کیوری لینگویج ہے، نہ کہ C یا BASIC کی طرح کی ایک 'امپریٹیو لینگویج'۔ تاہم، معیاری ایس کیو ایل کی توسیعات (extensions) اس میں پروسیجرل پروگرامنگ لینگویج کی خصوصیت کا اضافہ کردیتی ہیں، جیسے کنٹرول-آف-فلو كنسٹركٹس (control-of-flow constructs)۔ ملاحظہ فرمائیں :

معیاری SQL / PSM توسیع اور پروپرائٹری ایس کیو ایل توسیع کے علاوہ، پروسیجرل اور آبجیکٹ اوریئنٹڈ پروگرامنگ کی خصوصیات کی سہولت DBMS کی دوسرے لینگویج کو ضم کرکے حاصل کی جا سکتی ہے۔ معیاری ایس کیو ایل ایس کیو ایل ڈیٹابیس میں جاوا کوڈ کو سپورٹ کرنے کے لیے، SQL / JRT توسیعات (جاوا پروگرامنگ زبان کے لیے SQL روٹينس اینڈ ٹائپس) کا مشورہ دیتی ہے۔ ایس کیو ایل سرور 2005 SQLCLR (SQL سرور کامن لینگویج رن ٹائم) کا استعمال ڈیٹا بیس میں منظم۔NET اسیمبلیز کو ہوسٹ کرنے کے لیے ہوتا ہے، جبکہ SQL سرور کے سابق ورژن بنیادی طور C میں لکھے گئے غیر منظم توسیع شدہ محفوظ پروسیجرز کے استعمال تک ہی محدود تھے۔ دیگر ڈیٹا بیس صارفین کو MySQL اور پوسٹگريس (Postgres) فنکشنوں کو پرل (Perl)، پائتھون، Tcl اور C جیسے مختلف قسم کے زبانوں میں لکھنے کی اجازت دیتے ہیں۔

## حوالہ جات


زمرہ:پروگرامنگ زبانیں مع آئیسو معیار
زمرہ:کوئری زبانیں
زمرہ:ویکی ڈیٹا سے مختلف مختصر وضاحت
زمرہ:آئی بی ایم سافٹ ویئر
زمرہ:کراس پلیٹ فارم سافٹ ویئر
زمرہ:کمپیوٹر فائل فارمیٹ
زمرہ:1974ء کے سافٹ ویئر
زمرہ:شمارندکاری ترخیمات
زمرہ:اختصارات