باب 3.

Basic SQL

جیسا کہ باب 2 میں ذکر کیا گیا ہے، ڈاکٹر.

ایڈگر ایف.

کوڈ نے 1970 کی دہائی کے اوائل میں رشتہ دار ڈیٹا بیس ماڈل اور اس کی عام شکلوں کا تصور کیا۔

1974 میں ، آئی بی ایم کی سان جوز لیب کے محققین نے ایک بڑے منصوبے پر کام شروع کیا جس کا مقصد رشتہ دار ماڈل کی افادیت کو ثابت کرنا تھا ، جسے سسٹم آر کہا جاتا ہے۔

ایک ہی وقت میں، ڈاکٹر.

ڈونلڈ چیمبرلین اور ان کے ساتھی ڈیٹا بیس زبان کی وضاحت کرنے کے لئے بھی کام کر رہے تھے۔

انہوں نے اسٹرکچرڈ انگلش کوئری لینگویج (سیکوئل) تیار کی ، جس نے صارفین کو واضح طور پر بیان کردہ انگریزی طرز کے جملوں کا استعمال کرتے ہوئے ایک رشتہ دار ڈیٹا بیس سے پوچھ گچھ کرنے کی اجازت دی۔

بعد میں قانونی وجوہات کی بنا پر اس کا نام بدل کر اسٹرکچرڈ کوئری لینگویج (ایس کیو ایل) رکھ دیا گیا۔

ایس کیو ایل پر مبنی پہلا ڈیٹا بیس مینجمنٹ سسٹم 70 کی دہائی کے آخر تک تجارتی طور پر دستیاب ہوا۔

ڈیٹا بیس زبانوں کی ترقی کے ارد گرد بڑھتی ہوئی سرگرمی کے ساتھ ، چیزوں کو آسان بنانے کے لئے معیار ابھرا ، اور کمیونٹی ایس کیو ایل پر آباد ہوگئی۔

دونوں امریکی اور بین الاقوامی معیار کی تنظیموں (اے این ایس آئی اور آئی ایس او) نے معیار کے عمل میں حصہ لیا، اور 1986 میں پہلے ایس کیو ایل معیار کی منظوری دی گئی۔

بعد میں اس معیار پر کئی بار نظر ثانی کی گئی ، جس میں نام (ایس کیو ایل: 1999 ، ایس کیو ایل : 2003 ، ایس کیو ایل : 2008 ، وغیرہ) متعلقہ سالوں میں جاری کردہ ورژن کی نشاندہی کرتے ہیں۔

ہم کسی بھی وقت ایس کیو ایل معیار کے موجودہ ورژن کا مطلب لینے کے لئے ایس کیو ایل اسٹینڈرڈ یا معیاری ایس کیو ایل جملے کا استعمال کریں گے۔

MySQL اضافی خصوصیات فراہم کرتے ہوئے معیاری ایس کیو ایل کو بڑھاتا ہے۔

مثال کے طور پر ، MySQL STRAIGHT_JOIN کو نافذ کرتا ہے ، جو نحو ہے جو دوسرے ڈی بی ایم ایس کے ذریعہ تسلیم نہیں کیا جاتا ہے۔

یہ باب مائی ایس کیو ایل کے ایس کیو ایل نفاذ کا تعارف کراتا ہے ، جسے ہم اکثر سی آر یو ڈی آپریشنز کے طور پر حوالہ دیتے ہیں : تخلیق کریں ، پڑھیں ، اپ ڈیٹ کریں اور حذف کریں۔

ہم آپ کو دکھائیں گے کہ سلیکٹ اسٹیٹمنٹ کے ساتھ ڈیٹا بیس سے ڈیٹا کو کیسے پڑھا جائے اور منتخب کریں کہ کون سا ڈیٹا بازیافت کرنا ہے اور اسے کس ترتیب میں دکھایا گیا ہے۔

ہم آپ کو ڈیٹا شامل کرنے کے لئے داخل کردہ بیان کے ساتھ اپنے ڈیٹا بیس میں ترمیم کرنے ، ڈیٹا کو تبدیل کرنے کے لئے اپ ڈیٹ کرنے اور ڈیٹا کو ہٹانے کے لئے حذف کرنے کی بنیادی باتیں بھی دکھائیں گے۔

آخر میں ، ہم وضاحت کریں گے کہ آپ کے ڈیٹا بیس کو تلاش کرنے کے لئے غیر معیاری شو ٹیبلز اور کالم بیانات دکھانے کا طریقہ۔

سکیلا ڈیٹا بیس کا استعمال

باب 2 میں ، ہم نے آپ کو ای آر ماڈل کا استعمال کرتے ہوئے ڈیٹا بیس ڈایاگرام بنانے کے اصول دکھائے۔

ہم نے ای آر ماڈل کو ایک فارمیٹ میں تبدیل کرنے کے لئے آپ کے اقدامات کو بھی متعارف کرایا جو رشتہ دار ڈیٹا بیس کی تعمیر کے لئے سمجھ میں آتا ہے۔

یہ سیکشن آپ کو MySQL سکیلا ڈیٹا بیس کی ساخت دکھائے گا تاکہ آپ مختلف ڈیٹا بیس رشتہ دار ماڈلز سے واقف ہونا شروع کرسکیں۔

ہم یہاں ڈیٹا بیس بنانے کے لئے استعمال ہونے والے ایس کیو ایل بیانات کی وضاحت نہیں کریں گے؛ یہ باب 4 کا موضوع ہے.

اگر آپ نے ابھی تک ڈیٹا بیس درآمد نہیں کیا ہے تو ، کام کو انجام دینے کے لئے "اینٹیٹی ریلیشن شپ ماڈلنگ مثالیں" میں اقدامات پر عمل کریں۔

ہمارے موجودہ ڈیٹا بیس کے طور پر سکیلا ڈیٹا بیس کا انتخاب کرنے کے لئے، ہم یو ایس ای بیان استعمال کریں گے.

درج ذیل کمانڈ ٹائپ کریں:

میرا سوال>
ی ایس یو ایس
سکیلا
۔

Database تبدیلmysql>

آپ سلیکٹ ڈیٹا بیس ٹائپ کرکے چیک کرسکتے ہیں کہ فعال ڈیٹا بیس کون سا ہے()۔ حکم:

مائسکول
>
سلیکٹ
ڈیٹا بیس
();

+------------+| ڈیٹا بیس() |+------------+| sçla |+------------+1 قطار in سیٹ (0.00 سیکنڈ)

اب ، آئیے دریافت کرتے ہیں کہ شو ٹیبلز بیان کا استعمال کرتے ہوئے سکیلا ڈیٹا بیس کون سے ٹیبل بناتے ہیں:

>
و
ٹیبلز
۔

+----------------------------+| Tables_in_sakila |+----------------------------+| اداکار || actor_info || ...

|| گاہک || customer_list || فلم || film_actor || film_category || film_list || film_text || انوینٹری || زبان |
| nicer_but_slower_film_list || ادائیگی || کرایہ || sales_by_film_category || sales_by_store || عملہ || staff_list || اسٹور |+----------------------------+23 قطاریں سیٹ میں (0.00 سیکنڈ)

اب تک، کوئی حیرت کی بات نہیں ہے.

آئیے ہر ٹیبل کے بارے میں مزید جانیں جو سکیلا ڈیٹا بیس بناتے ہیں۔

سب سے پہلے ، آئیے اداکار ٹیبل کو تلاش کرنے کے لئے شو کالمز بیان کا استعمال کریں (نوٹ کریں کہ آؤٹ پٹ کو صفحے کے مارجن کے ساتھ فٹ ہونے کے لئے لپیٹ دیا گیا ہے):

>
اداکار کے
کالم
دکھائیں
۔

+-------------+-------------------+------+-----+-------------------+...| میدان | قسم | صفر | کلید | پہلے سے طے شدہ |...+-------------+-------------------+------+-----+-------------------+...| actor_id | دستخط نہ کرنے والا چھوٹا | نہیں | پی آر آئی | نول |.... | first_name | ورچر(45) | نہیں | | نول |.... | last_name | ورچر(45) | نہیں | ایم یو ایل | نول |.... | last_update | ٹائم اسٹیمپ | نہیں | | CURRENT_TIMESTAMP |...+-------------+-------------------+------+-----+-------------------+......+-----------------------------------------------+...... اضافی | ...+-----------------------------------------------+ ...| auto_increment | ...| | ...| | ...| اپ ڈیٹ CURRENT_TIMESTAMP پر DEFAULT_GENERATED | سیٹ میں ...+ ----------------------------------------------- +
4 قطاریں (0.01 سیکنڈ)

بیان کردہ مطلوبہ الفاظ شو کالمز سے مماثلت رکھتے ہیں ، اور ہم اسے صرف ڈی ای ایس سی تک محدود کرسکتے ہیں ، لہذا ہم پچھلے سوال کو مندرجہ ذیل طور پر لکھ سکتے ہیں:

ڈی ای ایس
سی
>
اداکار
۔

پیدا کردہ آؤٹ پٹ ایک جیسا ہے۔

آئیے ٹیبل کی ساخت کا مزید قریب سے جائزہ لیں۔

اداکار کے جدول میں چار کالم شامل ہیں ، actor_id ، first_name ، last_name ، اور last_update۔

ہم کالموں کی اقسام کو بھی نکال سکتے ہیں: actor_id کے لئے ایک چھوٹا پن، first_name اور last_name کے لئے ورچر (45) اور last_update کے لئے ٹائم اسٹیمپ۔

کوئی بھی کالم نول (خالی) قدر کو قبول نہیں کرتا ہے ، actor_id بنیادی کلید (پی آر آئی) ہے ، اور last_name غیر منفرد انڈیکس (ایم یو ایل) کا پہلا کالم ہے۔

تفصیلات کے بارے میں فکر نہ کریں۔ اس وقت جو کچھ بھی اہم ہے وہ کالم کے نام ہیں جو ہم ایس کیو ایل کمانڈز کے لئے استعمال کریں گے۔

اگلا آئیے ڈی ای ایس سی کے بیان پر عمل درآمد کرکے شہر کی میز کی تلاش کرتے ہیں :

میسکل>
ڈی ای ایس سی
شہر
۔

+-------------+-------------------+------+-----+-------------------+...| میدان | قسم | صفر | کلید | پہلے سے طے شدہ |...+-------------+-------------------+------+-----+-------------------+...| city_id | دستخط نہ کرنے والا چھوٹا | نہیں | پی آر آئی | نول |.... | شہر | ورچر(50) | نہیں | | نول |.... | country_id | دستخط نہ کرنے والا چھوٹا | نہیں | ایم یو ایل | نول |...
| last_update | ٹائم اسٹیمپ | نہیں | | CURRENT_TIMESTAMP |...+-------------+-------------------+------+-----+-------------------+......+-----------------------------------------------+...| اضافی |...+-----------------------------------------------+... | auto_increment |.... |...| |...| اپ ڈیٹ CURRENT_TIMESTAMP پر DEFAULT_GENERATED |...+----------------------------------------------- +4 قطاریں سیٹ میں (0.01 سیکنڈ)

نوٹ

اضافی کالم میں آپ کو جو ڈیفالٹ _جنریٹڈ نظر آتا ہے وہ اس بات کی نشاندہی کرتا ہے کہ یہ خاص کالم پہلے سے طے شدہ قدر استعمال کرتا ہے۔

یہ معلومات MySQL 8.0 نوٹیشن خصوصیت ہے، اور یہ MySQL 5.7 یا ماریا ڈی بی 10.5 میں موجود نہیں ہے۔

ایک بار پھر، اہم بات یہ ہے کہ ہر جدول میں کالموں سے واقف ہونا، کیونکہ جب ہم سوالات پر تبادلہ خیال کریں گے تو ہم بعد میں ان کا کثرت سے استعمال کریں گے.

اگلا سیکشن آپ کو دکھاتا ہے کہ کس طرح اس ڈیٹا کو تلاش کریں جو مائی ایس کیو ایل سکیلا ڈیٹا بیس اور اس کے جدولوں میں اسٹور کرتا ہے۔

منتخب بیان اور بنیادی پوچھ گچھ کی تکنیک

پچھلے ابواب نے آپ کو دکھایا کہ کس طرح MySQL انسٹال اور تشکیل دینا ہے اور MySQL کمانڈ لائن کا استعمال کرنا ہے، اور ای آر ماڈل متعارف کرایا۔

اب آپ ایس کیو ایل زبان سیکھنا شروع کرنے کے لئے تیار ہیں جو تمام مائی ایس کیو ایل کلائنٹ ڈیٹا کو تلاش کرنے اور ہیرا پھیری کرنے کے لئے استعمال کرتے ہیں۔

یہ سیکشن سب سے زیادہ استعمال ہونے والے ایس کیو ایل مطلوبہ الفاظ کو متعارف کراتا ہے: منتخب مطلوبہ الفاظ۔

ہم اسٹائل اور نحو کے بنیادی عناصر اور ہیئر شق ، بولین آپریٹرز ، اور ترتیب کی خصوصیات کی وضاحت کرتے ہیں (اس میں سے زیادہ تر داخل ، اپ ڈیٹ ، اور حذف کے ہمارے بعد کے مباحثوں پر بھی لاگو ہوتا ہے)۔

یہ سلیکٹ کی ہماری بحث کا اختتام نہیں ہے؛ آپ کو باب 5 میں مزید ملیں گے، جہاں ہم آپ کو اس کی اعلی درجے کی خصوصیات کو استعمال کرنے کا طریقہ دکھاتے ہیں.

سنگل ٹیبل ایس ای ایل ای سی ٹی

سلیکٹ کی سب سے بنیادی شکل ایک جدول سے تمام قطاروں اور کالموں میں اعداد و شمار کو پڑھتی ہے۔

کمانڈ لائن کا استعمال کرتے ہوئے MySQL سے رابطہ کریں اور سکیلا ڈیٹا بیس کا انتخاب کریں:

میرا سوال>
ی ایس یو ایس
سکیلا
۔

ڈیٹا بیس تبدیل ہو گیا

آئیے زبان کے جدول میں تمام اعداد و شمار بازیافت کریں :

زبان
سے
>
سلیکٹ
*
؛

+-------------+----------+---------------------+| language_id | نام | last_update |+-------------+----------+---------------------+| 1 | انگریزی | 2006-02-15 05:02:19 || 2 | اطالوی | 2006-02-15 05:02:19 || 3 | جاپانی | 2006-02-15 05:02:19 || 4 | مینڈارن | 2006-02-15 05:02:19 || 5 | فرانسیسی | 2006-02-15 05:02:19 || 6 | جرمن | 2006-02-15 05:02:19 |+-------------+----------+---------------------+6 قطاریں سیٹ (0.00 سیکنڈ)

آؤٹ پٹ میں چھ قطاریں ہیں ، اور ہر قطار میں جدول میں موجود تمام کالموں کی قدریں شامل ہیں۔

اب ہم جانتے ہیں کہ چھ زبانیں ہیں، اور ہم زبانوں، ان کے شناخت کنندگان کو دیکھ سکتے ہیں، اور آخری بار ہر زبان کو اپ ڈیٹ کیا گیا تھا.

ایک سادہ سلیکٹ بیان کے چار اجزاء ہیں:

مطلوبہ الفاظ منتخب کریں۔

دکھائے جانے والے کالم۔

ستارے (*) علامت ایک وائلڈ کارڈ حروف ہے جس کا مطلب تمام کالم ہیں۔

مطلوبہ الفاظ سے.

جدول کا نام۔

لہذا اس مثال میں ، ہم نے زبان کی میز سے تمام کالم مانگے ہیں ، اور یہی وہ ہے جو مائی ایس کیو ایل نے ہمیں واپس کیا ہے۔

آئیے ایک اور آسان انتخاب کی کوشش کریں۔

اس بار، ہم شہر کی میز سے تمام کالم بازیافت کریں گے :

شہر
سے
>
سلیکٹ
*
۔

+---------+------------------------+------------+---------------------+| city_id | شہر | country_id | last_update |+---------+------------------------+------------+---------------------+| 1 | اے کوروا (لا کوریا) | 87 | 2006-02-15 04:45:25 || 2 | آبھا | 82 | 2006-02-15 04:45:25 |
| 3 | ابو ظہبی | 101 | 2006-02-15 04:45:25 || ...

|| 599 | چوشان | 23 | 2006-02-15 04:45:25 || 600 | Ziguinchor | 83 | 2006-02-15 04:45:25 |+---------+------------------------+------------+---------------------+600 قطاریں سیٹ میں (0.00 سیکنڈ)

600 شہر ہیں ، اور آؤٹ پٹ میں وہی بنیادی ڈھانچہ ہے جو ہماری پہلی مثال میں ہے۔

یہ مثال اس بارے میں کچھ بصیرت فراہم کرتی ہے کہ جدولوں کے درمیان تعلقات کیسے کام کرتے ہیں۔

نتائج کی پہلی قطار پر غور کریں.

country_id کالم میں ، آپ کو قیمت 87 نظر آئے گی۔

جیسا کہ آپ بعد میں دیکھیں گے ، ہم یہ معلوم کرنے کے لئے ملک کی ٹیبل چیک کرسکتے ہیں کہ کوڈ 87 والا ملک اسپین ہے۔

ہم اس بات پر تبادلہ خیال کریں گے کہ "دو جدولوں میں شامل ہونا" میں جدولوں کے مابین تعلقات پر سوالات کیسے لکھے جائیں۔

اگر آپ مکمل آؤٹ پٹ کو دیکھتے ہیں تو ، آپ یہ بھی دیکھیں گے کہ ایک ہی country_id کے ساتھ متعدد مختلف شہر ہیں۔

country_id اقدار کو دہرانا کوئی مسئلہ نہیں ہے کیونکہ ہم توقع کرتے ہیں کہ ایک ملک میں بہت سے شہر ہوں گے (ایک سے بہت سے تعلقات)۔

اب آپ کو ڈیٹا بیس کا انتخاب کرنے ، اس کے جدولوں کو درج کرنے ، اور سلیکٹ بیان کا استعمال کرتے ہوئے ٹیبل سے تمام ڈیٹا بازیافت کرنے میں آرام محسوس کرنا چاہئے ۔

مشق کرنے کے لئے ، آپ سکیلا ڈیٹا بیس میں دیگر جدولوں کے ساتھ تجربہ کرنا چاہتے ہیں ۔

یاد رکھیں کہ آپ ٹیبل کے ناموں کو تلاش کرنے کے لئے شو ٹیبلز بیان استعمال کرسکتے ہیں۔

کالم وں کا انتخاب کریں

اس سے پہلے ، ہم نے ٹیبل میں تمام کالموں کو بازیافت کرنے کے لئے * وائلڈ کارڈ کردار کا استعمال کیا۔

اگر آپ تمام کالموں کو ظاہر نہیں کرنا چاہتے ہیں تو ، اپنے مطلوبہ کالموں کو درج کرکے ، جس ترتیب سے آپ چاہتے ہیں ، کوما سے الگ کرکے زیادہ مخصوص ہونا آسان ہے۔

مثال کے طور پر ، اگر آپ شہر کی میز سے صرف شہر کا کالم چاہتے ہیں تو ، آپ ٹائپ کریں گے:

>
شہر
سے
منتخب
شہر
۔

+--------------------+| شہر |+--------------------+| اے کوروا (لا کوریا) || آبھا || ابوظہبی || اکوا || اڈانا |+--------------------+
5 قطاریں سیٹ میں (0.00 سیکنڈ)

اگر آپ شہر اور city_id کالم دونوں چاہتے ہیں تو ، اس ترتیب میں ، آپ استعمال کریں گے:

>
شہر
،
شہر
سے
city_id
۔

+--------------------+---------+| شہر | city_id |+--------------------+---------+| اے کوروا (لا کوریا) | 1 || آبھا | 2 || ابو ظہبی | 3 || Acua | 4 || اڈانا | 5 |
سیٹ میں +-------------------- +--------- +5 قطاریں (0.01 سیکنڈ)

آپ کالموں کو ایک سے زیادہ بار بھی درج کرسکتے ہیں:

>
سلیکٹ
شہر
،
شہر
سے
شہر
۔

+--------------------+--------------------+| شہر |+--------------------+--------------------+| اے کوروا (لا کوریا) | اے کوروا (لا کوریا) || آبھا | آبھا || ابو ظہبی | ابوظہبی || Acua | اکوا || اڈانا | اڈانا |
سیٹ میں +-------------------- +-------------------- +5 قطاریں (0.00 سیکنڈ)

اگرچہ یہ بے معنی لگ سکتا ہے ، لیکن یہ مفید ہوسکتا ہے جب زیادہ جدید سوالات میں عرفات کے ساتھ ملایا جائے ، جیسا کہ آپ باب 5 میں دیکھیں گے۔

آپ سلیکٹ بیان میں ڈیٹا بیس ، ٹیبل ، اور کالم کے ناموں کی وضاحت کرسکتے ہیں۔

یہ آپ کو یو ایس ای کمانڈ سے بچنے اور سلیکٹ کے ساتھ براہ راست کسی بھی ڈیٹا بیس اور ٹیبل کے ساتھ کام کرنے کی اجازت دیتا ہے؛ یہ ابہام کو حل کرنے میں بھی مدد کرتا ہے، جیسا کہ ہم "جوائننگ ٹو ٹیبلز" میں دکھائیں گے۔

مثال کے طور پر ، فرض کریں کہ آپ سکیلا ڈیٹا بیس میں زبان کے جدول سے نام کا کالم بازیافت کرنا چاہتے ہیں۔

آپ مندرجہ ذیل کمانڈ کے ساتھ ایسا کرسکتے ہیں:

ssql
>
Clect
نام
sçla
سے
.
زبان
۔

+----------+| نام |+----------+| انگریزی || اطالوی || جاپانی || مینڈارن || فرانسیسی || سیٹ میں جرمن |+----------+6 قطاریں (0.01 سیکنڈ)

مطلوبہ الفاظ سے سکیلا ڈاٹ لینگویج کا جزو سکیلا ڈیٹا بیس اور اس کی زبان کے جدول کی وضاحت کرتا ہے ۔

یو ایس ایس سکیلا میں داخل ہونے کی کوئی ضرورت نہیں ہے۔ اس سوال کو چلانے سے پہلے.

اس نحو کو دوسرے ایس کیو ایل بیانات کے ساتھ بھی استعمال کیا جاسکتا ہے ، بشمول اپ ڈیٹ ، حذف ، داخل ، اور اس باب میں بعد میں بیان کرنے والے بیانات دکھائیں۔

جہاں شق کے ساتھ قطاروں کا انتخاب

یہ سیکشن ڈبلیو اے آر شق کا تعارف کراتا ہے اور وضاحت کرتا ہے کہ اظہار لکھنے کے لئے آپریٹرز کو کس طرح استعمال کرنا ہے۔

آپ ان کو منتخب بیانات اور دیگر بیانات جیسے اپ ڈیٹ اور حذف میں دیکھیں گے؛ ہم آپ کو اس باب میں بعد میں مثالیں دکھائیں گے۔

جہاں بنیادی باتیں

جہاں شق ایک طاقتور ٹول ہے جو آپ کو فلٹر کرنے کی اجازت دیتا ہے کہ سلیکٹ بیان سے کون سی قطاریں واپس کی گئی ہیں ۔

آپ اسے ان قطاروں کو واپس کرنے کے لئے استعمال کرتے ہیں جو کسی شرط سے میل کھاتی ہیں ، جیسے کالم کی قدر جو بالکل تار سے میل کھاتی ہے ، ایک قدر سے زیادہ یا کم نمبر ، یا ایک تار جو کسی دوسرے کا سرفیکس ہے۔

اس اور اس کے بعد کے ابواب میں ہماری تقریبا تمام مثالوں میں جہاں کی شقیں ہیں ، اور آپ ان سے بہت واقف ہوجائیں گے۔

سب سے آسان شق وہ ہے جو بالکل ایک قدر سے میل کھاتی ہے۔

ایک مثال پر غور کریں جہاں آپ زبان کے جدول میں انگریزی زبان کی تفصیلات معلوم کرنا چاہتے ہیں ۔

یہاں آپ کیا ٹائپ کریں گے:

mysql
>
SELECT
*
from
sakila
.
زبان
جہاں
نام
=
'انگریزی'
؛

+-------------+---------+---------------------+| language_id | نام | last_update |+-------------+---------+---------------------+| 1 | انگریزی | 2006-02-15 05:02:19 |+-------------+---------+---------------------+1 قطار سیٹ (0.00 سیکنڈ)

MySQL ان تمام قطاروں کو واپس کرتا ہے جو آپ کی تلاش کے معیار سے مطابقت رکھتی ہیں - اس معاملے میں ، صرف ایک قطار اور اس کے تمام کالم۔

آئیے ایک اور عین مطابق مثال کی کوشش کرتے ہیں۔

فرض کریں کہ آپ اداکار کی میز میں 4 کی actor_id قدر کے ساتھ اداکار کا پہلا نام تلاش کرنا چاہتے ہیں۔

آپ ٹائپ کریں گے:

>
ایس ایل ای سی ٹی
اداکار
سے first_name
جہاں
actor_id
=
4
۔

+------------+| first_name |+------------+| سیٹ میں جینیفر |+------------+1 قطار (0.00 سیکنڈ)

یہاں آپ ایک کالم اور ایک قطار فراہم کرتے ہیں ، بشمول منتخب مطلوبہ الفاظ کے بعد first_name کالم اور کہاں actor_id = 4 کی وضاحت کرنا۔

اگر ایک قیمت ایک سے زیادہ قطاروں سے میل کھاتی ہے تو ، نتائج میں تمام میچ شامل ہوں گے۔

فرض کریں کہ آپ برازیل سے تعلق رکھنے والے تمام شہروں کو دیکھنا چاہتے ہیں ، جس کی country_id 15 ہے۔

آپ ٹائپ کریں گے:

شہر سے
>
منتخب
شہر
جہاں
country_id
=
15
۔

+----------------------+| شہر |+----------------------+| الوراڈا || انگرا ڈوس ریس || انپولس || Aparecida de Goinia |
| آراتوبا || بیگ || بیلم || بلومینو || بوآ وسٹا || برازیلیا | || ...

سیٹ میں |+----------------------+28 قطاریں (0.00 سیکنڈ)

نتائج میں ان 28 شہروں کے نام دکھائے گئے ہیں جن کا تعلق برازیل سے ہے۔

اگر ہم شہر کی میز سے حاصل ہونے والی معلومات کو ملک کی میز سے حاصل ہونے والی معلومات کے ساتھ جوڑ سکتے ہیں تو ، ہم شہروں کے نام ان کے متعلقہ ممالک کے ساتھ ظاہر کرسکتے ہیں۔

ہم دیکھیں گے کہ "جوائننگ ٹو ٹیبلز" میں اس قسم کے سوالات کو کیسے انجام دیا جائے۔

اب آئیے ان اقدار کو بازیافت کرتے ہیں جو ایک حد سے تعلق رکھتی ہیں۔

عددی رینج کے لئے متعدد اقدار کو بازیافت کرنا آسان ہے ، لہذا آئیے 5 سے کم city_id والے تمام شہروں کے نام تلاش کرکے شروع کرتے ہیں ۔

ایسا کرنے کے لئے، مندرجہ ذیل بیان پر عمل کریں:

>
شہر
سے
منتخب
شہر
جہاں
city_id<
5
۔

+--------------------+| شہر |
+--------------------+| اے کوروا (لا کوریا) || آبھا || ابوظہبی || سیٹ میں ایکوا |+--------------------+4 قطاریں (0.00 سیکنڈ)

نمبروں کے لئے ، اکثر استعمال ہونے والے آپریٹرز برابر (=)، (> سے زیادہ)، (< سے کم)، کم یا مساوی (<=)، زیادہ یا مساوی (>=)، اور برابر (<> یا !=) نہیں ہیں۔

ایک اور مثال پر غور کریں.

اگر آپ ان تمام زبانوں کو تلاش کرنا چاہتے ہیں جن میں 2 کا language_id نہیں ہے تو ، آپ ٹائپ کریں گے:

ssql
>
Slect
language_id
,
نام
ساکیلا
سے
.
زبان
>
language_id
<>
2
۔

+-------------+----------+| language_id | نام |+-------------+----------+| 1 | انگریزی || 3 | جاپانی || 4 | مینڈارن || 5 | فرانسیسی || 6 | سیٹ میں جرمن |+-------------+----------+
5 قطاریں (0.00 سیکنڈ)

پچھلا آؤٹ پٹ جدول میں پہلی ، تیسری اور بعد کی تمام زبانوں کو ظاہر کرتا ہے۔

نوٹ کریں کہ آپ غیر مساوی حالت کے لئے <> یا != آپریٹر استعمال کرسکتے ہیں۔

آپ تاروں کے لئے ایک ہی آپریٹر استعمال کرسکتے ہیں۔

پہلے سے طے شدہ طور پر ، سٹرنگ موازنہ کیس حساس نہیں ہے اور موجودہ حروف سیٹ کا استعمال کرتا ہے۔

مثال کے طور پر:

اداکار
سے
>
first_name
جہاں
first_name
<
'بی'
۔

+------------+| first_name |+------------+| اے ایل ای سی || آڈری || اینی || انجیلا || آدم || انجلینا || البرٹ || آدم || انجیلا || البرٹ || آل || ایلن || سیٹ میں AUDre |+------------+13 قطاریں (0.00 سیکنڈ)

"کیس حساس نہیں" سے ہمارا مطلب ہے کہ بی اور بی کو ایک ہی فلٹر سمجھا جائے گا ، لہذا یہ سوال ایک ہی نتیجہ فراہم کرے گا:

اداکار
سے first_name
>
first_name
<
بی'
۔

+------------+| first_name |+------------+| اے ایل ای سی || اے یو ڈی آر ای |
| اینی || انجیلا || آدم || انجلینا || البرٹ || آدم || انجیلا || البرٹ || آل || ایلن || سیٹ میں AUDREY |+------------+13 قطاریں (0.00 سیکنڈ)

تاروں کے ساتھ انجام دینے کا ایک اور عام کام ایسے میچوں کو تلاش کرنا ہے جو پہلے سے شروع ہوتے ہیں ، ایک تار پر مشتمل ہوتے ہیں ، یا لاحقہ میں ختم ہوتے ہیں۔

مثال کے طور پر ، ہم لفظ "ریٹرو" سے شروع ہونے والے تمام البم کے نام تلاش کرنا چاہتے ہیں۔ ہم یہ لائک آپریٹر کے ساتھ ایک ایسی شق میں کر سکتے ہیں۔

آئیے ایک مثال دیکھیں جہاں ہم ایک ایسی فلم کی تلاش کر رہے ہیں جس کا عنوان ہے جس میں لفظ خاندان شامل ہے:

>فلم
سے
منتخب
عنوان
جہاں
عنوان
'٪فیملی٪' کی
طرح
ہے۔

+----------------+| عنوان |+----------------+| سمندری طوفان کا خاندان || ڈوگما فیملی || سیٹ میں فیملی سویٹ |+---------------- +3 قطاریں (0.00 سیکنڈ)

آئیے ایک نظر ڈالتے ہیں کہ یہ کیسے کام کرتا ہے.

لائیک شق تاروں کے ساتھ استعمال کی جاتی ہے اور اس کا مطلب یہ ہے کہ ایک میچ کو مندرجہ ذیل تار میں پیٹرن پر پورا اترنا ہوگا۔

ہماری مثال میں ، ہم نے لائک '٪فیملی٪' کا استعمال کیا ہے ، جس کا مطلب ہے کہ تار میں خاندان ہونا ضروری ہے ، اور اس سے پہلے یا اس کے بعد صفر یا زیادہ حروف ہوسکتے ہیں۔

لائیک کے ساتھ استعمال ہونے والی زیادہ تر تاروں میں وائلڈ کارڈ کردار کے طور پر فیصد کردار (٪) ہوتا ہے جو تمام ممکنہ تاروں سے میل کھاتا ہے۔

آپ اسے ایک ایسی تار کی وضاحت کرنے کے لئے استعمال کرسکتے ہیں جو لاحقے میں ختم ہوتی ہے - جیسے "٪ing"- یا ایک تار جو کسی خاص ذیلی تار سے شروع ہوتی ہے ، جیسے "کرپشن٪"۔

مثال کے طور پر ، "جان ٪" جان اسمتھ اور جان پال گیٹی جیسے جان سے شروع ہونے والے تمام تاروں سے میل کھائے گا۔

پیٹرن "٪پال" ان تمام تاروں سے میل کھاتا ہے جن کے آخر میں پال ہے۔

آخر میں ، پیٹرن "٪پال٪" ان تمام تاروں سے میل کھاتا ہے جن میں پولس ہے ، بشمول شروع میں یا آخر میں۔

اگر آپ لائیک شق میں بالکل ایک وائلڈ کارڈ کردار کا مقابلہ کرنا چاہتے ہیں تو ، آپ نمایاں کردار (_) کا استعمال کرتے ہیں۔

مثال کے طور پر ، اگر آپ ایک اداکار کی اداکاری والی تمام فلموں کے عنوانات چاہتے ہیں جس کا نام تین حروف این اے ٹی سے شروع ہوتا ہے تو ، آپ استعمال کرتے ہیں:

film_list
سے
منتخب
> عنوان
جہاں
اداکار
'NAT_٪'
کو پسند کرتے
ہیں
۔

+----------------------+| عنوان |+----------------------+| فینٹسی ٹروپرز || بیوقوف مذاق اڑانے والے پرندے || ہولز برنیگن || کووائی ہوم وارڈ || لائسنس ویک اینڈ || نیٹ ورک کی چوٹی || این یو ٹی ایس ٹائیز || مسخ شدہ قزاق || ناقابل معافی زولینڈر |+----------------------+9 قطاریں سیٹ میں (0.04 سیکنڈ)

اشارہ کرنا

عام طور پر ، آپ کو پیٹرن کے آغاز میں فیصد (٪) وائلڈ کارڈ استعمال کرنے سے گریز کرنا چاہئے ، جیسے مندرجہ ذیل مثال میں:

فلم سے
منتخب
عنوان
>
جہاں
عنوان
'٪دن٪' کی
طرح
ہے۔

آپ کو نتائج مل یں گے ، لیکن MySQL اس حالت کے تحت انڈیکس استعمال نہیں کرے گا۔

وائلڈ کارڈ کا استعمال مائی ایس کیو ایل کو نتائج کو بازیافت کرنے کے لئے پوری ٹیبل کو پڑھنے پر مجبور کرے گا ، جو اگر ٹیبل میں لاکھوں قطاریں ہوں تو کارکردگی پر شدید اثر پڑ سکتا ہے۔

شرائط کو اور، یا، نہیں، اور ایکس او آر کے ساتھ جوڑنا

اب تک، ہم نے ایک شرط کو جانچنے کے لئے کہاں کی شق کا استعمال کیا ہے، اس پر پورا اترنے والی تمام قطاروں کو واپس کر دیا ہے.

آپ بولین آپریٹرز اور ، یا ، نہیں ، اور ایکس او آر کا استعمال کرتے ہوئے دو یا زیادہ شرائط کو یکجا کرسکتے ہیں۔

چلو ایک مثال سے شروع کرتے ہیں.

فرض کریں کہ آپ سائنس فکشن فلموں کے عنوانات تلاش کرنا چاہتے ہیں جنہیں پی جی درجہ دیا گیا ہے۔

یہ اے این ڈی آپریٹر کے ساتھ سیدھا ہے:

film_list
سے
> منتخب
عنوان
جہاں
زمرہ
'سائنس فائی'
> اور
درجہ بندی
'پی جی'
کی طرح
ہے۔

+----------------------+| عنوان |+----------------------+| چینسو اپ ٹاؤن || چارڈ ڈفل || فریسکو فارریسٹ || گڈفیلس سلام || گرافیٹی محبت || جامنی رنگ کا سوگ || اوپن افریقی || سلوراڈو گولڈ فنگر || ٹائٹنز جرک || ٹروجن کل || ناقابل معافی زولینڈر || ونڈر لینڈ کرسمس |+----------------------+12 قطاریں سیٹ میں (0.07 سیکنڈ)

ڈبلیو اے آر شق میں اینڈ آپریشن نتائج کو ان قطاروں تک محدود کرتا ہے جو دونوں شرائط پر پورا اترتے ہیں۔

او آر آپریٹر کا استعمال قطاروں کو تلاش کرنے کے لئے کیا جاتا ہے جو متعدد شرائط میں سے کم از کم ایک پر پورا اترتے ہیں۔

مثال کے طور پر ، اب تصور کریں کہ آپ بچوں یا خاندانی زمروں میں فلموں کی ایک فہرست چاہتے ہیں۔

آپ یہ او آر اور دو لائیک شقوں کے ساتھ کر سکتے ہیں:

film_list
سے
منتخب
عنوان
>
جہاں
زمرہ
'بچوں'
کی طرح
>
یا
زمرہ '
خاندان'
کی طرح
ہے۔

+------------------------+| عنوان |+------------------------+| افریقی انڈے || اپاچی الٰہی || اٹلانٹس کی وجہ |... غلط طرز عمل || زولینڈر فکشن |+------------------------+129 قطاریں سیٹ میں (0.04 سیکنڈ)

ڈبلیو ایچ آر شق میں او آر آپریشن ان لوگوں کے جوابات کو محدود کرتا ہے جو دونوں شرائط میں سے کسی ایک پر پورا اترتے ہیں۔

ایک طرف، ہم دیکھ سکتے ہیں کہ نتائج کا حکم دیا گیا ہے.

یہ محض ایک اتفاق ہے۔ اس معاملے میں ، انہیں اس ترتیب میں رپورٹ کیا جاتا ہے جس میں انہیں ڈیٹا بیس میں شامل کیا گیا تھا۔

ہم "شق کے مطابق آرڈر" میں آؤٹ پٹ کو ترتیب دینے پر واپس آئیں گے۔

آپ اور اور یا کو یکجا کرسکتے ہیں ، لیکن آپ کو یہ واضح کرنے کی ضرورت ہے کہ آیا آپ پہلے اور شرائط یا ان کو جوڑنا چاہتے ہیں یا نہیں۔

بیان کے کلسٹر حصوں کو ایک ساتھ کور کرتے ہیں اور تاثرات کو پڑھنے کے قابل بنانے میں مدد کرتے ہیں۔ آپ انہیں اسی طرح استعمال کرسکتے ہیں جیسے آپ بنیادی ریاضی میں کرتے ہیں۔

فرض کریں کہ اب آپ سائنس فکشن یا خاندانی فلمیں چاہتے ہیں جو پی جی درجہ بندی کی جاتی ہیں.

آپ اس سوال کو مندرجہ ذیل کے طور پر لکھ سکتے ہیں:

film_list
سے
منتخب
عنوان
> (
کیٹیگری
جیسے
'سائنس فائی'
یا
کیٹیگری
> جیسے
'فیملی'
)
اور '
پی جی'
جیسی
درجہ بندی
؛

+------------------------+| عنوان |+------------------------+| بے خواب شادی شدہ || چینسو اپ ٹاؤن || چارڈ ڈفل || پیچھا کرنے کی لڑائی || اثر گلیڈی ایٹر |... | ناقابل معافی زولینڈر || ونڈر لینڈ کرسمس |+------------------------+30 قطاریں سیٹ میں (0.07 سیکنڈ)

کوہن تشخیص کے آرڈر کو واضح کرتے ہیں: آپ سائنس فائی یا فیملی کیٹیگری سے فلمیں چاہتے ہیں ، لیکن ان سب کو پی جی ریٹڈ ہونے کی ضرورت ہے۔

کوہن کے استعمال کے ساتھ ، تشخیص کے آرڈر کو تبدیل کرنا ممکن ہے۔

یہ دیکھنے کا سب سے آسان طریقہ یہ ہے کہ یہ کس طرح کام کرتا ہے حساب کتاب کے ساتھ کھیلنا:

>
ایس ای ایل ٹی
(
2
+
2
)
*
3
۔

+---------+| (2+2)*3 |+---------+| سیٹ میں 12 |+---------+1 قطار (0.00 سیکنڈ)

>
ایس ایل ای سی ٹی
2
+
2
*
3
۔

+-------+| 2+2*3 |+-------+| سیٹ میں 8 |+-------+1 قطار (0.00 سیکنڈ)

نوٹ

تشخیص کرنے کے لئے سب سے مشکل مسائل میں سے ایک ایک سوال ہے جو نحو کی غلطیوں کے بغیر چل رہا ہے ، لیکن یہ توقع سے مختلف اقدار واپس کر رہا ہے۔

اگرچہ کوہن اے این ڈی آپریٹر کو متاثر نہیں کرتے ہیں ، لیکن او آر آپریٹر ان سے نمایاں طور پر متاثر ہوتا ہے۔

مثال کے طور پر، اس بیان کے نتائج پر غور کریں:

mysql
>
SELECT
*
from
sakila
.
وہ شہر
جہاں
city_id
=
3
->
یا
city_id
=
4
اور
country_id
=
60
۔

+---------+-----------+------------+---------------------+| city_id | شہر | country_id | last_update |+---------+-----------+------------+---------------------+| 3 | ابو ظہبی | 101 | 2006-02-15 04:45:25 || 4 | Acua | 60 | 2006-02-15 04:45:25 |+---------+-----------+------------+---------------------+2 قطاریں سیٹ (0.00 سیکنڈ)

اگر ہم آپریٹرز کے آرڈر کو تبدیل کرتے ہیں تو، ہم ایک مختلف نتیجہ حاصل کریں گے:

mysql
>
SELECT
*
from
sakila
.
وہ شہر
جہاں
country_id
=
60
->
اور
city_id
=
3
یا
city_id
=
4
۔

+---------+------+------------+---------------------+| city_id | شہر | country_id | last_update |+---------+------+------------+---------------------+| 4 | Acua | 60 | 2006-02-15 04:45:25 |+---------+------+------------+---------------------+1 قطار سیٹ (0.00 سیکنڈ)

کوہن کا استعمال سوالات کو سمجھنے میں بہت آسان بنادیتا ہے اور اس امکان کو بڑھاتا ہے کہ آپ کو وہ نتائج ملیں گے جن کی آپ توقع کر رہے ہیں۔

ہم سفارش کرتے ہیں کہ جب بھی کوئی موقع ہو کہ MySQL آپ کے ارادے کی غلط تشریح کر سکتا ہے تو آپ کوہن کا استعمال کریں۔ MySQL کے پوشیدہ تشخیص ی آرڈر پر بھروسہ کرنے کی کوئی اچھی وجہ نہیں ہے۔

انری این او ٹی آپریٹر بولین بیان کی نفی کرتا ہے۔

اس سے پہلے ہم نے تمام زبانوں کو 2 کے برابر نہ ہونے والی language_id کی فہرست دینے کی مثال دی تھی۔

آپ یہ سوال این او ٹی آپریٹر کے ساتھ بھی لکھ سکتے ہیں:

ssql
>
Slect
language_id
,
نام
ساکیلا
سے
.
زبان
>
جہاں
نہیں
(
language_id
=
2
)؛

+-------------+----------+| language_id | نام |+-------------+----------+| 1 | انگریزی || 3 | جاپانی || 4 | مینڈارن || 5 | فرانسیسی || 6 | سیٹ میں جرمن |+-------------+----------+
5 قطاریں (0.01 سیکنڈ)

کوہن میں اظہار ، (language_id = 2)، شرط کو میچ کرنے کے لئے دیتا ہے، اور این او ٹی آپریشن اس کی نفی کرتا ہے، لہذا آپ کو ان نتائج کے علاوہ سب کچھ مل جاتا ہے جو حالت سے مطابقت رکھتے ہیں.

اس کے علاوہ بھی کئی طریقے ہیں جن سے آپ اسی خیال کے ساتھ کہاں کی شق لکھ سکتے ہیں۔

باب 5 میں ، آپ دیکھیں گے کہ کچھ دوسروں کے مقابلے میں بہتر کارکردگی رکھتے ہیں۔

نوٹ اور کوہن کا استعمال کرتے ہوئے ایک اور مثال پر غور کریں۔

فرض کریں کہ آپ 7 سے کم ایف آئی ڈی کے ساتھ تمام فلموں کے عنوانات کی فہرست حاصل کرنا چاہتے ہیں ، لیکن ان کی تعداد 4 یا 6 نہیں ہے۔

آپ مندرجہ ذیل سوال کے ساتھ ایسا کر سکتے ہیں:

>
ایس ایل ای سی ٹی
ایف آئی ڈی
،
film_list
سے
عنوان
جہاں
ایف آئی ڈی
<
7
اور
نہیں
(
ایف آئی ڈی
=
4
یا
ایف آئی ڈی
=
6
)؛

+------+------------------+| فیڈ | عنوان |+------+------------------+| 1 | اکیڈمی ڈائناسور || 2 | اے سی ای گولڈ فنگر || 3 | موافقت کے سوراخ || 5 | افریقی انڈے |+------+------------------+4 قطاریں سیٹ میں (0.06 سیکنڈ)

آپریٹر کی ترجیحات کو سمجھنا تھوڑا مشکل ہوسکتا ہے ، اور بعض اوقات ڈی بی اے کو کسی سوال کو ڈی بگ کرنے اور اس بات کی نشاندہی کرنے میں کافی وقت لگتا ہے کہ یہ درخواست کردہ اقدار کو واپس کیوں نہیں کررہا ہے۔

مندرجہ ذیل فہرست دستیاب آپریٹرز کو سب سے زیادہ ترجیح سے لے کر سب سے کم درجے تک دکھاتی ہے۔

آپریٹرز جو ایک لائن پر ایک ساتھ دکھائے جاتے ہیں ان کی ایک ہی ترجیح ہوتی ہے:

فاصلہ

بائنری، کولیٹ

!

- (غیر معمولی مائنس)، ~ (غیر رسمی بٹ انورژن)

^

*, /, DIV, ٪, MO

-,+

<<، >>

&

\|

= (موازنہ)، < =>، >=، >، <=، <، <>، !=، آئی ایس، لائک، ریگسپ، آئی این، ممبر آف

درمیان، کیس، کب، پھر، اور

نہیں

اور، &&

XOR

یا، \|\\

= (تفویض)، :=

مطلوبہ نتائج حاصل کرنے کے لئے ان آپریٹرز کو مختلف طریقوں سے جوڑنا ممکن ہے۔

مثال کے طور پر ، آپ کسی بھی فلم کے عنوانات حاصل کرنے کے لئے ایک سوال لکھ سکتے ہیں جس کی قیمت $ 2 اور $ 4 کے درمیان ہے ، دستاویزی یا ہارر زمرے سے تعلق رکھتے ہیں ، اور باب نام کا ایک اداکار ہے:

film_list
>
>
جہاں
قیمت 2 سے
4
>
کے
درمیان
ہوتی ہے
اور
(
کیٹیگری
'
ڈاکیومینٹری'
یا کیٹیگری
جیسے
'ہارر'
)
سے
>
>
اور
اداکار
'
٪Bob٪ ''
۔

+------------------+| عنوان |+------------------+| سیٹ میں ایڈپٹیشن ہولز |+------------------ +1 قطار (0.08 سیکنڈ)

آخر میں ، اس سے پہلے کہ ہم چھانٹی کی طرف بڑھیں ، نوٹ کریں کہ ایسے سوالات کو انجام دینا ممکن ہے جو کسی بھی نتائج سے میل نہیں کھاتے ہیں۔

اس صورت میں ، سوال ایک خالی سیٹ واپس کرے گا:

film_list >> سے
منتخب
عنوان
جہاں
قیمت
2
سے
4
->
کے درمیان
ہے اور
(
زمرے
'دستاویزی فلم' یا کیٹیگری
جیسے
'ہارر'
)
- >
اور
اداکار
جیسے
'٪گریپپا٪'
؛

خالی سیٹ (0.04 سیکنڈ)

شق کے مطابق حکم

ہم نے اس بات پر تبادلہ خیال کیا ہے کہ کالموں کا انتخاب کیسے کیا جائے اور سوال کے نتیجے کے حصے کے طور پر کون سی قطاریں واپس کی جائیں ، لیکن یہ کنٹرول نہیں کیا جائے کہ نتیجہ کس طرح ظاہر ہوتا ہے۔

رشتہ دار ڈیٹا بیس میں ، ٹیبل میں قطاریں ایک سیٹ تشکیل دیتی ہیں۔ قطاروں کے درمیان کوئی داخلی ترتیب نہیں ہے ، لہذا ہمیں MySQL سے نتائج کو ترتیب دینے کے لئے کہنا ہوگا اگر ہم انہیں کسی خاص ترتیب میں چاہتے ہیں۔

یہ سیکشن وضاحت کرتا ہے کہ ایسا کرنے کے لئے آرڈر بائی شق کو کس طرح استعمال کیا جائے۔

چھانٹی اس بات پر اثر انداز نہیں ہوتی ہے کہ کیا واپس کیا جاتا ہے؛ یہ صرف اس بات پر اثر انداز ہوتا ہے کہ نتائج کس ترتیب میں واپس کیے جاتے ہیں۔

اشارہ کرنا

MySQL میں انو ڈی بی ٹیبلز میں ایک خاص انڈیکس ہوتا ہے جسے کلسٹر انڈیکس کہا جاتا ہے جو قطار کے اعداد و شمار کو اسٹور کرتا ہے۔

جب آپ ٹیبل پر بنیادی کلید کی وضاحت کرتے ہیں تو ، انو ڈی بی اسے کلسٹر انڈیکس کے طور پر استعمال کرتا ہے۔

فرض کریں کہ آپ بنیادی کلید کی بنیاد پر سوالات پر عملدرآمد کر رہے ہیں۔

اس صورت میں ، قطاروں کو بنیادی کلید کے ذریعہ چڑھتے ہوئے ترتیب میں واپس کردیا جائے گا۔

تاہم ، اگر آپ کسی خاص حکم کو نافذ کرنا چاہتے ہیں تو ہم ہمیشہ آرڈر بائی شق استعمال کرنے کی سفارش کرتے ہیں۔

فرض کریں کہ آپ سکیلا ڈیٹا بیس میں پہلے 10 گاہکوں کی ایک فہرست واپس کرنا چاہتے ہیں ، جسے نام کے لحاظ سے حروف تہجی کے مطابق ترتیب دیا گیا ہے۔

یہاں آپ کیا ٹائپ کریں گے:

customer_list
>
آرڈر
سے
>
ایل
آئی ایم ٹی
10
>
نام
۔

+-------------------+| نام |+-------------------+| ہارون سیلبی || ایڈم گوچ || ایڈرین کلیری || ایگنس بشپ || ایلن کاہن || البرٹ کروس || البرٹو ہیننگ || الیکس گریشم || الیگزینڈر فینل || الفریڈ کاسیلاس |+-------------------+10 قطاریں سیٹ میں (0.01 سیکنڈ)

آرڈر بائی شق اس بات کی نشاندہی کرتی ہے کہ چھانٹی کی ضرورت ہے ، اس کے بعد کالم ہے جسے ترتیب کی کلید کے طور پر استعمال کیا جانا چاہئے۔

اس مثال میں ، آپ حروف تہجی کے لحاظ سے چڑھتے ہوئے ترتیب میں نام کے لحاظ سے درجہ بندی کر رہے ہیں - پہلے سے طے شدہ قسم کیس غیر حساس اور بڑھتی ہوئی ترتیب میں ہے ، اور مائی ایس کیو ایل خود بخود حروف تہجی کے مطابق ترتیب دیتا ہے کیونکہ کالم حروف کی تاریں ہیں۔

تاروں کو ترتیب دینے کا طریقہ اس کردار کے سیٹ اور کولیشن آرڈر سے طے ہوتا ہے جو استعمال کیا جارہا ہے۔

ہم ان پر "کولیشن اور کریکٹر سیٹس" میں تبادلہ خیال کرتے ہیں۔

اس کتاب کے زیادہ تر حصے کے لئے، ہم فرض کرتے ہیں کہ آپ پہلے سے طے شدہ ترتیبات استعمال کر رہے ہیں.

آئیے ایک اور مثال دیکھتے ہیں۔

اس بار ، آپ last_update کالم کی بنیاد پر ایڈریس ٹیبل سے آؤٹ پٹ کو بڑھتے ہوئے ترتیب میں ترتیب دیں گے اور صرف پہلے پانچ نتائج دکھائیں گے:

>
ایل ای سی ایل ٹی
ایڈریس
،
حد
5
کے
ذریعہ
ایڈریس
>
آرڈر
سے
last_update last_update
۔

+-----------------------------+---------------------+| ایڈریس | last_update |
+-----------------------------+---------------------+| 1168 نجف آباد پارک وے | 2014-09-25 22:29:59 || 1031 ڈوگا ویپلز پارک وے | 2014-09-25 22:29:59 || 1924 شیمونوسکی ڈرائیو | 2014-09-25 22:29:59 || 757 رسٹن برگ ایونیو | 2014-09-25---------------------- -----------------------------22:30:01 ||

جیسا کہ آپ دیکھ سکتے ہیں، مختلف قسم کے کالموں کو ترتیب دینا ممکن ہے.

اس کے علاوہ، ہم دو یا زیادہ کالموں کے ساتھ چھانٹی کو کمپاؤنڈ کرسکتے ہیں.

مثال کے طور پر ، فرض کریں کہ آپ پتوں کو حروف تہجی کے مطابق ترتیب دینا چاہتے ہیں ، لیکن ضلع کے لحاظ سے گروپ کیا گیا ہے:

>
سلیکٹ
ایڈریس،
ضلع
سے
پتہ
>
ترتیب
بلحاظ
ضلع
، پتہ
؛

+----------------------------------------+----------------------+| پتہ | ضلع |+----------------------------------------+----------------------+| 1368 ماراکابو بلیوارڈ | || 18 ڈوئسبرگ بلیوارڈ | || 962 ٹاما لوپ | || 535 احمد نگر منور | ابوظہبی || 669 فیروز آباد لوپ | ابو ظہبی |
- 1078 اسٹارا زگورہ ڈرائیو | آچے || 663 بہاء بلانکا پارک وے | اڈانا || 842 سالزبرگ لین | اڈانا || 614 پاک کریٹ اسٹریٹ | ادیس ابیبہ || 751 لیما لوپ | عدن || 1157 نیری لوپ | ایڈیجیا || 387 میگاواٹ-ڈیٹو ڈرائیو | آہل || 775 ostka Drive | الدقالیہ || ...

|| - 1416 سان خوان بوٹسٹا ٹکسٹیپیک ایونیو | ظفر || 138 کراکس بلیوارڈ | زولیا |+----------------------------------------+----------------------+603 قطاریں سیٹ میں (0.00 سیکنڈ)

آپ اترتے ہوئے ترتیب میں بھی ترتیب دے سکتے ہیں ، اور آپ ہر قسم کی کلید کے لئے اس طرز عمل کو کنٹرول کرسکتے ہیں۔

فرض کریں کہ آپ حروف تہجی کی ترتیب سے پتوں کو ترتیب دینا چاہتے ہیں اور اضلاع کو چڑھتے ہوئے ترتیب میں ترتیب دینا چاہتے ہیں۔

آپ یہ ٹائپ کریں گے:

>
ایل ای ایل ٹی
ایڈریس
،
ضلع
اے ایس سی
کی طرف
سے
ایڈریس
>
آرڈر
،
ڈی ای ایس
سی->
ایل آئی ایم ٹی
10
کا
پتہ؛

+-------------------------+-------------+| ایڈریس | ضلع |+-------------------------+-------------+| 962 ٹاما لوپ | || 18 ڈوئسبرگ بلیوارڈ | || 1368 ماراکابو بلیوارڈ | || 669 فیروز آباد لوپ | ابوظہبی || 535 احمد نگر منور | ابوظہبی || 1078 اسٹارا زگورہ ڈرائیو | آچے || 842 سالزبرگ لین | اڈانا || 663 بہاء بلانکا پارک وے | اڈانا || 614 پاک کریٹ اسٹریٹ | ادیس ابیبہ || 751 لیما لوپ | عدن |+-------------------------+-------------+10 قطاریں سیٹ میں (0.01 سیکنڈ)

اگر اقدار کا ٹکراؤ ہوتا ہے اور آپ کسی اور قسم کی کلید کی وضاحت نہیں کرتے ہیں تو ، ترتیب غیر واضح ہے۔

یہ آپ کے لئے اہم نہیں ہوسکتا ہے. آپ کو اس آرڈر کی پرواہ نہیں ہوسکتی ہے جس میں ایک ہی نام کے ساتھ دو گاہک "جان اے" ہیں۔

اسمتھ" ظاہر ہوتا ہے.

اگر آپ اس معاملے میں کسی خاص حکم کو نافذ کرنا چاہتے ہیں تو ، آپ کو آرڈر بائی شق میں مزید کالم شامل کرنے کی ضرورت ہے ، جیسا کہ پچھلی مثال میں دکھایا گیا ہے۔

حد کی شق

جیسا کہ آپ نے نوٹ کیا ہوگا ، پچھلے سوالات میں سے کچھ نے حد کی شق کا استعمال کیا ہے۔

یہ ایک مفید غیر معیاری ایس کیو ایل بیان ہے جو آپ کو یہ کنٹرول کرنے کی اجازت دیتا ہے کہ کتنی قطاریں آؤٹ پٹ ہیں۔

اس کا بنیادی فارم آپ کو سلیکٹ اسٹیٹمنٹ سے واپس آنے والی قطاروں کی تعداد کو محدود کرنے کی اجازت دیتا ہے ، جو اس وقت مفید ہوتا ہے جب آپ کسی نیٹ ورک یا آؤٹ پٹ پر اسکرین پر منتقل کردہ ڈیٹا کی مقدار کو محدود کرنا چاہتے ہیں۔

مثال کے طور پر ، آپ اسے کسی جدول سے ڈیٹا کا نمونہ حاصل کرنے کے لئے استعمال کرسکتے ہیں ، جیسا کہ یہاں دکھایا گیا ہے:

حد
10
> customer_list سے
ایس ای ایل ای سی
کا نام
؛

+------------------+| نام |+------------------+| ویرا میککوئے || ماریو چیٹھم || جوڈی گرے || جون کیرول || انتھونی شواب || کلاڈ ہرزوگ || مارٹن بیلز |
| بوبی بوڈریو || ولی مارکھم || اردن آرچولیٹا |+------------------+

حد کی شق میں دو دلائل ہوسکتے ہیں۔

اس معاملے میں ، پہلی دلیل واپسی کے لئے پہلی قطار کی وضاحت کرتی ہے ، اور دوسری واپسی کے لئے زیادہ سے زیادہ قطاروں کی وضاحت کرتی ہے۔

پہلی دلیل کو آفسیٹ کے نام سے جانا جاتا ہے۔

فرض کریں کہ آپ پانچ قطاریں چاہتے ہیں ، لیکن آپ پہلی پانچ قطاروں کو چھوڑنا چاہتے ہیں ، جس کا مطلب ہے کہ نتیجہ چھٹی قطار سے شروع ہوگا۔

حد کے لئے ریکارڈ آفسیٹ 0 سے شروع ہوتا ہے ، لہذا آپ یہ مندرجہ ذیل طریقے سے کرسکتے ہیں:

customer_list حد
5,5
سے
>
ایل ای سی ٹی
کا نام۔

+------------------+| نام |+------------------+| کلاڈ ہرزوگ || مارٹن بیلز || بوبی بوڈریو || ولی مارکھم || اردن آرکولیٹا |+------------------+5 قطاریں سیٹ میں (0.00 سیکنڈ)

آؤٹ پٹ سلیکٹ سوال سے قطار 6 سے 10 تک ہے ۔

ایک متبادل نحو ہے جو آپ محدود مطلوبہ الفاظ کے لئے دیکھ سکتے ہیں: حد 10، 5 لکھنے کے بجائے ، آپ لمیٹ 10 آفسیٹ 5 لکھ سکتے ہیں۔

آفسیٹ نحو اس میں بیان کردہ این اقدار کو خارج کرتا ہے۔

یہاں ایک مثال ہے جس میں کوئی آفسیٹ نہیں ہے:

>
ایلیکٹ
آئی ڈی
،
customer_list->
آرڈر
سے آئی
ڈی
حد
10
کا
نام
؛

+----+------------------+| ID | نام |+----+------------------+| 1 | میری سمتھ || 2 | پیٹریشیا جانسن || 3 | لنڈا ولیمز || 4 | باربرا جونز || 5 | الزبتھ براؤن || 6 | جینیفر ڈیوس || 7 | ماریہ ملر || 8 | سوسن ولسن | 9 | مارگریٹ مور || 10 | ڈوروتھی ٹیلر |+----+------------------+10 قطاریں سیٹ میں (0.00 سیکنڈ)

اور یہاں 5 کے آفسیٹ کے ساتھ نتائج ہیں:

customer_list
>
>آرڈر سے
نام
بذریعہ
آئی
ڈی
حد 10
آفسیٹ
5
؛

+----+----------------+| ID | نام |+----+----------------+| 6 | جینیفر ڈیوس || 7 | ماریہ ملر || 8 | سوسن ولسن | 9 | مارگریٹ مور || 10 | ڈوروتھی ٹیلر || 11 | لیزا اینڈرسن || 12 | نینسی تھامس || 13 | کیرن جیکسن || 14 | بیٹی وائٹ || 15 | ہیلن ہیرس |+----+----------------+10 قطاریں سیٹ میں (0.01 سیکنڈ)

دو جدولوں میں شامل ہونا

اب تک ہم اپنے سلیکٹ سوالات میں صرف ایک ٹیبل کے ساتھ کام کر رہے ہیں ۔

تاہم ، زیادہ تر معاملات کو ایک ہی وقت میں ایک سے زیادہ ٹیبل سے معلومات کی ضرورت ہوگی۔

جیسا کہ ہم نے سکیلا ڈیٹا بیس میں جدولوں کی تلاش کی ہے ، یہ واضح ہو گیا ہے کہ تعلقات کا استعمال کرکے ، ہم مزید دلچسپ سوالات کا جواب دے سکتے ہیں۔

مثال کے طور پر ، یہ جاننا مفید ہوگا کہ ہر شہر کس ملک میں ہے۔

یہ سیکشن آپ کو دکھاتا ہے کہ دو جدولوں کو جوڑ کر اس طرح کے سوالات کا جواب کیسے دیا جائے۔

ہم باب 5 میں شامل ہونے کے بارے میں ایک طویل ، زیادہ جدید بحث کے حصے کے طور پر اس مسئلے پر واپس آئیں گے۔

ہم اس باب میں صرف ایک جوائن نحو استعمال کرتے ہیں۔

دو اور (بائیں اور دائیں جوائن) ہیں ، اور ہر ایک آپ کو دو یا زیادہ جدولوں سے ڈیٹا اکٹھا کرنے کا ایک مختلف طریقہ فراہم کرتا ہے۔

یہاں ہم جو نحو استعمال کرتے ہیں وہ اندرونی جوائن ہے ، جو روزمرہ کی سرگرمیوں میں سب سے زیادہ استعمال ہوتا ہے۔

آئیے ایک مثال دیکھیں ، اور پھر ہم اس بارے میں مزید وضاحت کریں گے کہ یہ کیسے کام کرتا ہے:

>
منتخب
شہر
،
اندرون شہر
سے
ملک >
شہر
میں شامل ہوں
.
country_id
=
ملک
country_id
>
کہاں
ملک
.
country_id
<
5
->
بلحاظ
ملک
،
شہر
;

+----------+----------------+| شہر | ملک |+----------+----------------+| کابل | افغانستان || بٹنہ | الجزائر || بچر | الجزائر || Skikda | الجزائر || Tafuna | امریکی ساموا || بینگیلا | انگولا || Namibe | انگولا |+----------+----------------+7 قطاریں سیٹ میں (0.00 سیکنڈ)

پیداوار 5 سے کم country_id والے ہر ملک کے شہروں کو ظاہر کرتی ہے۔

آپ پہلی بار دیکھ سکتے ہیں کہ ہر ملک میں کون سے شہر ہیں.

اندرونی شمولیت کیسے کام کرتی ہے ؟ بیان کے دو حصے ہیں: پہلا، دو جدول کے نام اندرونی مطلوبہ الفاظ سے الگ کیے گئے ہیں؛ اور دوسرا، او این مطلوبہ الفاظ جو شرط کو ترتیب دینے کے لئے مطلوبہ کالموں کی وضاحت کرتا ہے.

اس مثال میں ، شامل ہونے والے دو جدول شہر اور ملک ہیں ، جن کا اظہار شہر اندرونی جوائن ملک کے طور پر کیا جاتا ہے (بنیادی اندرونی شمولیت کے لئے ، اس سے کوئی فرق نہیں پڑتا ہے کہ آپ ٹیبلز کو کس ترتیب میں درج کرتے ہیں ، لہذا ملک کے اندرونی جوائن شہر کا استعمال کرنے سے ایک ہی اثر پڑے گا)۔

او این شق (او این city.country_id = country.country_id) وہ جگہ ہے جہاں ہم MySQL کو وہ کالم بتاتے ہیں جو جدولوں کے درمیان تعلق رکھتے ہیں؛ آپ کو ہمارے ڈیزائن اور باب 2 میں ہماری پچھلی بحث سے یہ یاد رکھنا چاہئے۔

اگر جوائن کی حالت میں میچنگ کے لئے استعمال ہونے والے دونوں جدولوں میں کالم کے نام ایک جیسے ہیں تو ، آپ اس کے بجائے استعمال کی شق استعمال کرسکتے ہیں:

(country_id
)
>
>
کہاں
ملک
کا استعمال کرتے ہوئے
شہر
سے >
ملک شامل ہوں۔
country_id
<
5
->
بلحاظ
ملک
،
شہر
;

+----------+----------------+| شہر | ملک |+----------+----------------+| کابل | افغانستان || بٹنہ | الجزائر || بچر | الجزائر || Skikda | الجزائر || Tafuna | امریکی ساموا || بینگیلا | انگولا || Namibe | انگولا |
سیٹ میں +----------+----------------+7 قطاریں (0.01 سیکنڈ)

تصویر 3-1 میں وین ڈایاگرام اندرونی جوڑ کی وضاحت کرتا ہے۔

سلیکٹ چھوڑنے سے پہلے ، ہم آپ کو ان افعال میں سے ایک کا ذائقہ دیں گے جو آپ مجموعی اقدار کے لئے استعمال کرسکتے ہیں۔

فرض کریں کہ آپ شمار کرنا چاہتے ہیں کہ ہمارے ڈیٹا بیس میں اٹلی کے کتنے شہر ہیں۔

آپ دو میزوں کو جوڑ کر اور اس country_id کے ساتھ قطاروں کی تعداد گن کر ایسا کرسکتے ہیں۔

یہ کس طرح کام کرتا ہے:

>
منتخب
کاؤنٹ
(
1
)
اندرون شہر
سے
ملک
> شہر
میں شامل ہوں
۔
country_id
=
ملک
country_id
>
کہاں
کا ملک
.
country_id
=
49
->
قانب
ملک
،
شہر
;

+----------+| گنتی (1) |+----------+| 7 |
سیٹ میں +---------- +1 قطار (0.00 سیکنڈ)

ہم باب 5 میں سلیکٹ اور مجموعی افعال کی مزید خصوصیات کی وضاحت کرتے ہیں۔

کاؤنٹ () فنکشن کے بارے میں مزید جاننے کے لئے ، "مجموعی افعال" دیکھیں۔

تصویر 3-1.

اندرونی شمولیت کی وین ڈایاگرام نمائندگی

داخل بیان داخل کریں

جدولوں میں نیا ڈیٹا شامل کرنے کے لئے انسرٹ بیان استعمال کیا جاتا ہے۔

یہ سیکشن اس کے بنیادی نحو کی وضاحت کرتا ہے اور کچھ آسان مثالوں کے ذریعے چلتا ہے جو سکیلا ڈیٹا بیس میں نئی قطاریں شامل کرتے ہیں ۔

باب 4 میں ، ہم موجودہ جدولوں یا بیرونی ڈیٹا ذرائع سے ڈیٹا لوڈ کرنے کے طریقے پر تبادلہ خیال کریں گے۔

داخل Basics

ڈیٹا داخل کرنا عام طور پر دو صورتوں میں ہوتا ہے: جب آپ اپنا ڈیٹا بیس بناتے وقت ایک بڑے بیچ میں بلک لوڈ کرتے ہیں ، اور جب آپ ڈیٹا بیس استعمال کرتے وقت ایڈہاک بنیاد پر ڈیٹا شامل کرتے ہیں۔

MySQL میں ، ہر صورتحال کے لئے سرور میں مختلف آپٹیمائزیشن بنائے جاتے ہیں۔

اہم بات یہ ہے کہ دونوں صورتوں میں سرور کے ساتھ کام کرنا آپ کے لئے آسان بنانے کے لئے مختلف ایس کیو ایل نحو دستیاب ہیں۔

ہم اس سیکشن میں بنیادی انسرٹ نحو کی وضاحت کریں گے اور آپ کو بلک اور سنگل ریکارڈ داخل کرنے کے لئے اسے استعمال کرنے کی مثالیں دکھائیں گے۔

آئیے زبان کے جدول میں ایک نئی قطار داخل کرنے کے بنیادی کام سے شروع کرتے ہیں ۔

ایسا کرنے کے لئے، آپ کو میز کی ساخت کو سمجھنے کی ضرورت ہے.

جیسا کہ ہم نے "سکیلا ڈیٹا بیس کا استعمال کرتے ہوئے" میں وضاحت کی ہے ، آپ اسے شو کالمز کے بیان کے ساتھ تلاش کرسکتے ہیں:

>
زبان
سے
کالم
دکھائیں
۔

+-------------+-------------------+------+-----+-------------------+...| میدان | قسم | صفر | کلید | پہلے سے طے شدہ |...+-------------+-------------------+------+-----+-------------------+...| language_id | چھوٹا سا دستخط شدہ | نہیں | پی آر آئی | نول |.... | نام | چار(20) | نہیں | | نول |.... | last_update | ٹائم اسٹیمپ | نہیں | | CURRENT_TIMESTAMP |...+-------------+-------------------+------+-----+-------------------+......+-----------------------------------------------+...| اضافی |...+-----------------------------------------------+... | auto_increment |.... |...| اپ ڈیٹ CURRENT_TIMESTAMP پر DEFAULT_GENERATED |...+----------------------------------------------- +3 قطاریں سیٹ میں (0.00 سیکنڈ)

یہ آپ کو بتاتا ہے کہ language_id کالم خود کار طریقے سے تیار ہوتا ہے ، اور جب بھی اپ ڈیٹ آپریشن ہوتا ہے تو last_update کالم کو اپ ڈیٹ کیا جاتا ہے۔

آپ باب 4 میں اگلے دستیاب شناخت کنندہ کو خود بخود تفویض کرنے کے لئے AUTO_INCREMENT شارٹ کٹ کے بارے میں مزید سیکھیں گے۔

آئیے پرتگالی زبان کے لئے ایک نئی قطار شامل کرتے ہیں۔

ایسا کرنے کے دو طریقے ہیں.

سب سے عام بات یہ ہے کہ MySQL کو language_id کے لئے پہلے سے طے شدہ قیمت کو پر کرنے دیں، جیسے:

میسکل
>
زبان کی
قدروں
میں انسرٹ
(
نول
،
'پرتگالی'
،
اب
())؛

Query OK, 1 row متاثر (0.10 سیکنڈ)

اگر آپ ابھی ٹیبل پر سلیکٹ پر عمل کرتے ہیں تو ، ہم دیکھیں گے کہ MySQL نے قطار داخل کی ہے:

زبان
سے
>
سلیکٹ
*
؛

+-------------+------------+---------------------+| language_id | نام | last_update |+-------------+------------+---------------------+| 1 | انگریزی | 2006-02-15 05:02:19 || 2 | اطالوی | 2006-02-15 05:02:19 || 3 | جاپانی | 2006-02-15 05:02:19 || 4 | مینڈارن | 2006-02-15 05:02:19 || 5 | فرانسیسی | 2006-02-15 05:02:19 || 6 | جرمن | 2006-02-15 05:02:19 || 7 | پرتگالی | 2020-09-26 09:11:36 |+-------------+------------+---------------------+7 قطاریں سیٹ (0.00 سیکنڈ)

نوٹ کریں کہ ہم نے last_update کالم میں فنکشن ناؤ () استعمال کیا۔

اب () فنکشن MySQL سرور کی موجودہ تاریخ اور وقت واپس کرتا ہے۔

دوسرا آپشن دستی طور پر language_id کالم کی قیمت داخل کرنا ہے ۔

اب جبکہ ہمارے پاس پہلے ہی سات زبانیں ہیں ، ہمیں language_id کی اگلی قدر کے لئے 8 کا استعمال کرنا چاہئے۔

ہم اس ایس کیو ایل ہدایات کے ساتھ اس کی تصدیق کرسکتے ہیں:

زبان
سے
>
سلیکٹ
میکس
(
language_id
)
؛

+------------------+| زیادہ سے زیادہ (language_id) |+------------------+| سیٹ میں 7 |+------------------+1 قطار (0.00 سیکنڈ)

میکس () فنکشن آپ کو پیرامیٹر کے طور پر فراہم کردہ کالم کی زیادہ سے زیادہ قیمت بتاتا ہے۔

یہ زبان سے سلیکٹ language_id استعمال کرنے سے زیادہ صاف ہے ، جو تمام قطاروں کو پرنٹ کرتا ہے اور آپ کو زیادہ سے زیادہ قیمت تلاش کرنے کے لئے ان کا معائنہ کرنے کی ضرورت ہوتی ہے۔

آرڈر بائی اور لمیٹ شق شامل کرنے سے یہ آسان ہوجاتا ہے ، لیکن میکس () کا استعمال ڈی ای ایس سی لمیٹ 1 کے ذریعہ زبان کے آرڈر سے منتخب language_id سے کہیں زیادہ آسان ہے ، جو اسی جواب کو واپس language_id ہے۔

اب ہم قطار داخل کرنے کے لئے تیار ہیں۔

اس انسرٹ میں ، ہم دستی طور پر بھی last_update ویلیو داخل کرنے جارہے ہیں ۔

یہاں ضروری کمانڈ ہے:

>
زبان کی قدروں
میں انسرٹ
(
8
،
'روسی'
،
'2020-09-26 10:35:00'
)؛

Query OK, 1 row متاثر (0.02 سیکنڈ)

MySQL رپورٹ کرتا ہے کہ ایک قطار متاثر ہوئی ہے (اس معاملے میں شامل کی گئی ہے)، جس کی ہم جدول کے مندرجات کو دوبارہ چیک کرکے تصدیق کرسکتے ہیں:

زبان
سے
>
سلیکٹ
*
؛

+-------------+------------+---------------------+| language_id | نام | last_update |+-------------+------------+---------------------+| 1 | انگریزی | 2006-02-15 05:02:19 || 2 | اطالوی | 2006-02-15 05:02:19 || 3 | جاپانی | 2006-02-15 05:02:19 || 4 | مینڈارن | 2006-02-15 05:02:19 || 5 | فرانسیسی | 2006-02-15 05:02:19 || 6 | جرمن | 2006-02-15 05:02:19 || 7 | پرتگالی | 2020-09-26 09:11:36 || 8 | روسی | 2020-09-26 10:35:00 |+-------------+------------+---------------------+8 قطاریں سیٹ میں (0.00 سیکنڈ)

سنگل قطار انسرٹ اسٹائل بنیادی کلیدی نقلوں کا پتہ لگاتا ہے اور جیسے ہی اسے تلاش کرتا ہے رک جاتا ہے۔

مثال کے طور پر ، فرض کریں کہ ہم اسی language_id کے ساتھ ایک اور قطار داخل کرنے کی کوشش کرتے ہیں:

> زبان
کی
قدروں
میں آئی
این ایس آر ٹی
(
8
،
'عربی'
،
'2020-09-26 10:35:00'
)؛

غلطی 1062 (23000): کلیدی 'زبان' کے لئے ڈپلیکیٹ اندراج '8'۔ پرائمری'

جب یہ ڈپلیکیٹ کلید کا پتہ لگاتا ہے تو انسرٹ آپریشن رک جاتا ہے۔

اگر آپ چاہیں تو غلطی کو روکنے کے لئے نظر انداز کرنے کی شق شامل کرسکتے ہیں ، لیکن نوٹ کریں کہ قطار اب بھی داخل نہیں کی جائے گی:

>
آئی این ایس آر ٹی
زبان
کی
قدروں کو
نظر انداز کرتا
ہے (8
،
'عربی'
،
'2020-09-26 10:35:00'
)؛

سوال ٹھیک ہے، 0 قطاریں متاثر، 1 انتباہ (0.00 سیکنڈ)

زیادہ تر معاملات میں آپ ممکنہ مسائل کے بارے میں جاننا چاہیں گے ، حالانکہ (آخر کار ، بنیادی چابیاں منفرد سمجھی جاتی ہیں ) ، لہذا یہ نظر انداز نحو شاذ و نادر ہی استعمال ہوتا ہے۔

ایک ہی وقت میں متعدد اقدار داخل کرنا بھی ممکن ہے:

>
زبان کی
قدروں
میں انسرٹ
(
نول
،
'ہسپانوی'
،
اب
())،
>
(
نول
،
'عبرانی'
،
اب
())؛

سوال ٹھیک ہے، 2 قطاریں متاثر (0.02 سیکنڈ) ریکارڈ: 2 نقلیں: 0 انتباہ: 0

نوٹ کریں کہ مائی ایس کیو ایل بڑے پیمانے پر داخل ہونے کے نتائج کو سنگل انسریشن سے مختلف طریقے سے رپورٹ کرتا ہے۔

پہلی لائن آپ کو بتاتی ہے کہ کتنی قطاریں داخل کی گئیں ، جبکہ دوسری لائن میں پہلا اندراج آپ کو بتاتا ہے کہ اصل میں کتنی قطاریں (یا ریکارڈ) پر عمل کیا گیا تھا۔

اگر آپ انسرٹ نظر انداز کا استعمال کرتے ہیں اور ڈپلیکیٹ ریکارڈ داخل کرنے کی کوشش کرتے ہیں (جس کے لئے بنیادی کلید موجودہ قطار سے میل کھاتی ہے) تو مائی ایس کیو ایل خاموشی سے اسے داخل کرنا چھوڑ دے گا اور اسے دوسری لائن پر دوسری انٹری میں نقل کے طور پر رپورٹ کرے گا:

>
آئی این ایس آر ٹی
زبان
کی
قدروں کو
نظر انداز کرتا
ہے (
9
،
'پرتگالی'
،
اب
())،
(
11
،
'عبرانی'
،
'اب
())؛

سوال ٹھیک ہے، 1 قطار متاثر، 1 انتباہ (0.01 سیکنڈ) ریکارڈ: 2 نقل: 1 انتباہ: 1

ہم انتباہ کی وجوہات پر تبادلہ خیال کرتے ہیں ، جو باب 4 میں آؤٹ پٹ کی دوسری لائن پر تیسری انٹری کے طور پر دکھایا گیا ہے۔

Alternative Syntaxes

پچھلے سیکشن میں دکھائے گئے ویلیوز نحو کے متعدد متبادل موجود ہیں۔

یہ سیکشن ان کے ذریعے چلتا ہے اور ہر ایک کے فوائد اور نقصانات کی وضاحت کرتا ہے.

اگر آپ اس بنیادی نحو سے خوش ہیں جو ہم نے اب تک بیان کیا ہے اور کسی نئے موضوع پر آگے بڑھنا چاہتے ہیں تو ، "ڈیلیٹ اسٹیٹمنٹ" پر آگے بڑھنے کے لئے آزاد محسوس کریں۔

ہم جو ویلیوز نحو استعمال کر رہے ہیں اس کے کچھ فوائد ہیں : یہ سنگل اور بلک انسرٹس دونوں کے لئے کام کرتا ہے ، اگر آپ تمام کالموں کے لئے اقدار فراہم کرنا بھول جاتے ہیں تو آپ کو غلطی کا پیغام ملتا ہے ، اور آپ کو کالم کے ناموں میں ٹائپ کرنے کی ضرورت نہیں ہے۔

تاہم ، اس کے کچھ نقصانات بھی ہیں: آپ کو کالموں کی ترتیب کو یاد رکھنے کی ضرورت ہے ، آپ کو ہر کالم کے لئے ایک قدر فراہم کرنے کی ضرورت ہے ، اور نحو بنیادی جدول کی ساخت سے قریب سے منسلک ہے۔

یعنی ، اگر آپ جدول کی ساخت کو تبدیل کرتے ہیں تو ، آپ کو داخل بیانات کو تبدیل کرنے کی ضرورت ہے ۔

خوش قسمتی سے ، ہم نحو کو تبدیل کرکے ان نقصانات سے بچ سکتے ہیں۔

فرض کریں کہ آپ جانتے ہیں کہ اداکار کی میز پر چار کالم ہیں ، اور آپ کو ان کے نام یاد ہیں ، لیکن آپ ان کا حکم بھول گئے ہیں۔

آپ مندرجہ ذیل نقطہ نظر کا استعمال کرتے ہوئے ایک قطار داخل کرسکتے ہیں:

>
اداکار
(
actor_id
، first_name
،
last_name
،
last_update
)
- >
والیوز
(
این یو ایل
،
'ونیسیئس'
،
'گریپپا'
،
ناؤ
())؛

Query OK, 1 row متاثر (0.03 سیکنڈ)

کالم کے نام جدول کے نام کے بعد کوہن میں شامل کیے جاتے ہیں ، اور ان کالموں میں ذخیرہ کردہ اقدار کو ویلیوز مطلوبہ الفاظ کے بعد کوہن میں درج کیا جاتا ہے۔

لہذا ، اس مثال میں ، ایک نئی قطار تشکیل دی جاتی ہے ، اور قیمت 201 کو actor_id کے طور پر ذخیرہ کیا جاتا ہے (یاد رکھیں ، actor_id میں auto_increment کی خصوصیت ہے) ، ونیسیئس کو first_name کے طور پر ذخیرہ کیا جاتا ہے ، گریپا کو last_name کے طور پر ذخیرہ کیا جاتا ہے ، اور last_update کالم موجودہ ٹائم اسٹیمپ کے ساتھ آباد ہوتا ہے۔

اس نحو کے فوائد یہ ہیں کہ یہ پڑھنے کے قابل اور لچکدار ہے (تیسرے نقصان کو حل کرنے کے لئے جو ہم نے بیان کیا ہے) اور ترتیب سے آزاد (پہلے نقصان کو حل کرنا).

بوجھ یہ ہے کہ آپ کو کالم کے نام جاننے اور انہیں ٹائپ کرنے کی ضرورت ہے۔

یہ نیا نحو آسان نقطہ نظر کے دوسرے نقصان کو بھی حل کرسکتا ہے - یعنی ، یہ آپ کو صرف کچھ کالموں کے لئے اقدار داخل کرنے کی اجازت دے سکتا ہے۔

یہ سمجھنے کے لئے کہ یہ کس طرح مفید ہوسکتا ہے، آئیے شہر کی میز کو تلاش کریں :

میسکل>
ڈی ای ایس سی
شہر
۔

+------------- +----------------------+------+-----+-------------------+...| میدان | قسم | صفر | کلید | طے شدہ |...+-------------+----------------------+------+-----+-------------------+...| city_id | (5) غیر دستخط شدہ | نہیں | پی آر آئی | نول |.... | شہر | ورچر(50) | نہیں | | نول |.... | country_id | (5) غیر دستخط شدہ | نہیں | ایم یو ایل | نول |.... | last_update | ٹائم اسٹیمپ | نہیں | | CURRENT_TIMESTAMP |...+-------------+----------------------+------+-----+-------------------+......+-----------------------------------------------+...| اضافی |...+-----------------------------------------------+... | auto_increment |
...| |...| |...| اپ ڈیٹ CURRENT_TIMESTAMP پر |....سیٹ میں ----------------------------------------------- +
4 قطاریں (0.00 سیکنڈ)

نوٹ کریں کہ last_update کالم میں CURRENT_TIMESTAMP کی ڈیفالٹ ویلیو ہے۔

اس کا مطلب یہ ہے کہ اگر آپ last_update کالم کے لئے کوئی قدر داخل نہیں کرتے ہیں تو ، MySQL پہلے سے طے شدہ طور پر موجودہ تاریخ اور وقت داخل کرے گا۔

یہ وہی ہے جو ہم چاہتے ہیں: جب ہم کوئی ریکارڈ اسٹور کرتے ہیں، تو ہم تاریخ اور وقت کی جانچ پڑتال کرنے اور اسے ٹائپ کرنے کی زحمت نہیں اٹھانا چاہتے ہیں.

آئیے ایک نامکمل اندراج داخل کرنے کی کوشش کرتے ہیں:

>
شہر
(
شہر
،
country_id
)
اقدار
(
'بیبیڈورو'
،
19
)؛

Query OK, 1 row متاثر (0.00 سیکنڈ)

ہم نے city_id کالم کے لئے کوئی قیمت مقرر نہیں کی تھی ، لہذا MySQL اسے اگلی دستیاب قیمت (auto_increment پراپرٹی کی وجہ سے) پر ڈیفالٹ کرتا ہے ، اور last_update موجودہ تاریخ اور وقت کو اسٹور کرتا ہے۔

آپ اسے ایک سوال کے ساتھ چیک کر سکتے ہیں:

میسکل
>
سلیکٹ
*
اس شہر
سے
جہاں
شہر
'بیبیڈورو'
کی طرح
ہے۔

+---------+-----------+------------+---------------------+| city_id | شہر | country_id | last_update |+---------+-----------+------------+---------------------+| 601 | Bebedouro | 19 | 2021-02-27 21:34:08 |+---------+-----------+------------+---------------------+1 قطار سیٹ (0.01 سیکنڈ)

آپ اس نقطہ نظر کو بڑے پیمانے پر داخل کرنے کے لئے بھی استعمال کرسکتے ہیں ، جیسا کہ مندرجہ ذیل ہے:

>
آئی این ایس آر ٹی
ان
سٹی
(
شہر
،
country_id
)
اقدار
- >
(
'ساؤ کارلوس'
،
19
)،
->
(
'آراکورا'
،
19
)،
->
(
'ریبیرو پریٹو'
،
19
)؛

سوال ٹھیک ہے، 3 قطاریں متاثر (0.00 سیکنڈ) ریکارڈ: 3 نقل: 0 انتباہ: 0

کالم کے ناموں کو یاد رکھنے اور ٹائپ کرنے کی ضرورت کے علاوہ ، اس نقطہ نظر کا ایک نقصان یہ ہے کہ آپ حادثاتی طور پر کالموں کے لئے اقدار کو چھوڑ سکتے ہیں۔

MySQL حذف شدہ کالموں کو پہلے سے طے شدہ اقدار پر سیٹ کرے گا۔

MySQL جدول کے تمام کالموں میں نول کی ڈیفالٹ ویلیو ہوتی ہے ، جب تک کہ ٹیبل بنانے یا ترمیم کرنے پر ایک اور ڈیفالٹ ویلیو واضح طور پر تفویض نہ کی جائے۔

جب آپ کو جدول کالموں کے لئے پہلے سے طے شدہ اقدار استعمال کرنے کی ضرورت ہو تو ، آپ ڈیفالٹ مطلوبہ الفاظ (MySQL 5.7 اور اس کے بعد کی حمایت یافتہ) استعمال کرنا چاہیں گے۔

یہاں ایک مثال ہے جو ڈیفالٹ کا استعمال کرتے ہوئے ملک کی جدول میں ایک قطار شامل کرتی ہے:

>ملک ویلیوز
میں
آئی این ایس ای آر ٹی
(
نول
،
'یوراگوئے'
،
ڈیفالٹ
)؛

Query OK, 1 row متاثر (0.01 سیکنڈ)

مطلوبہ الفاظ ڈیفالٹ مائی ایس کیو ایل کو اس کالم کے لئے ڈیفالٹ ویلیو استعمال کرنے کے لئے کہتا ہے ، لہذا موجودہ تاریخ اور وقت ہماری مثال میں داخل کیا گیا ہے۔

اس نقطہ نظر کے فوائد یہ ہیں کہ آپ پہلے سے طے شدہ اقدار کے ساتھ بلک انسرٹ کی خصوصیت استعمال کرسکتے ہیں ، اور آپ غلطی سے کسی کالم کو کبھی نہیں چھوڑ سکتے ہیں۔

ایک اور متبادل داخل نحو ہے ۔

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

یہاں ایک مثال ہے جو ملک کی میز پر ایک نئی قطار شامل کرتی ہے :

ملک
میں
آئی این ایس ای آر ٹی
>
country_id country_id
این
یو ایل
،
>
ملک
=
'بہاماس'
،
last_update
=
ناؤ
()؛

Query OK, 1 row متاثر (0.01 سیکنڈ)

نحو میں آپ کو ٹیبل کا نام ، مطلوبہ الفاظ ایس ای ٹی ، اور پھر کالم کے مساوی قدر کے جوڑے درج کرنے کی ضرورت ہوتی ہے ، جو کوما کے ذریعہ الگ ہوتے ہیں۔

جن کالموں کے لئے اقدار فراہم نہیں کی جاتی ہیں وہ ان کی طے شدہ اقدار پر سیٹ کیے جاتے ہیں۔

ایک بار پھر ، نقصانات یہ ہیں کہ آپ حادثاتی طور پر کالموں کے لئے اقدار کو چھوڑ سکتے ہیں اور آپ کو کالم کے ناموں کو یاد رکھنے اور ٹائپ کرنے کی ضرورت ہے۔

ایک اہم اضافی نقصان یہ ہے کہ آپ اس طریقہ کار کو بڑے پیمانے پر داخل کرنے کے لئے استعمال نہیں کرسکتے ہیں۔

آپ کسی سوال سے واپس کی گئی اقدار کا استعمال کرتے ہوئے بھی داخل کرسکتے ہیں۔

ہم باب 7 میں اس پر بحث کرتے ہیں.

حذف شدہ بیان

DELETE بیان کو جدول سے ایک یا زیادہ قطاروں کو ہٹانے کے لئے استعمال کیا جاتا ہے۔

ہم یہاں سنگل ٹیبل حذف کی وضاحت کرتے ہیں اور باب 7 میں ملٹی ٹیبل حذف پر تبادلہ خیال کرتے ہیں - جو ایک بیان کے ذریعہ دو یا دو سے زیادہ جدولوں سے ڈیٹا کو ہٹاتے ہیں۔

حذف بنیادی باتیں

DELETE کا سب سے آسان استعمال ٹیبل میں تمام قطاروں کو ہٹانا ہے۔

فرض کریں کہ آپ اپنے کرایہ کی میز خالی کرنا چاہتے ہیں ۔

آپ اس کے ساتھ ایسا کر سکتے ہیں:

کرایہ
سے
>
ڈی ایل ای ٹی
۔

سوال ٹھیک ہے، 16044 قطاریں متاثر ہوئیں (2.41 سیکنڈ)

ڈیلیٹ نحو میں کالم کے نام شامل نہیں ہیں کیونکہ یہ پوری قطاروں کو ہٹانے کے لئے استعمال ہوتا ہے نہ کہ صرف قطار سے اقدار کو۔

قطار میں کسی قدر کو ری سیٹ کرنے یا ترمیم کرنے کے لئے ، آپ اپ ڈیٹ اسٹیٹمنٹ کا استعمال کرتے ہیں ، جو "اپ ڈیٹ اسٹیٹمنٹ" میں بیان کیا گیا ہے۔

نوٹ کریں کہ ڈیلیٹ بیان خود ٹیبل کو نہیں ہٹاتا ہے۔

مثال کے طور پر ، کرایہ کے جدول میں تمام قطاروں کو حذف کرنے کے بعد ، آپ اب بھی جدول سے پوچھ گچھ کرسکتے ہیں:

کرایہ
سے
>
ایس ایل ای سی ٹی
*
؛

خالی سیٹ (0.00 سیکنڈ)

آپ اس کی ساخت کو بیان کریں یا تخلیق کریں ٹیبل کا استعمال کرتے ہوئے تلاش کرنا جاری رکھ سکتے ہیں ، اور انسرٹ کا استعمال کرتے ہوئے نئی قطاریں داخل کرسکتے ہیں۔

جدول کو ہٹانے کے لئے ، آپ باب 4 میں بیان کردہ ڈراپ بیان استعمال کرتے ہیں۔

نوٹ کریں کہ اگر جدول کا کسی دوسرے جدول کے ساتھ تعلق ہے تو ، غیر ملکی کلیدی رکاوٹ کی وجہ سے حذف ناکام ہوسکتا ہے:

زبان
سے
> حذف
۔

غلطی 1451 (23000): والدین کی قطار کو حذف یا اپ ڈیٹ نہیں کرسکتا: ایک غیر ملکی کلید ناکام ہو جاتی ہے ('سکیلا'.'فلم'، رکاوٹ 'fk_film_language' غیر ملکی کلید ('language_id') حوالہ جات 'زبان' ('language_id') اپ ڈیٹ کیسکیڈ پر)

کہاں کا استعمال، آرڈر کریں، اور حد بنائیں

اگر آپ نے پچھلے سیکشن میں قطاروں کو حذف کیا ہے تو ، "اینٹیٹی ریلیشن شپ ماڈلنگ مثالیں" میں ہدایات پر عمل کرکے اب اپنے سکیلا ڈیٹا بیس کو دوبارہ لوڈ کریں۔

آپ کو اس سیکشن میں مثالوں کے لئے کرایہ کے جدول میں بحال کردہ قطاروں کی ضرورت ہوگی۔

ایک یا ایک سے زیادہ قطاروں کو ہٹانے کے لئے ، لیکن ٹیبل میں تمام قطاریں نہیں ، ڈبلیو ایچ اے کی شق کا استعمال کریں۔

یہ اسی طرح کام کرتا ہے جیسے یہ سلیکٹ کے لئے کرتا ہے۔

مثال کے طور پر ، فرض کریں کہ آپ 10 سے کم rental_id کے ساتھ کرایہ کی میز سے تمام قطاروں کو ہٹانا چاہتے ہیں۔

آپ اس کے ساتھ ایسا کر سکتے ہیں:

کرایہ
سے
>
rental_id
<
10
;

Query OK, 9 قطاریں متاثر (0.01 سیکنڈ)

اس کا نتیجہ یہ ہوتا ہے کہ معیار سے مطابقت رکھنے والی نو قطاریں ہٹا دی جاتی ہیں۔

اب فرض کریں کہ آپ میری اسمتھ نامی گاہک سے تمام ادائیگیوں کو ڈیٹا بیس سے ہٹانا چاہتے ہیں۔

سب سے پہلے ، اندرونی جوائن کا استعمال کرتے ہوئے گاہک اور ادائیگی کے جدولوں کے ساتھ ایک سلیکٹ انجام دیں (جیسا کہ "جوائننگ ٹو ٹیبلز" میں بیان کیا گیا ہے):

first_name
>
last_name
،
گاہک
.
ادائیگی سے customer_id
>
payment_date
کسٹمر >
آن
کسٹمر
میں شامل ہوں
۔
customer_id
=
ادائیگی
customer_id
>
کہاں
first_name
'مریم'
کی طرح
اور >
اسمتھ
' کی طرح
last_name
۔

+------------ +-----------+-------------+--------+---------------------+| first_name | last_name | customer_id | رقم | payment_date |+------------+-----------+-------------+--------+---------------------+
| مریم | سمتھ | 1 | 2.99 | 2005-05-25 11:30:37 || مریم | سمتھ | 1 | 0.99 | 2005-05-28 10:35:23 || مریم | سمتھ | 1 | 5.99 | 2005-06-15 00:54:12 || مریم | سمتھ | 1 | 0.99 | 2005-06-15 18:02:53 |... مریم | سمتھ | 1 | 1.99 | 2005-08-22 01:27:57 || مریم | سمتھ | 1 | 2.99 | 2005-08-22 19:41:37 || مریم | سمتھ | 1 | 5.99 | 2005-08-22 20:03:46 |+------------+-----------+-------------+--------+---------------------+32 قطاریں سیٹ (0.00 سیکنڈ)

اگلا ، ادائیگی کے جدول سے 1 کے customer_id کے ساتھ قطار کو ہٹانے کے لئے درج ذیل DELETE آپریشن انجام دیں:

ادائیگی
سے
> ڈی
ایل ای ٹی
جہاں
customer_id
=
1
؛

سوال ٹھیک ہے، 32 قطاریں متاثر ہوئیں (0.01 سیکنڈ)

آپ DELETE کے ساتھ آرڈر بائی اور محدود شقیں استعمال کرسکتے ہیں۔

آپ عام طور پر ایسا کرتے ہیں جب آپ حذف کردہ قطاروں کی تعداد کو محدود کرنا چاہتے ہیں۔

مثال کے طور پر:

10000
>
حد
کے ذریعہ
ادائیگی
customer_id
آرڈر
سے
ڈی لیٹ
؛

Query OK, 10000 قطاریں متاثر ہوئیں (0.22 سیکنڈ)

اشارہ کرنا

کارکردگی کے مسائل کی وجہ سے ہم قطاروں کے چھوٹے سیٹوں کے لئے ڈیلیٹ اور اپ ڈیٹ آپریشنز کا استعمال کرنے کی انتہائی سفارش کرتے ہیں۔

مناسب قیمت ہارڈ ویئر پر منحصر ہوتی ہے ، لیکن انگوٹھے کا ایک اچھا اصول فی بیچ تقریبا 20،000-40،000 قطاریں ہیں۔

تمام قطاروں کو ٹرانکیٹ کے ساتھ ہٹانا

اگر آپ ٹیبل میں تمام قطاروں کو ہٹانا چاہتے ہیں تو ، انہیں DELETE کے ساتھ ہٹانے سے کہیں زیادہ تیز طریقہ ہے۔

جب آپ ٹرانکٹ ٹیبل بیان استعمال کرتے ہیں تو ، MySQL ٹیبل کو چھوڑنے ، ٹیبل ڈھانچے کو ہٹانے اور پھر انہیں دوبارہ تخلیق کرنے کا شارٹ کٹ لیتا ہے۔

جب ایک میز میں بہت ساری قطاریں ہوتی ہیں تو ، یہ بہت تیز ہوتا ہے۔

نوٹ

تجسس کے طور پر ، MySQL 5.6 میں ایک بگ موجود ہے جو اس وقت مائی ایس کیو ایل کو روک سکتا ہے جب مائی ایس کیو ایل کو ایک بڑے انوڈ بی بفر پول (200 جی بی یا اس سے زیادہ) کے ساتھ تشکیل دیا جاتا ہے۔

تفصیلات کے لئے بگ رپورٹ دیکھیں۔

اگر آپ ادائیگی کے جدول میں موجود تمام ڈیٹا کو ہٹانا چاہتے ہیں تو ، آپ اسے انجام دے سکتے ہیں:

>
ٹی
آر ٹی
ٹیبل
کی ادائیگی
؛

Query OK, 0 قطاریں متاثر (0.07 سیکنڈ)

نوٹ کریں کہ متاثرہ قطاروں کی تعداد صفر کے طور پر دکھائی گئی ہے: آپریشن کو تیز کرنے کے لئے، مائی ایس کیو ایل حذف شدہ قطاروں کی تعداد کی گنتی نہیں کرتا ہے، لہذا دکھایا گیا نمبر حذف شدہ قطاروں کی اصل تعداد کی عکاسی نہیں کرتا ہے۔

ٹرانکٹ ٹیبل بیان بہت سے طریقوں سے ڈیلیٹ سے مختلف ہے ، لیکن یہ کچھ قابل ذکر ہے:

ٹرانکٹ آپریشنز ڈراپ اور ٹیبل کو دوبارہ تخلیق کریں ، جو قطاروں کو ایک ایک کرکے حذف کرنے سے کہیں زیادہ تیز ہے ، خاص طور پر بڑے ٹیبلوں کے لئے۔

ٹرانکٹ آپریشنز ایک پوشیدہ عزم کا سبب بنتے ہیں ، لہذا آپ انہیں واپس نہیں لے سکتے ہیں۔

اگر سیشن میں ایک فعال ٹیبل لاک ہے تو آپ ٹرانک آپریشنز انجام نہیں دے سکتے ہیں۔

جدول کی اقسام ، لین دین ، اور لاکنگ پر باب 5 میں تبادلہ خیال کیا گیا ہے۔

ان میں سے کوئی بھی حدود عملی طور پر زیادہ تر ایپلی کیشنز کو متاثر نہیں کرتی ہیں ، اور آپ اپنی پروسیسنگ کو تیز کرنے کے لئے ٹرانکیٹ ٹیبل کا استعمال کرسکتے ہیں۔

یقینا ، باقاعدہ آپریشن کے دوران پورے جدولوں کو حذف کرنا عام نہیں ہے۔

ایک استثنا عارضی جدول ہے جو کسی خاص صارف سیشن کے لئے سوالات کے نتائج کو عارضی طور پر اسٹور کرنے کے لئے استعمال ہوتا ہے ، جسے اصل ڈیٹا کھوئے بغیر حذف کیا جاسکتا ہے۔

تازہ ترین بیان

اپ ڈیٹ بیان ڈیٹا کو تبدیل کرنے کے لئے استعمال کیا جاتا ہے۔

اس سیکشن میں ، ہم آپ کو دکھاتے ہیں کہ ایک ہی جدول میں ایک یا زیادہ قطاروں کو اپ ڈیٹ کرنے کا طریقہ۔

"اپ ڈیٹس" میں ملٹی ٹیبل اپ ڈیٹس پر تبادلہ خیال کیا گیا ہے۔

اگر آپ نے اپنے سکیلا ڈیٹا بیس سے قطاریں حذف کردی ہیں تو ، جاری رکھنے سے پہلے اسے دوبارہ لوڈ کریں۔

مثالیں

اپ ڈیٹ بیان کا سب سے آسان استعمال ٹیبل میں تمام قطاروں کو تبدیل کرنا ہے۔

فرض کریں کہ آپ کو تمام ادائیگیوں کے لئے 10٪ شامل کرکے ادائیگی ٹیبل کے رقم کالم کو اپ ڈیٹ کرنے کی ضرورت ہے۔

آپ اس پر عمل درآمد کرکے یہ کر سکتے ہیں:

میری ایس کیو ایل
>
یو پی ڈیٹ
ادائیگی
کی رقم
=
رقم
*
1
.
1
;

سوال ٹھیک ہے، 16025 قطاریں متاثر ہوئیں، 16025 وارننگز (0.41 سیکنڈ) قطاریں میچ ہوئیں: 16049 تبدیل شدہ: 16025 انتباہ: 16025

نوٹ کریں کہ ہم last_update اسٹیٹس کو اپ ڈیٹ کرنا بھول گئے ہیں۔

اسے متوقع ڈیٹا بیس ماڈل کے ساتھ ہم آہنگ بنانے کے لئے ، آپ مندرجہ ذیل بیان چلا کر اسے ٹھیک کرسکتے ہیں:

mysql
>
upDate
ادائیگی
سیٹ
last_update
=
'2021-02-28 17:53:00'
؛

سوال ٹھیک ہے، 16049 قطاریں متاثر ہوئیں (0.27 سیکنڈ) قطاریں میچ ہوئیں: 16049 تبدیل شدہ: 16049 انتباہ: 0

اشارہ کرنا

آپ عملدرآمد کے موجودہ ٹائم اسٹیمپ کے ساتھ last_update کالم کو اپ ڈیٹ کرنے کے لئے ناؤ () فنکشن کا استعمال کرسکتے ہیں۔

مثال کے طور پر:

مائی ایس کیو ایل
>
یو پی ڈیٹ
ادائیگی
سیٹ
last_update
=
اب
()؛

اپ ڈیٹ بیان کے ذریعہ رپورٹ کی گئی دوسری قطار بیان کے مجموعی اثر کو ظاہر کرتی ہے۔

ہماری مثال میں، آپ دیکھتے ہیں:

قطاریں میچ: 16049 تبدیل: 16049 انتباہ: 0

پہلا کالم ان قطاروں کی تعداد کی اطلاع دیتا ہے جو میچ کے طور پر بازیافت کی گئی تھیں؛ اس معاملے میں، چونکہ کوئی کہاں یا حد کی شق نہیں ہے ، لہذا ٹیبل میں موجود تمام قطاریں سوال سے مطابقت رکھتی ہیں۔

دوسرے کالم میں بتایا گیا ہے کہ کتنی قطاروں کو تبدیل کرنے کی ضرورت ہے ، جو ہمیشہ ان قطاروں کی تعداد کے برابر یا اس سے کم ہوتی ہے جو میل کھاتی ہیں۔

اگر آپ بیان کو دہراتے ہیں تو ، آپ کو ایک مختلف نتیجہ نظر آئے گا:

mysql
>
upDate
ادائیگی
سیٹ
last_update
=
'2021-02-28 17:53:00'
؛

سوال ٹھیک ہے، 0 قطاریں متاثر (0.07 سیکنڈ) قطاریں میچ: 16049 تبدیل شدہ: 0 انتباہ: 0

اس بار، چونکہ تاریخ پہلے ہی 2021-02-28 17:53:00 مقرر کی گئی ہے اور کہاں کوئی شرط نہیں ہے ، تمام قطاریں اب بھی سوال سے مطابقت رکھتی ہیں لیکن کوئی بھی تبدیل نہیں کیا گیا ہے.

یہ بھی نوٹ کریں کہ تبدیل شدہ قطاروں کی تعداد ہمیشہ متاثر ہونے والی قطاروں کی تعداد کے برابر ہوتی ہے ، جیسا کہ آؤٹ پٹ کی پہلی لائن پر بتایا گیا ہے۔

کہاں کا استعمال، آرڈر کریں، اور حد بنائیں

اکثر ، آپ ٹیبل میں تمام قطاروں کو تبدیل نہیں کرنا چاہتے ہیں۔

اس کے بجائے ، آپ ایک یا ایک سے زیادہ قطاروں کو اپ ڈیٹ کرنا چاہتے ہیں جو کسی شرط سے میل کھاتے ہیں۔

سلیکٹ اور ڈیلیٹ کی طرح ، ٹاسک کے لئے جہاں کی شق استعمال ہوتی ہے۔

اس کے علاوہ ، اسی طرح جیسے ڈیلیٹ کے ساتھ ، آپ آرڈر بائی اور لمیٹ کو ایک ساتھ استعمال کرسکتے ہیں تاکہ یہ کنٹرول کیا جاسکے کہ آرڈر کردہ فہرست سے کتنی قطاروں کو اپ ڈیٹ کیا گیا ہے۔

آئیے ایک مثال کی کوشش کرتے ہیں جو ٹیبل میں ایک قطار میں ترمیم کرتی ہے۔

فرض کریں کہ اداکارہ پینیلوپ گینیس نے اپنا آخری نام تبدیل کر لیا ہے۔

ڈیٹا بیس کے اداکار ٹیبل میں اسے اپ ڈیٹ کرنے کے لئے ، آپ کو عمل درآمد کرنے کی ضرورت ہے:

> یو
پی ڈیٹ
اداکار
سیٹ
last_name
=
اپر
(
'کروز'
)
->
>> اور
last_name
جیسے '
گینیس'
جیسے first_name
۔

سوال ٹھیک ہے، 1 قطار متاثر (0.01 سیکنڈ) قطاریں میچ: 1 تبدیل شدہ: 1 انتباہ: 0

جیسا کہ توقع تھی ، مائی ایس کیو ایل نے ایک قطار سے میچ کیا اور ایک قطار کو تبدیل کردیا۔

یہ کنٹرول کرنے کے لئے کہ کتنی تازہ کاریاں ہوتی ہیں ، آپ آرڈر بائی اور لمیٹ کا امتزاج استعمال کرسکتے ہیں:

یو
پی
ڈیٹ
> ادائیگی
سیٹ
last_update
=
اب
()
حد
10
؛

سوال ٹھیک ہے، 10 قطاریں متاثر (0.01 سیکنڈ) قطاریں میچ: 10 تبدیل شدہ: 10 انتباہ: 0

ڈیلیٹ کی طرح ، آپ ایسا کریں گے کیونکہ آپ یا تو چھوٹے حصوں میں آپریشن انجام دینا چاہتے ہیں یا صرف کچھ قطاروں میں ترمیم کرنا چاہتے ہیں۔

یہاں ، آپ دیکھ سکتے ہیں کہ 10 قطاروں کو میچ اور تبدیل کیا گیا تھا۔

پچھلا سوال بھی اپ ڈیٹس کے ایک اہم پہلو کی وضاحت کرتا ہے۔

جیسا کہ آپ نے دیکھا ہے ، اپ ڈیٹس کے دو مراحل ہوتے ہیں: ایک میچنگ مرحلہ ، جہاں قطاریں پائی جاتی ہیں جو کہاں کی شق سے میل کھاتی ہیں ، اور ایک ترمیم کا مرحلہ ، جہاں قطاروں کو تبدیل کرنے کی ضرورت ہوتی ہے انہیں اپ ڈیٹ کیا جاتا ہے۔

شو اور مائی سکل شو کے ساتھ ڈیٹا بیس اور ٹیبلز کی تلاش

ہم پہلے ہی وضاحت کر چکے ہیں کہ آپ ڈیٹا بیس کی ساخت ، اس کے جدولوں اور جدول کالموں کے بارے میں معلومات حاصل کرنے کے لئے شو کمانڈ کا استعمال کیسے کرسکتے ہیں۔

اس سیکشن میں ، ہم سکیلا ڈیٹا بیس کا استعمال کرتے ہوئے مختصر مثالوں کے ساتھ شو بیان کی سب سے عام اقسام کا جائزہ لیں گے۔

مائی ایس کیو شو کمانڈ لائن پروگرام وہی افعال انجام دیتا ہے جو متعدد شو کمانڈ ورژن کرتے ہیں ، لیکن آپ کو مائی ایس کیو ایل کلائنٹ شروع کرنے کی ضرورت کے بغیر۔

شو ڈیٹا بیس کا بیان ان ڈیٹا بیسز کی فہرست دیتا ہے جن تک آپ رسائی حاصل کرسکتے ہیں۔

اگر آپ نے "اینٹیٹی ریلیشن شپ ماڈلنگ مثالوں" میں ہمارے نمونہ ڈیٹا بیس انسٹالیشن کے اقدامات کی پیروی کی ہے اور "بینک ڈیٹا بیس ای آر ماڈل بنانا" میں بینک ماڈل تعینات کیا ہے تو ، آپ کا آؤٹ پٹ مندرجہ ذیل ہونا چاہئے:

>
شاؤ
ڈیٹا بیس
۔

+--------------------+| ڈیٹا بیس |+--------------------+| information_schema |
| bank_model || ملازمین || performance_schema || سکیلا || سیس || دنیا |+--------------------+8 قطاریں سیٹ میں (0.01 سیکنڈ)

یہ وہ ڈیٹا بیس ہیں جن تک آپ یو ایس ای کمانڈ کے ساتھ رسائی حاصل کرسکتے ہیں (باب 4 میں تبادلہ خیال کیا گیا ہے)؛ اگر آپ کے پاس اپنے سرور پر دوسرے ڈیٹا بیس تک رسائی کے استحقاق ہیں تو ، یہ بھی درج کیے جائیں گے۔

آپ صرف ڈیٹا بیس دیکھ سکتے ہیں جس کے لئے آپ کے پاس کچھ مراعات ہیں ، جب تک کہ آپ کے پاس گلوبل شو ڈیٹا بیس استحقاق نہ ہو۔

آپ مائی سکل شو پروگرام کا استعمال کرتے ہوئے کمانڈ لائن سے وہی اثر حاصل کرسکتے ہیں:

$
mysqls -uroot -pmsandbox -h 127.0.0.1 -P 3306

آپ ڈیٹا بیس دکھانے کے لئے لائیک شق شامل کرسکتے ہیں۔

اگر آپ کے پاس بہت سارے ڈیٹا بیس ہیں اور آؤٹ پٹ کے طور پر ایک مختصر فہرست چاہتے ہیں تو یہ مفید ہے۔

مثال کے طور پر ، صرف ڈیٹا بیس دیکھنے کے لئے جن کے نام ایس سے شروع ہوتے ہیں ، چلائیں:

>
ڈیٹا بیس
کی طرح
کا ٪
'
؛

+---------------+| ڈیٹا بیس (s٪) |+---------------+| سکیلا || سیٹ میں |+---------------+2 قطاریں (0.00 سیکنڈ)

لائک بیان کا نحو سلیکٹ میں اس کے استعمال سے ملتا جلتا ہے۔

ڈیٹا بیس بنانے کے لئے استعمال ہونے والے بیان کو دیکھنے کے لئے ، آپ ڈیٹا بیس بنائیں بیان استعمال کرسکتے ہیں ۔

مثال کے طور پر ، یہ دیکھنے کے لئے کہ آپ نے سکیلا کیسے بنایا ، ٹائپ کریں:

mysql
>
و ڈیٹا
بیس
بنائیں
سکیلا بنائیں
۔

1.

قطار *************************** ڈیٹا بیس: سکیلا کریٹ ڈیٹا بیس: ڈیٹا بیس 'سکیلا' /*!40100 ڈیفالٹ کریکٹر ایس ٹی یو ٹی ایف 8 ایم بی 4 کولیٹ utf8mb4_0900_ai_ci */ /*!80016 ڈیفالٹ خفیہ کاری='N' */
1 قطار میں سیٹ (0.00 سیکنڈ)

یہ شاید سب سے کم دلچسپ شو بیان ہے؛ یہ صرف بیان ظاہر کرتا ہے.

تاہم ، نوٹ کریں کہ کچھ اضافی تبصرے شامل ہیں ، / * ! اور */:

40100 ڈیفالٹ کریکٹر سیٹ utf8mb4 clate utf8mb4_0900_ai_ci80016 ڈیفالٹ خفیہ کاری='N'

ان تبصروں میں MySQL کے مخصوص مطلوبہ الفاظ شامل ہیں جو ایسی ہدایات فراہم کرتے ہیں جو دوسرے ڈیٹا بیس پروگراموں کے ذریعہ سمجھنے کا امکان نہیں ہے۔

MySQL کے علاوہ ایک ڈیٹا بیس سرور اس تبصرہ متن کو نظر انداز کرے گا ، لہذا نحو MySQL اور دیگر ڈیٹا بیس سرور سافٹ ویئر دونوں کے ذریعہ قابل استعمال ہے۔

تبصرہ کے آغاز میں اختیاری نمبر MySQL کے کم از کم ورژن کی نشاندہی کرتا ہے جو اس خاص ہدایت پر عمل کرسکتا ہے (مثال کے طور پر، 40100 ورژن 4.01.00 کی نشاندہی کرتا ہے)؛ MySQL کے پرانے ورژن ایسی ہدایات کو نظر انداز کرتے ہیں۔

آپ باب 4 میں ڈیٹا بیس بنانے کے بارے میں سیکھیں گے۔

شو ٹیبلز بیان ڈیٹا بیس میں جدولوں کی فہرست دیتا ہے۔

سکیلا میں میزوں کو چیک کرنے کے لئے، ٹائپ کریں:

>
سکیلا
سے
ٹیبل
دیکھیں
۔

+----------------------------+| Tables_in_sakila |+----------------------------+| اداکار || actor_info || ایڈریس || زمرہ || شہر |
| ملک || گاہک || customer_list || فلم || film_actor || film_category || film_list || film_text || انوینٹری || زبان || nicer_but_slower_film_list || ادائیگی || کرایہ || sales_by_film_category || sales_by_store || عملہ ||

سیٹ میں |+----------------------------+23 قطاریں (0.01 سیکنڈ)

اگر آپ پہلے ہی یو ایس ای سکیلا کمانڈ کے ساتھ سکیلا ڈیٹا بیس منتخب کر چکے ہیں تو ، آپ شارٹ کٹ استعمال کرسکتے ہیں:

>
و
ٹیبلز
۔

آپ مائی ایس کیو شو پروگرام میں ڈیٹا بیس کے نام کی وضاحت کرکے اسی طرح کا نتیجہ حاصل کرسکتے ہیں:

$
mysqlsh -uroot -pmsandbox -h 127.0.0.1 -P 3306 sakla

شو ڈیٹا بیس کی طرح ، آپ ایسے جدول نہیں دیکھ سکتے ہیں جن کے لئے آپ کے پاس استحقاق نہیں ہیں۔

اس کا مطلب یہ ہے کہ آپ ایسے ڈیٹا بیس میں جدول نہیں دیکھ سکتے ہیں جس تک آپ رسائی حاصل نہیں کرسکتے ہیں ، یہاں تک کہ اگر آپ کے پاس شو ڈیٹا بیس عالمی استحقاق ہے۔

شو کالمز کا بیان ایک جدول میں کالموں کی فہرست دیتا ہے۔

مثال کے طور پر، ملک کے کالموں کو چیک کرنے کے لئے، ٹائپ کریں:

>ملک
سے
کالم دکھائیں
۔

1.

فیلڈ *************************** قطار: country_id قسم: چھوٹے سے غیر دستخط شدہ نول: کوئی کلید نہیں: پی آر آئی ڈیفالٹ: نول اضافی: auto_increment*************************** 2.

فیلڈ *************************** قطار: ملک کی قسم: ورچر (50) نول: کوئی کلید نہیں: ڈیفالٹ: نول اضافی: *************************** 3.

فیلڈ *************************** قطار: last_update قسم: ٹائم اسٹیمپ نول: کوئی کلید:ڈیفالٹ: CURRENT_TIMESTAMP اضافی: سیٹ میں CURRENT_TIMESTAMP3 قطاروں کی تازہ کاری پر DEFAULT_GENERATED (0.00 سیکنڈ)

آؤٹ پٹ تمام کالموں کے ناموں ، ان کی اقسام اور سائز کی اطلاع دیتا ہے ، کیا وہ این یو ایل ہوسکتے ہیں ، چاہے وہ کلید کا حصہ ہوں ، ان کی ڈیفالٹ اقدار ، اور کوئی اضافی معلومات۔

باب 4 میں اقسام ، چابیاں ، این یو ایل اقدار ، اور ڈیفالٹس پر مزید تبادلہ خیال کیا گیا ہے۔

اگر آپ نے پہلے ہی یو ایس ای کمانڈ کے ساتھ سکیلا ڈیٹا بیس کا انتخاب نہیں کیا ہے تو ، آپ ٹیبل کے نام سے پہلے ڈیٹا بیس کا نام شامل کرسکتے ہیں ، جیسا کہ سکیلا ڈاٹ ملک میں ہے۔

پچھلے شو بیانات کے برعکس ، اگر آپ کو ٹیبل تک رسائی حاصل ہے تو آپ ہمیشہ تمام کالم کے نام دیکھ سکتے ہیں؛ اس سے کوئی فرق نہیں پڑتا ہے کہ آپ کے پاس تمام کالموں کے لئے مخصوص مراعات نہیں ہیں۔

آپ ڈیٹا بیس اور ٹیبل کے نام کے ساتھ Mysql شو کا استعمال کرکے اسی طرح کا نتیجہ حاصل کرسکتے ہیں:

$
mysqls -uroot -pmsandbox -h 127.0.0.1 -P 3306 sکیلا ملک

آپ شو کریٹ ٹیبل بیان کا استعمال کرتے ہوئے کسی خاص جدول کو بنانے کے لئے استعمال ہونے والا بیان دیکھ سکتے ہیں (ہم باب 4 میں جدول بنانے پر بھی غور کریں گے)۔

کچھ صارفین اس آؤٹ پٹ کو شو کالمز کے مقابلے میں ترجیح دیتے ہیں ، کیونکہ اس میں کریایٹ ٹیبل بیان کی معروف شکل ہے۔

یہاں ملک کی میز کے لئے ایک مثال ہے:

mysql
>
و ٹیبل
ملک
بنائیں
\
G

1.

قطار *************************** ٹیبل: کنٹری کریٹ ٹیبل: ٹیبل 'ملک' بنائیں ('country_id' چھوٹے دستخط شدہ غیر دستخط شدہ AUTO_INCREMENT، 'ملک' ورچر (50) نول نہیں، 'last_update' ٹائم اسٹیمپ نول ڈیفالٹ نہیں CURRENT_TIMESTAMP اپ ڈیٹ CURRENT_TIMESTAMP پر، پرائمری کلید ('country_id')) انجن=انوڈ بی AUTO_INCREMENT=110 ڈیفالٹ چارسیٹ=utf8mb4 کولیٹ=سیٹ میں utf8mb4_0900_ai_ci1 قطار (0.00 سیکنڈ)