در این مقاله از مجموعه آموزشهای پیاستور میخواهیم درمورد دستور IF در SQL صحبت کنیم. دستورات شرطی در پایگاه داده همانند زبانهای برنامه نویسی برای اعمال شرایط مختلف و انجام عملیات بر اساس آنها استفاده میشوند. دستور IF در SQL یکی از ابزارهای مهم برای تصمیمگیری در کوئریها و مدیریت دادهها است. این دستور به شما این امکان را میدهد که بر اساس یک شرط خاص، دستوراتی را اجرا کنید و نتیجه مورد نظر خود را به دست آورید.
مقدمه
SQL، مخفف عبارت Structured Query Language، یکی از ابزارهای اصلی برای مدیریت پایگاههای داده رابطهای است. این زبان به کاربران اجازه میدهد دادهها را بازیابی، ویرایش، یا مدیریت کنند. از سال ۱۹۸۶، SQL بهعنوان زبان استاندارد برای مدیریت پایگاههای داده توسط مؤسسه استانداردهای ملی آمریکا (ANSI) پذیرفته شد و یک سال بعد نیز بخشی از استانداردهای سازمان بینالمللی استانداردسازی (ISO) گردید. دستورات SQL نقش کلیدی در تعامل با پایگاههای دادهای مانند Oracle، Microsoft SQL Server و MySQL ایفا میکند.
یکی از قابلیتهای برجسته SQL استفاده از دستورات شرطی برای تصمیمگیریهای منطقی است. این دستورات به کاربران امکان میدهد که بسته به شرایط مختلف، اقدامات متفاوتی انجام دهند. از میان دستورات شرطی، IF و IF ELSE از پراستفادهترین موارد هستند. در این مقاله، به بررسی نحوه عملکرد این دستورات شرطی پرداخته و نمونههایی کاربردی ارائه میدهیم.
دستورات شرطی در SQL
دستورات شرطی در SQL ابزاری برای اعمال منطق برنامهنویسی در پایگاه داده هستند. این دستورات به کاربران اجازه میدهند عملیاتهای مختلفی را بسته به شرایط خاص اجرا کنند. به عبارت سادهتر، شما میتوانید رفتار پایگاه داده را براساس اینکه یک شرط خاص برقرار است یا خیر، تنظیم کنید. این قابلیت برای مدیریت سناریوهای پیچیده و تصمیمگیریهای چندمرحلهای در دادهها بسیار کاربردی است.
در SQL، دستورات شرطی IF به سه دسته اصلی تقسیم میشوند: مهمترین آنها IF و IF ELSE است؛ دستور IF در SQL زمانی استفاده میشود که تنها یک شرط برای بررسی وجود دارد. از طرف دیگر، IF ELSE امکان تعریف چندین شرط را فراهم میکند. همچنین، دستور ELSE IF به کاربر اجازه میدهد چندین شرط متوالی را بررسی کند و در صورت برقرار بودن هر کدام، عمل خاصی را اجرا کند. این دستورات برای انجام وظایفی مانند اعتبارسنجی دادهها، گزارشگیری، و مدیریت خطاها بسیار مفید هستند.
دستور IF در SQL
دستور IF در SQL برای بررسی یک شرط و انجام عملیات بر اساس نتیجه آن استفاده میشود. این دستور یکی از ابزارهای اصلی در زبان SQL برای ایجاد ساختارهای منطقی و شرطی است که به پایگاه داده امکان میدهد تا تصمیمگیریها و رفتارهای مختلفی بر اساس شرایط مختلف انجام دهد.
وقتی که یک شرط بررسی میشود، اگر این شرط درست (True) باشد، دستوراتی که درون بلوک BEGIN…END قرار دارند، اجرا میشوند. این دستور به ما اجازه میدهد که در صورت برقراری شرایط خاص، عملیات مختلفی را انجام دهیم. نحو کلی دستور IF به صورت زیر است:
IF (شرط) BEGIN دستورات اگر شرط صحیح باشد; END
این سادهترین حالت شرطی است و برای بررسی یک شرط استفاده میشود. توضیحات کد به صورت زیر است:
- شرط: این قسمت میتواند هر نوع شرایطی باشد که بررسی میشود. این شرایط میتواند مقایسهای مانند برابر بودن، بیشتر یا کمتر بودن، یا حتی بررسی وجود رکورد خاصی در پایگاه داده باشد.
- BEGIN…END: این بلوک به شما اجازه میدهد که چندین دستور SQL را به طور همزمان در صورت درست بودن شرط اجرا کنید. در صورتی که شرط برقرار نباشد، هیچیک از دستورات داخل بلوک اجرا نخواهند شد.
دستور IF با فلوچارت
فلوچارت دستور IF در SQL زمانی که از ELSE استفاده نمیشود، بهصورت ساده و خطی عمل میکند. در این حالت، تنها یک شرط وجود دارد که باید بررسی شود و در صورتی که آن شرط برقرار باشد، دستورات مربوطه اجرا میشوند. در ادامه، فلوچارت این دستور آورده شده است:
در این حالت، هیچکدام از دستورات ELSE یا ELSE IF بررسی نمیشوند. به عبارت دیگر، تنها در صورتی که شرط وارد شده درست باشد، دستورات موردنظر اجرا میشوند و در غیر این صورت هیچ اقدامی صورت نمیگیرد.
مثال برای دستور IF در SQL
بیایید یک مثال را مشاهده کنیم تا دستور IF را بدون بلوک ELSE درک کنیم. مثال زیر نتیجه را زمانی نمایش میدهد که شرط برقرار باشد. در غیر این صورت، کنترل برنامه به دستور بعد از کلمه کلیدی END منتقل میشود، اگر وجود داشته باشد. در این مثال هدف کد این است که بررسی کند آیا مقدار متغیر Marks (که در اینجا برابر با ۶۵ است) از حد خاصی (در اینجا ۴۵) بیشتر یا برابر است یا خیر، و بر اساس آن پیام خاصی را چاپ کند.
DECLARE @Marks INT = 65 ; IF @marks >= 45 BEGIN PRINT 'Congratulations! You pass the Examination'; END
خروجی دستور به صورت زیر خواهد بود:
در دستور IF در SQL اگر شرط صحیح نباشد و دستورات داخل بلوک BEGIN…END اجرا نشود (و پس از دستور END کدی نداشته باشیم)، تنها با پیغام زیر مواجه خواهید شد. برای تنظیم خروجی پیشفرض باید دستور IF را به شکل IF ELSE استفاده کنیم که در ادامه توضیح این نوع دستور شرطی را خواهیم داد.
دستور IF ELSE در SQL
در IF ELSE، برخلاف دستور IF در SQL، در صورتی که شرط برقرار نباشد (False)، میتوان از بلوک ELSE برای اجرای دستورات جایگزین استفاده کرد. این ساختار بسیار شبیه به دستورات شرطی در زبانهای برنامهنویسی است و کار با آن ساده و قابلدرک است. این دستور معمولاً در رویههای ذخیرهشده (Stored Procedures) یا توابع به کار میرود.
نحو کلی دستور IF ELSE به صورت زیر است:
IF (شرط) BEGIN دستورات اگر شرط صحیح باشد; END ELSE BEGIN دستورات اگر شرط نادرست باشد; END
- اگر شرط True باشد، دستورات بلوک If اجرا میشوند.
- اگر شرط False باشد، دستورات بلوک Else اجرا میشوند.
در این ساختار، شرط میتواند هر عبارت منطقی یا محاسباتی باشد. این انعطافپذیری، IF ELSE را به یکی از ابزارهای اصلی برای تصمیمگیری در SQL تبدیل کرده است.
دستور IF ELSE با فلوچارت
دستور IF ELSE در SQL هر شرط یا عبارت تست را بهعنوان آرگومان قبول میکند. زمانی که شرط یا عبارت در دستور IF در SQL برقرار باشد (True)، دستورات True اجرا میشوند. اما وقتی شرط تست برقرار نباشد (False)، دستورات False یا همان ELSE اجرا میشوند. در ادامه، فلوچارت دستور If Else در SQL Server برای درک بهتر ارائه شده است:
وقتی شرط صحیح باشد، ابتدا Statement 1 اجرا شده و سپس Statement N اجرا میشود. وقتی شرط نادرست باشد، ابتدا Statement 2 اجرا شده و سپس Statement N ادامه پیدا میکند.
مثال برای دستور IF ELSE در SQL
برای درک بهتر نحوه عملکرد دستور IF ELSE، به مثال زیر توجه کنید. مثال قبل (دستور IF در SQL) را به خاطر دارید؟ در این مثال، وقتی شرط IF برقرار باشد، پیغام “Congratulations You pass the Examination” نمایش داده میشود. در غیر این صورت، پیغام “You are Failed! Better Luck Next Time” نمایش داده خواهد شد.
DECLARE @Marks INT; SET @Marks = 65; IF @marks < 45 BEGIN PRINT 'Congratulations! You pass the Examination'; END ELSE BEGIN PRINT 'You are Failed! Better Luck Next Time'; END
در اینجا، متغیر نمره برابر ۶۵ است و شرط (۴۵ > 65) برقرار نیست. بنابراین، پیغام داخل بلوک ELSE نمایش داده میشود:
حال اگر شرط را برعکس کنیم (۴۵ < 65) شرط برقرار میشود و پیغام داخل بلوک IF نمایش داده میشود:
مثال برای دستور IF ELSE تو در تو
برخلاف بسیاری از زبانهای برنامهنویسی که در آنها دستورات شرطی تنها بهطور مستقل از هم اجرا میشوند، در SQL Server میتوانیم دستور IF ELSE را در داخل دستور IF ELSE دیگر قرار دهیم. این قابلیت به ما این امکان را میدهد که منطقهای پیچیدهتری را پیادهسازی کنیم و چندین شرط را بهطور تو در تو بررسی کنیم.
استفاده از دستورات IF ELSE تو در تو میتواند در مواقعی که نیاز داریم بررسیهای مختلف را بهصورت متوالی انجام دهیم، بسیار مفید باشد. بهعنوان مثال، میتوانیم بررسی کنیم که آیا یک مقدار خاص در یک جدول وجود دارد و سپس بسته به نتیجه آن بررسی، شرایط اضافیتری را برای انجام عملیاتهای مختلف در نظر بگیریم.
این نوع ساختار شرطی تو در تو بهویژه در مواقعی که نیاز به تصمیمگیریهای پیچیده بر اساس چندین پارامتر یا داده داریم، بسیار کاربردی است. به کمک این قابلیت دستور IF در SQL میتوانیم سیستمهای پیچیدهتری برای اعتبارسنجی دادهها، محاسبات و گزارشدهی در SQL ایجاد کنیم. مثال زیر را در نظر بگیرید:
DECLARE @age INT; SET @age = 6; IF @age < 18 PRINT 'You are underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'You are senior cetizen'; END
در این مثال، ما قصد داریم بررسی کنیم که آیا سن فرد کمتر از حد قانونی، کمتر از ۵۰ سال یا سنین بالاتر از ۵۰ سال است، بهصورت زیر:
- اگر مقدار متغیر age کمتر از ۱۸ باشد، پیامی با عنوان “You are underage” چاپ میشود.
- اگر شرط اول برقرار نباشد (FALSE)، بخش ELSE اجرا خواهد شد که شامل یک دستور IF ELSE تو در تو است.
- اگر مقدار متغیر age کمتر از ۵۰ باشد، پیامی با عنوان “You are below 50” چاپ خواهد شد.
- در نهایت، اگر هیچکدام از شرایط برقرار نباشند، پیامی با عنوان “You are senior cetizen” چاپ خواهد شد.
دستور ELSE IF در SQL
دستور ELSE IF در SQL زمانی کاربرد دارد که بخواهید چندین شرط را بهطور متوالی بررسی کنید و بر اساس نتیجه هر کدام از این شرایط، عملیاتهای مختلفی را انجام دهید. این دستور در واقع یک گسترش از دستور IF ELSE است و به شما این امکان را میدهد که به جای داشتن تنها دو گزینه (شرط درست یا نادرست)، گزینههای بیشتری را برای تصمیمگیری در نظر بگیرید.
تفاوت این دستور با IF Else در این است که دستور IF Else فقط زمانی اجرا میشود که شرط True یا False باشد. اما در شرایط واقعی، ممکن است بیش از دو شرط وجود داشته باشد. در چنین مواردی از Else If استفاده میشود.
دستور ELSE IF به شما این امکان را میدهد که بعد از بررسی اولین شرط (که همان دستور IF در SQL است)، چندین شرط دیگر را به ترتیب بررسی کنید. در صورتی که هرکدام از شرایط برقرار باشد، دستورات مرتبط با آن شرط اجرا خواهند شد. این ویژگی به شما اجازه میدهد که در برنامههای پیچیده، مجموعهای از شرایط مختلف را بدون نیاز به استفاده از دستورات تو در تو و با ساختار سادهتر بررسی کنید.
نحو کلی دستور ELSE IF به صورت زیر است:
IF (شرط ۱) BEGIN دستورات اگر شرط صحیح باشد; END ELSE IF (شرط ۲) BEGIN دستورات اگر شرط صحیح باشد; END ELSE BEGIN دستورات پیشفرض اگر همه شرایط نادرست باشند; END
- ابتدا شرط ۱ بررسی میشود و در صورتی که True باشد، دستورات مربوط به آن اجرا میشود.
- اگر شرط ۱ برقرار نباشد، شرط ۲ بررسی میشود و این روند ادامه پیدا میکند.
- اگر هیچکدام از شرایط برقرار نباشند، بخش ELSE اجرا میشود که دستورات پیشفرض را شامل میشود.
استفاده از ELSE IF باعث میشود که کد شما تمیزتر و خواناتر باشد، زیرا به جای استفاده از چندین دستور IF ELSE تو در تو، میتوانید از یک ساختار سادهتر برای بررسی شرایط مختلف استفاده کنید.
دستور ELSE IF با فلوچارت
هنگام استفاده از دستور Else If در SQL، ابتدا شرط دستور IF در SQL بررسی میشود، و اگر آن شرایط برقرار نباشد، سپس دستورات Else If بررسی میشوند. اگر هیچکدام از شرایط برقرار نباشند، دستور Else (در صورتی که موجود باشد) اجرا میشود. فلوچارت زیر برای درک بهتر دستور Else If در SQL Server ارائه شده است:
وقتی شرط ۱ برقرار باشد (True)، دستور مربوط به Statement 1 اجرا میشود و سپس Statement N ادامه پیدا میکند. اگر شرط ۱ برقرار نباشد (False)، بررسی به شرط ۲ منتقل میشود. اگر شرط ۲ برقرار باشد (True)، دستور مربوط به Statement 2 اجرا شده و سپس Statement N ادامه مییابد.
اگر شرط ۲ برقرار نباشد (False)، بررسی به شرط ۳ منتقل میشود. اگر شرط ۳ برقرار باشد (True)، دستور مربوط به Statement 3 اجرا شده و سپس Statement N ادامه پیدا میکند. اگر شرط ۳ نیز برقرار نباشد، بررسی به شرط N منتقل میشود و این روند ادامه مییابد تا یکی از شروط True باشد.
اگر هیچکدام از شروط برقرار نباشند (False)، دستورات پیشفرض (Default Statement) اجرا میشوند و در ادامه Statement N نیز اجرا خواهد شد.
مثال برای دستور ELSE IF در SQL
در این مثال، میخواهیم با استفاده از دستور Else If محاسبه کنیم که آیا فرد برای دریافت بورسیه واجد شرایط است یا خیر. به دستورات زیر توجه کنید:
DECLARE @Total_Marks INT = 940 ; IF @Total_Marks > = 900 BEGIN PRINT ' Congratulations '; PRINT ' You are eligible for Full Scholarship '; END ELSE IF @Total_Marks > = 800 BEGIN PRINT ' Congratulations '; PRINT ' You are eligible for 50 Percent Scholarship '; END ELSE IF @Total_Marks > = 750 BEGIN PRINT ' Congratulations '; PRINT ' You are eligible for 10 Percent Scholarship '; END ELSE BEGIN PRINT ' You are Not eligible for Scholarship '; PRINT ' We are really Sorry for You '; END
مقادیر ۹۰۰، ۸۰۰ و ۷۵۰ در این دستور SQL به عنوان آستانههای نمره برای تعیین نوع بورسیه در نظر گرفته شدهاند. این مقادیر بهطور خاص برای مقایسه نمره کل (Total_Marks) استفاده میشوند تا وضعیت بورسیه مشخص شود. به عبارت دیگر، این مقادیر نمایانگر حداقل نمرههایی هستند که برای دریافت انواع مختلف بورسیه باید کسب شود.
در توضیح دقیقتر:
- ۹۰۰: این مقدار به عنوان حداقل نمره برای دریافت بورسیه کامل در نظر گرفته شده است. اگر نمره کل برابر یا بیشتر از ۹۰۰ باشد، فرد واجد شرایط بورسیه کامل خواهد بود.
- ۸۰۰: این مقدار به عنوان حداقل نمره برای دریافت بورسیه ۵۰ درصد است. اگر نمره فرد بین ۸۰۰ و ۸۹۹ باشد (یعنی کمتر از ۹۰۰ و بیشتر یا برابر با ۸۰۰)، فرد واجد شرایط بورسیه ۵۰ درصد خواهد بود.
- ۷۵۰: این مقدار به عنوان حداقل نمره برای دریافت بورسیه ۱۰ درصد است. اگر نمره فرد بین ۷۵۰ و ۷۹۹ باشد، فرد برای بورسیه ۱۰ درصد واجد شرایط خواهد بود.
- کمتر از ۷۵۰: در صورتی که نمره فرد کمتر از ۷۵۰ باشد، هیچگونه بورسیهای به او تعلق نمیگیرد.
حال بیایید برای حالات مختلف مقدار اولیه Total_Marks را تغییر دهیم. ابتدا مقدار اولیه ۹۴۰ در نظر میگیریم. این به این معنی است که اولین شرط IF برقرار است (TRUE)، به همین دلیل پیغام داخل دستور IF در SQL بهعنوان خروجی نمایش داده میشود.
حال میخواهیم مقدار Total_Marks را از ۹۴۰ به ۸۲۰ تغییر دهیم تا مثال دستور Else If را نشان دهیم. در اینجا، اولین شرط دستور IF در SQL برقرار نخواهد بود (زیرا مقدار کمتر از ۹۰۰ است)، بنابراین سیستم شرط ELSE IF (Total_Marks >= 800) را بررسی میکند که برقرار است (TRUE). بنابراین، دستورات داخل این بلوک نمایش داده میشود. اگرچه شرط ELSE IF (Total_Marks >= 750) نیز برقرار است، اما این شرط بررسی نخواهد شد، زیرا دستور Else If بهطور ترتیبی عمل میکند و پس از یافتن شرط درست، دستورات آن بلوک اجرا میشود و شرایط بعدی بررسی نخواهند شد.
حال میخواهیم مقدار Total_Marks را از ۸۲۰ به ۷۶۰ تغییر دهیم، به این معنی که اولین شرط دستور IF در SQL و شرط ELSE IF (Total_Marks >= 800) هر دو رد خواهند شد. بنابراین، سیستم شرط ELSE IF (Total_Marks >= 750) را بررسی میکند که برقرار است (TRUE)، بنابراین دستورات داخل این بلوک چاپ خواهند شد.
در نهایت میخواهیم مقدار Total_Marks را به ۷۳۵ تغییر دهیم. به این معنی که تمامی شرایط IF و Else If رد خواهند شد. بنابراین، دستورات داخل بلوک ELSE اجرا میشوند و چاپ خواهند شد.
نتیجه گیری
با استفاده از دستور IF میتوانیم شرایط مختلفی را برای اجرای کوئریها یا تغییرات در دادهها تعیین کنیم، که این امر باعث افزایش انعطافپذیری و کارایی پایگاه داده میشود. در مجموع، استفاده بهینه از دستور IF در SQL به ما کمک میکند تا فرآیندهای پیچیدهتر را بهسادگی پیادهسازی کرده و کنترل دقیقی بر روی دادهها و عملیات مختلف داشته باشیم.