توضیح جامع برای عبارت CASE در SQL
عبارت CASE در SQL یک ابزار قدرتمند برای دستهبندی دادهها و اعمال منطق شرطی بر روی آنها است. این عبارت به شما امکان میدهد مقادیر مختلف را بر اساس شرایط مختلف ارزیابی و بازگشت کنید.
ساختار کلی:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
اجزاء:
CASE: کلمهکلیدی که شروع عبارتCASEرا نشان میدهد.WHEN: کلمهکلیدی که شرط را معرفی میکند.condition: عبارتی که صحت یا عدم صحت آن بررسی میشود.THEN: کلمهکلیدی که نتیجه مربوط به شرط را معرفی میکند.result: مقداری که در صورت برقراری شرط بازگردانده میشود.ELSE: کلمهکلیدی که نتیجهی پیشفرض را در صورت عدم برقراری هیچ کدام از شرطها معرفی میکند.END: کلمهکلیدی که پایان عبارتCASEرا نشان میدهد.
مثالهای کاربردی:
1. دستهبندی سنی:
فرض کنید میخواهید در یک جدول customers، سنی که هر مشتری در آن قرار میگیرد را دستهبندی کنید:
SELECT customer_id, name, age,
CASE
WHEN age < 18 THEN 'کودک'
WHEN age BETWEEN 18 AND 30 THEN 'جوان'
WHEN age BETWEEN 31 AND 50 THEN 'میانسال'
ELSE 'سالمند'
END AS age_group
FROM customers;
در این مثال، برای هر مشتری، ستون جدیدی به نام age_group ایجاد میشود که سن او را در یکی از گروههای “کودک”، “جوان”، “میانسال” یا “سالمند” دستهبندی میکند.
2. محاسبه امتیاز امتحان:
فرض کنید میخواهید در یک جدول students، بر اساس نمره امتحان هر دانشآموز، نمره قبولی او را تعیین کنید:
SELECT student_id, name, score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'F'
END AS grade
FROM students;
در این مثال، برای هر دانشآموز، ستون جدیدی به نام grade ایجاد میشود که نمره قبولی او را بر اساس نمره امتحانش نشان میدهد.
3. جایگزینی مقادیر null:
فرض کنید میخواهید مقادیر null در یک ستون را با یک مقدار پیشفرض جایگزین کنید:
SELECT product_id, name, price,
CASE WHEN price IS NULL THEN 0 ELSE price END AS updated_price
FROM products;
در این مثال، برای هر محصول، ستون جدیدی به نام updated_price ایجاد میشود که قیمت آن محصول را با جایگزینی مقادیر null با 0 نشان میدهد.
نکات:
- میتوانید از چندین عبارت
WHENدر یک عبارتCASEاستفاده کنید. - استفاده از عبارت
ELSEاختیاری است. - میتوانید از توابع و عبارات پیچیده در داخل شرطها و نتایج استفاده کنید.
- عبارت
CASEرا میتوان در داخل دستوراتSELECT،WHERE،HAVINGوORDER BYاستفاده کرد.
مزایای استفاده از عبارت CASE:
- خوانایی و وضوح کد را افزایش میدهد.
- منطق شرطی را به طور خلاصه و سازمانیافته در یک جا بیان میکند.
- از نوشتن چندین عبارت
IF-THEN-ELSEتودرتو جلوگیری میکند.
معایب استفاده از عبارت CASE:
- میتواند در مواردی که تعداد زیادی شرط وجود دارد، پیچیده باشد.
- در برخی از سیستمهای مدیریت پایگاه داده، عملکرد کمی کندتر از عبارات
IF-THEN-ELSEاست.



