شق کے ساتھ SQL

Shq K Sat Sql



جب آپ ایس کیو ایل اور ڈیٹا بیس کے سوالات میں گہرے ہوتے ہیں، تو آپ کے سامنے آنے والی سب سے طاقتور اور ناقابل یقین خصوصیات میں سے ایک کامن ٹیبل ایکسپریشنز ہے جسے عام طور پر CTEs کے نام سے جانا جاتا ہے۔

SQL میں، WITH شق کو CTE کے نام سے بھی جانا جاتا ہے۔ یہ ایک طاقتور خصوصیت ہے جو ہمیں استفسار کے اندر عارضی نتائج کے سیٹ بنانے کے قابل بناتی ہے۔ CTEs کا ایک اہم کردار پیچیدہ سوالات کو چھوٹے اور دوبارہ قابل استعمال ذیلی سوالات میں آسان بنانا ہے۔ اس سے کوڈ کو زیادہ پڑھنے کے قابل اور طویل مدت میں برقرار رکھنے میں مدد ملتی ہے۔

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







تقاضے:

مظاہرے کے مقاصد کے لیے، ہم درج ذیل کو استعمال کریں گے:



  1. MySQL ورژن 8.0 اور اس سے اوپر
  2. سکیلا نمونہ ڈیٹا بیس

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



شق کے ساتھ SQL

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





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

اگرچہ آپ کی ضروریات کے لحاظ سے CTE کا نحو تھوڑا سا مختلف ہو سکتا ہے، درج ذیل SQL میں CTE کا بنیادی نحو ظاہر کرتا ہے:



cte_name کے ساتھ (کالم 1، کالم 2، ...) AS (
-- CTE استفسار
منتخب کریں...
سے...
کہاں ...
)
-- اہم سوال
منتخب کریں...
سے...
جوائن کریں cte_name آن...
کہاں ...

ہم WITH کلیدی لفظ کے ساتھ شروع کرتے ہیں جو SQL ڈیٹا بیس کو بتاتا ہے کہ ہم CTE بنانا اور استعمال کرنا چاہتے ہیں۔

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

ہم کالم کے ناموں کی ایک اختیاری فہرست بھی بتاتے ہیں اگر CTE میں کالم کے عرفی نام شامل ہوں۔

اگلا، ہم CTE استفسار کی وضاحت کرتے ہیں۔ اس میں وہ تمام کام یا ڈیٹا ہوتا ہے جسے CTE قوسین کے جوڑے میں بند کر کے انجام دیتا ہے۔

آخر میں، ہم بنیادی سوال کی وضاحت کرتے ہیں جو CTE کا حوالہ دیتی ہے۔

استعمال کی مثال:

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

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

درج ذیل دکھائے گئے CTE پر ایک نظر ڈالیں۔

سب سے زیادہ کرایے کی گنتی والے ٹاپ 10 صارفین کو تلاش کرنے کے لیے SQL کے ساتھ شق کا استعمال:

کسٹمر رینٹل کے ساتھ AS (
c.customer_id، c.first_name، c.last_name، COUNT(r.rental_id) بطور رینٹل_کاؤنٹ منتخب کریں
گاہک سے c
کرایہ پر حاصل کریں c.customer_id = r.customer_id
گروپ بذریعہ c.customer_id، c.first_name، c.last_name
)
منتخب کریں *
کسٹمر رینٹل سے
rental_count DESC کے ذریعہ آرڈر کریں۔
حد 10;

دی گئی مثال میں، ہم WITH کلیدی لفظ کا استعمال کرتے ہوئے ایک نئے CTE کی وضاحت کرتے ہوئے شروع کرتے ہیں اس کے بعد وہ نام جو ہم CTE کو تفویض کرنا چاہتے ہیں۔ اس صورت میں، ہم اسے 'کسٹمر رینٹل' کہتے ہیں۔

CTE باڈی کے اندر، ہم گاہک اور رینٹل ٹیبل میں شامل ہو کر ہر گاہک کے لیے کرائے کی گنتی کا حساب لگاتے ہیں۔

آخر میں، بنیادی سوال میں، ہم CTE سے تمام کالم منتخب کرتے ہیں، رینٹل کی گنتی (نزولی ترتیب) کی بنیاد پر نتائج ترتیب دیتے ہیں، اور آؤٹ پٹ کو صرف اوپر کی 10 قطاروں تک محدود کرتے ہیں۔

یہ ہمیں سب سے زیادہ کرایے والے صارفین کو لانے کی اجازت دیتا ہے جیسا کہ درج ذیل آؤٹ پٹ میں دکھایا گیا ہے:

  ناموں کی ایک جدول تفصیل خود بخود تیار ہو جاتی ہے۔

تکراری CTEs

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

آئیے مثال کے طور پر ایک کیس لیں جہاں ہم درجہ بندی کی تنظیم کو نیویگیٹ کرنا چاہتے ہیں یا درخت کی طرح کی ساخت کی نمائندگی کرنا چاہتے ہیں۔ ہم تکراری CTE بنانے کے لیے WITH RECURSIVE کلیدی لفظ استعمال کر سکتے ہیں۔

چونکہ ایسا کوئی درجہ بندی کا ڈیٹا نہیں ہے جسے ہم سکیلا ڈیٹا بیس میں ایک بار بار آنے والے CTE کو ظاہر کرنے کے لیے استعمال کر سکیں، آئیے ایک بنیادی مثال قائم کرتے ہیں۔

ٹیبل ڈپارٹمنٹ بنائیں (
Department_id INT PRIMARY KEY AUTO_INCREMENT،
Department_name VARCHAR(255) NOT NULL،
parent_department_id INT،
فارن کلید (والدین_محکمہ_آئی ڈی) حوالہ جات (محکمہ_آئی ڈی)
);
محکمہ داخل کریں (محکمہ_نام، والدین_محکمہ_آئی ڈی)
قدریں
('کارپوریٹ'، NULL)،
('فنانس'، 1)،
('HR'، 1)،
('حساب'، 2)
'بھرتی'، 3)
('پے رول'، 4)؛

اس صورت میں، ہمارے پاس کچھ بے ترتیب ڈیٹا کے ساتھ ایک نمونہ 'محکمہ' جدول ہے۔ محکموں کی درجہ بندی کا ڈھانچہ تلاش کرنے کے لیے، ہم مندرجہ ذیل کے طور پر ایک تکراری CTE استعمال کر سکتے ہیں:

ریکورسیو ڈیپارٹمنٹ کے درجہ بندی کے ساتھ (
ڈیپارٹمنٹ_آئی ڈی، ڈیپارٹمنٹ_نام، والدین_محکمہ_آئی ڈی کو منتخب کریں۔
محکمہ سے
جہاں والدین_محکمہ_آئی ڈی NULL ہے۔
تمام یونین
d.department_id، d.department_name، d.parent_department_id منتخب کریں
محکمہ سے ڈی
d.parent_department_id = dh.department_id پر محکمہ کے درجہ بندی میں شامل ہوں
)
منتخب کریں *
محکمہ کے درجہ بندی سے؛

اس صورت میں، تکراری CTE ایسے محکموں سے شروع ہوتا ہے جن کے پاس NULL 'parent_department_id' (روٹ ڈیپارٹمنٹس) ہوتے ہیں اور بار بار چائلڈ ڈیپارٹمنٹس کو دوبارہ حاصل کرتے ہیں۔

نتیجہ

اس ٹیوٹوریل میں، ہم نے SQL ڈیٹا بیس میں سب سے بنیادی اور مفید خصوصیات کے بارے میں سیکھا جیسے کامن ٹیبل ایکسپریشنز یہ سمجھ کر کہ WITH کلیدی لفظ کے ساتھ کیسے کام کیا جائے۔