ایس کیو ایل

ایس کیو ایل  (یا سیکول (**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 وچ تجارتی طور اُتے دستیاب سن ۔ 

## قواعد

## بولی دے عناصر
thumb|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 جداں مختلف قسم دے زباناں وچ لکھنے د‏‏ی اجازت دیندے نيں۔

## حوالے

گٹھ:ایس کیو ایل
گٹھ:پروگرامنگ زباناں مع آئیسو معیار
گٹھ:کوئری زباناں