توضیح جامع برای عبارت 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
را نشان میدهد.
مثالهای کاربردی:
۱. دستهبندی سنی:
فرض کنید میخواهید در یک جدول customers
، سنی که هر مشتری در آن قرار میگیرد را دستهبندی کنید:
SELECT customer_id, name, age,
CASE
WHEN age < ۱۸ THEN 'کودک'
WHEN age BETWEEN ۱۸ AND ۳۰ THEN 'جوان'
WHEN age BETWEEN ۳۱ AND ۵۰ THEN 'میانسال'
ELSE 'سالمند'
END AS age_group
FROM customers;
در این مثال، برای هر مشتری، ستون جدیدی به نام age_group
ایجاد میشود که سن او را در یکی از گروههای “کودک”، “جوان”، “میانسال” یا “سالمند” دستهبندی میکند.
۲. محاسبه امتیاز امتحان:
فرض کنید میخواهید در یک جدول students
، بر اساس نمره امتحان هر دانشآموز، نمره قبولی او را تعیین کنید:
SELECT student_id, name, score,
CASE
WHEN score >= ۹۰ THEN 'A'
WHEN score >= ۸۰ THEN 'B'
WHEN score >= ۷۰ THEN 'C'
WHEN score >= ۶۰ THEN 'D'
ELSE 'F'
END AS grade
FROM students;
در این مثال، برای هر دانشآموز، ستون جدیدی به نام grade
ایجاد میشود که نمره قبولی او را بر اساس نمره امتحانش نشان میدهد.
۳. جایگزینی مقادیر null:
فرض کنید میخواهید مقادیر null
در یک ستون را با یک مقدار پیشفرض جایگزین کنید:
SELECT product_id, name, price,
CASE WHEN price IS NULL THEN ۰ ELSE price END AS updated_price
FROM products;
در این مثال، برای هر محصول، ستون جدیدی به نام updated_price
ایجاد میشود که قیمت آن محصول را با جایگزینی مقادیر null
با ۰ نشان میدهد.
نکات:
- میتوانید از چندین عبارت
WHEN
در یک عبارتCASE
استفاده کنید. - استفاده از عبارت
ELSE
اختیاری است. - میتوانید از توابع و عبارات پیچیده در داخل شرطها و نتایج استفاده کنید.
- عبارت
CASE
را میتوان در داخل دستوراتSELECT
،WHERE
،HAVING
وORDER BY
استفاده کرد.
مزایای استفاده از عبارت CASE
:
- خوانایی و وضوح کد را افزایش میدهد.
- منطق شرطی را به طور خلاصه و سازمانیافته در یک جا بیان میکند.
- از نوشتن چندین عبارت
IF-THEN-ELSE
تودرتو جلوگیری میکند.
معایب استفاده از عبارت CASE
:
- میتواند در مواردی که تعداد زیادی شرط وجود دارد، پیچیده باشد.
- در برخی از سیستمهای مدیریت پایگاه داده، عملکرد کمی کندتر از عبارات
IF-THEN-ELSE
است.