CASE در SQL: شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع 2025)

CASE در SQL: شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع 2025)


در دنیای پایگاه داده‌ها، یکی از مهم‌ترین نیازها امکان شرط‌گذاری و اعمال منطق تصمیم‌گیری در هنگام اجرای کوئری‌ها است. SQL به‌عنوان زبان استاندارد مدیریت داده‌ها این امکان را از طریق عبارت قدرتمند CASE فراهم می‌کند. عبارت CASE به شما کمک می‌کند تا منطق شرطی را مستقیماً در کوئری‌هایتان پیاده‌سازی کنید و نتایج متفاوتی بر اساس شرایط مختلف دریافت کنید. در این مقاله، به‌طور کامل با ساختار CASE در SQL آشنا می‌شویم، انواع آن را بررسی می‌کنیم و با مثال‌های واقعی نشان می‌دهیم چطور می‌توان از این قابلیت برای ساده‌سازی کوئری‌ها استفاده کرد.

CASE در SQL چیست؟

عبارت CASE در SQL مانند دستور IF-ELSE در زبان‌های برنامه‌نویسی عمل می‌کند. به شما این امکان را می‌دهد که چندین شرط را بررسی کنید و بسته به نتیجه هر شرط، خروجی متفاوتی داشته باشید. خروجی CASE می‌تواند یک مقدار متنی، عددی یا حتی یک ستون محاسبه‌شده باشد. این ویژگی به‌ویژه زمانی مفید است که بخواهید داده‌ها را بر اساس شرایط دسته‌بندی کنید یا مقادیر مختلفی را در ستون‌های جدید محاسبه کنید.

ساختار کلی CASE در SQL به شکل زیر است:

CASE
WHEN شرط_۱ THEN نتیجه_۱
WHEN شرط_۲ THEN نتیجه_۲

ELSE نتیجه_پیش‌فرض
END

این ساختار می‌تواند در SELECT، WHERE، ORDER BY و حتی GROUP BY استفاده شود.

انواع CASE در SQL

به‌طور کلی دو نوع CASE در SQL وجود دارد:

  1. CASE ساده (Simple CASE)
    در این حالت، یک مقدار با مقادیر دیگر مقایسه می‌شود و بر اساس نتیجه مقایسه خروجی انتخاب می‌شود. مثال:

    SELECT
    ,ProductName
    CASE CategoryID
    ‘لبنیات’ WHEN 1 THEN
    ‘نوشیدنی’ WHEN 2 THEN
    ‘میوه’ WHEN 3 THEN
    ‘سایر’ ELSE
    END AS CategoryName
    ;FROM Products

    در این مثال، بر اساس مقدار CategoryID نام دسته‌بندی مناسب نمایش داده می‌شود.

  2. CASE جست‌وجویی (Searched CASE)
    در این حالت، به‌جای مقایسه یک مقدار با مقادیر ثابت، از شرط‌های منطقی کامل استفاده می‌کنید. مثال:

    SELECT
    ProductName,
    CASE
    WHEN Price > 100 THEN ‘گران’
    WHEN Price BETWEEN 50 AND 100 THEN ‘متوسط’
    ELSE ‘ارزان’
    END AS PriceLevel
    FROM Products;
    این نوع CASE انعطاف بیشتری دارد چون می‌توان از شرط‌های پیچیده‌تر مانند BETWEEN، LIKE و حتی توابع استفاده کرد.
CASE در SQL شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع)
CASE در SQL شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع)

کاربردهای CASE در کوئری‌ها

1. دسته‌بندی داده‌ها

با CASE می‌توانید مقادیر عددی یا متنی را به دسته‌های مشخص تبدیل کنید تا گزارش‌ها خواناتر شوند.

2. جایگزینی مقادیر NULL

اگر داده‌های شما مقادیر NULL دارد، می‌توانید با CASE آن‌ها را به مقادیر مشخصی تغییر دهید.

SELECT
CustomerName,
CASE
WHEN City IS NULL THEN ‘نامشخص’
ELSE City
END AS CityName
FROM Customers;

3. محاسبات شرطی

CASE به شما امکان می‌دهد محاسبات متفاوتی انجام دهید.

SELECT
EmployeeName,
Salary,
CASE
WHEN Salary >= 5000 THEN Salary * 0.1
ELSE Salary * 0.05
END AS Bonus
FROM Employees;

در این مثال، پاداش کارکنان بر اساس شرط حقوق محاسبه می‌شود.

4. شرط در ORDER BY

CASE را می‌توان در ORDER BY استفاده کرد تا ترتیب مرتب‌سازی داده‌ها بر اساس شرایط خاص تغییر کند.

SELECT ProductName, Stock
FROM Products
ORDER BY
CASE
WHEN Stock = 0 THEN 1
ELSE 0
END, ProductName;

این کوئری محصولاتی که موجودی صفر دارند را در انتهای لیست نمایش می‌دهد.

5. استفاده در GROUP BY

در گزارش‌گیری‌های پیشرفته، می‌توان از CASE برای ایجاد گروه‌بندی‌های سفارشی استفاده کرد.

SELECT
CASE
WHEN Age < 18 THEN ‘زیر ۱۸ سال’
WHEN Age BETWEEN 18 AND 30 THEN ‘۱۸ تا ۳۰ سال’
ELSE ‘بیش از ۳۰ سال’
END AS AgeGroup,
COUNT(*) AS Total
FROM Users
GROUP BY
CASE
WHEN Age < 18 THEN ‘زیر ۱۸ سال’
WHEN Age BETWEEN 18 AND 30 THEN ‘۱۸ تا ۳۰ سال’
ELSE ‘بیش از ۳۰ سال’
END;
CASE در SQL شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع)
CASE در SQL شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع)

نکات مهم در استفاده از CASE

  • همیشه بخش ELSE را در CASE لحاظ کنید تا در صورت عدم تطابق هیچ شرطی، مقدار پیش‌فرض بازگردانده شود.

  • در کوئری‌های پیچیده مراقب تودرتو شدن بیش‌ازحد CASE باشید تا خوانایی کاهش پیدا نکند.

  • CASE می‌تواند داخل توابع تجمعی (Aggregate Functions) نیز استفاده شود. این کار برای محاسبه شرطی داده‌ها بسیار کاربردی است.

  • عملکرد CASE در همه سیستم‌های مدیریت پایگاه داده (MySQL, SQL Server, PostgreSQL, Oracle) تقریباً مشابه است، اما جزئیات ممکن است اندکی متفاوت باشد.

مزایای استفاده از CASE

  • ساده‌سازی کوئری‌ها به‌جای نوشتن چندین کوئری مجزا

  • کاهش نیاز به پردازش داده‌ها در لایه برنامه‌نویسی

  • بهبود خوانایی و نگهداری کدهای SQL

  • قابلیت اعمال منطق پیچیده مستقیماً در سطح پایگاه داده

خطاهای رایج در استفاده از CASE

  • فراموش کردن END در پایان CASE

  • عدم هماهنگی نوع داده در مقادیر THEN و ELSE

  • استفاده بیش‌ازحد از CASE در کوئری‌های پیچیده که باعث کاهش کارایی می‌شود

  • قرار دادن CASE در جایی که سیستم مدیریت پایگاه داده پشتیبانی نمی‌کند (مثلاً برخی نسخه‌های قدیمی‌تر در GROUP BY محدودیت دارند)

CASE در SQL شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع)
CASE در SQL شرط‌گذاری در کوئری‌ها با مثال (راهنمای جامع)

جمع‌بندی

عبارت CASE در SQL ابزاری قدرتمند برای شرط‌گذاری در کوئری‌ها است که می‌تواند به شکل چشمگیری فرآیند تحلیل داده‌ها و تولید گزارش‌ها را بهبود دهد. با استفاده از CASE می‌توان داده‌ها را دسته‌بندی کرد، مقادیر NULL را مدیریت کرد، محاسبات شرطی انجام داد و حتی ترتیب نتایج را تغییر داد. درک درست از CASE و تمرین با مثال‌های واقعی باعث می‌شود کوئری‌های شما هوشمندانه‌تر، بهینه‌تر و خواناتر باشند.

بدون دیدگاه

دیدگاهتان را بنویسید