دستور IF در SQL – توضیح به زبان ساده با مثال و کد
«زبان کوئری نویسی ساختاریافته» (Structured Query Language) یا همان SQL، یکی از ابزارهای بنیادین برای تعامل با پایگاههای داده رابطهای است. با استفاده از SQL میتوانیم دادهها را از درون پایگاه داده فراخوانی، مدیریت و سازماندهی کنیم. با استفاده از دستور IF در SQL بر اساس معیارهای خاصی تصمیم میگیریم که با کوئریها چه کرده و مراحل کار خود را چگونه ادامه دهیم. یعنی اینکه با استفاده از این دستور، کوئریهای پویایی میسازیم که با شرایط مختلف در پیش رو برای دادهها، سازگار میشوند. با کمک این کوئریها میتوان قواعد منطقی پیچیده برنامه را به صورت مستقیم در داخل اسکریپتهای SQL پیادهسازی کرد.
در این مطلب از مجله فرادرس با دستور IF در SQL آشنا شدهایم. ابتدا این دستور را معرفی کردیم. سپس سینتکس مربوط به نوشتن آن را نشان داده و با توضیحات لازم را درباره سینتکس بیان کردیم. بعد از آن هم مثالهای مختلفی درباره روشهای استفاده از دستور IF در SQL را به صورت کدنویسی شده نمایش داده و انواع تکنیکهای پیادهسازی بلوکهای IF را بررسی کردهایم.
دستور IF در SQL چیست؟
دستور IF در SQL به برنامه نویسان کمک میکند که کدهای خاصی را به شرط برقرار بودن حالت مشخصی، اجرا کنند. این دستورات مانند عبارت CASE در SQL همراه با شرایط «WHEN» کار میکنند. در صورتی که بخواهیم از شرایط بیشتری استفاده کنیم میتوانیم از چند IF پشت سر هم استفاده کرده و در بخش IF عبارت «ELSE» را هم به کوئری خود بیفزاییم. بخش پیشفرض «ELSE» برای مواقعی به کار برده میشود که هیچکدام از شرطهای مشخص شده برقرار نباشند. تمام بلوکهای شرطی IF باید با عبارت «END» به پایان برسند. این عبارت نشاندهنده انتهای بلوک IF است.
سینتکس دستور IF در SQL
در دستور IF، کوئری SQL عبارتهای مختلف را ارزیابی میکند. اگر در عبارتی شرط مشخص شده برابر با TRUE شود، یعنی اینکه شرط برقرار باشد، کوئری عبارت تعریف شده در آن بلوک IF را اجرا خواهد کرد. در غیر این صورت، عبارتهای نوشته شده در بخش ELSE اجرا خواهند شد.
در کادر زیر کدهای مربوط به سینتکس دستور IF در SQL نمایش داده شدهاند.
روند مراحل کاری دستور IF را در فهرست زیر به صورت قدمبهقدم نوشتهایم.
- هر شرطی که در دستور IF نوشته شده باید مقداری از نوع Boolean برگرداند.
- برای مثال، به عنوان عبارت Boolean میتوانیم از دستور Select در SQL استفاده کنیم. اما تمام عبارت Select و محتویاتش باید درون دو علامت پرانتز باز و بسته محصور شوند.
- در عبارتهای IF میتوان از BEGIN و END برای مشخص کردن حریم بلوک شرطی نیز استفاده کرد.
استفاده از شرط ELSE اختیاری است.
در بخشهای بعدی مطلب به بررسی دستور IF در SQL با استفاده از مثالهای کدنویسی شده پرداختهایم.
آموزش قدم به قدم SQL Server با فرادرس
SQL، ابزار تخصصی است که برای کار بر روی پایگاههای داده رابطهای استفاده میشود. با کمک توابع مهم و کاربردی SQL، مدیران پایگاه داده، تسلط بسیار خوبی بر روی تمام اطلاعات ذخیره شده دارند. یکی از بهترین پایگاههای دادهای که از SQL استفاده میکند، پایگاه داده SQL Server است. این پایگاه داده، در حوزههای آموزشی، صنعتی و تجاری، کاربرد بسیار زیادی دارد. برای کسب مهارت در کار با SQL Server باید فیلمهای آموزشی مربوط به این پایگاه داده پرطرفدار را در فرادرس مشاهده کرده و پابهپای مراحل آموزشی پیش بروید. این دورهها به شکلی هستند که تمام مراحل کار با SQL Server را از سطوح مبتدی تا پیشرفته آموزش میدهند.
فرادرس، یکی از بهترین تولیدکنندگان محتوی آموزشی است که فیلمهای بسیار خوبی را برای یادگیری پایگاه داده SQL Server تولید کرده. در فرادرس برای آموزش SQL Server از مبتدی تا حرفهای، فیلمهای متنوعی تولید شده و فیلمهای بهروزتری نیز دائم در حال تولید است. بنابراین، تمام افراد میتوانند با توجه به سطح علمی خود گزینه مناسب را پیدا کنند. به طور کلی میتوان از کیفیت بالای مطالب مورد تدریس، فیلمهای تهیه شده، هزینه مقرونبهصرفه و عدم وجود محدودیت زمانی برای یادگیری به عنوان مزایای فیلمهای آموزشی فرادرس نام برد.
در فهرست زیر چند مورد از فیلمهای آموزشی را برای مخاطبان محترم معرفی کردهایم. با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی هدایت شده و از فیلمهای بیشتری نیز دیدن کنید.
- فیلم آموزش SQL Server دوره مقدماتی فرادرس
- فیلم آموزش پروژه محور درباره ساخت دیکشنری برای دیتابیس با SQL Server در فرادرس
- فیلم آموزش SQLServer درباره راه اندازی Always On با Listener در اس کیو ال سرور با فرادرس
- فیلم آموزش کوئری نویسی پیشرفته در SQL Server فرادرس
- فیلم آموزش استفاده از جیسون JSON در SQL فرادرس
مثال های استفاده از دستور IF در SQL
در این بخش از مطلب، انواع تکنیکهای پیادهسازی و استفاده از ساختار شرطی دستور IF را در رایجترین سناریوهای ممکن همراه با مثالهای کدنویسی شده نشان دادهایم.
یکی از مهمترین نکات مربوط به استفاده از این دستور، بهکارگیری و توجه به ساختار بلوک BEGIN و END است که این بلوک را نیز در مثالهای آخر مورد بررسی قرار دادهایم.
مثال اول: استفاده از مقدار عددی در عبارت Boolean
در مثال زیر، مقدار عددی را در عبارت Boolean مشخص کردهایم. این مقدار همیشه برابر با TRUE است. از آنجا که شرط نوشته شده در کد زیر، همیشه برقرار است - IF(1 = 1) - عبارت مربوط به دستور IF در خروجی چاپ خواهد شد.
همینطور که در تصویر زیر میبینیم، بعد از اجرای کوئری بالا، خروجی مورد نظر تولید شده و در کنسول پایگاه داده چاپ میشود.
اگر شرط درون عبارت Boolean را تغییر دهیم به نوعی که برابر با FALSE شود، کوئری زیر، عبارت داخل بلوک ELSE را چاپ خواهد کرد.
همینطور که در تصویر زیر میبینید، بعد از اجرای کوئری بالا، عبارت زیر بلوک ELSE انتخاب شده و در کنسول پایگاه داده چاپ میشود.
مثال دوم: دستور IF همراه با متغیری داخل عبارت Boolean
در مثال این بخش، از متغیری در داخل عبارت Boolean استفاده کردهایم. در نتیجه عبارتهای SQL بر اساس برقرار بودن یا نبودن شرط مورد نظر اجرا خواهند شد.
برای مثال، اگر دانشآموزی بیش از ۸۰٪ نمره مورد نیاز در امتحان را کسب کند، قبول شده و در غیر این صورت در آزمون رد خواهد شد. کوئری مربوط به این شرط را در کادر زیر پیادهسازی کردهایم.
بعد از اجرای کوئری بالا، همینطور که در تصویر زیر نشان دادهایم، خروجی مورد نظر تولید شده و در کنسول پایگاه داده، چاپ میشود.
مثال سوم: چندین عبارت IF همراه با متغیری داخل عبارت Boolean
در زمان نوشتن بلوک شرطی IF در SQL میتوانیم از چندین عبارت IF پشت سر هم استفاده کنیم. SQL به ترتیب نوشته شدن دستورها عبارت هر کدام ارزیابی شده و نتیجه نیز اجرا میشود. برای مثال به کدهای نوشته شده در کادر زیر توجه کنید.
- در این مثال، اگر دانشآموزی بیش از ۹۰٪ نمره امتحان را کسب کند، کوئری باید پیغام نوشته شده در بلوک اول IF را در خروجی چاپ کند.
- اگر دانشآموزی بیش از ۸۰٪ نمره آزمون را کسب کرده بود، کوئری زیر، پیغام قرار گرفته در عبارت IF دوم را نمایش میدهد.
- و در صورت کسب نمرهای به غیر از شرایط بالا، کوئری زیر باید پیغام تعبیه شده در بلوک ELSE را چاپ کند.
در مثال بالا، دانشآموز به اندازه 91% نمره قابل اخذ در امتحان را بدست آورده است. در این حالت، دو شرط اول از شرایط تعریف شده در کوئری برآورده شدهاند. در نتیجه در خروجی برنامه، پیغام مربوط به هر دو شرط IF چاپ میشود.
اما مسئله اینجاست که نمیخواهیم کوئری نوشته شده برای بررسی عبارت شرطی، همزمان بلوکهای دو دستور IF مجزا از هم را اجرا کند. بنابراین باید شرطهای خود را به شکل درست و با عبارتهای مناسبی تعریف کنیم.
یکی از راههای بسیار خوب برای مدیریت عبارتهای شرطی در SQL ترکیب آنها با عبارتهایی مانند دستور Like و دستور Where است. این دستورها جزو دستورات مربوط به فیلتر کردن دادهها هستند. به منظور آشنایی با این دستورات میتوانید مطلبهای دستور Where در SQL، از کاربرد تا نحوه استفاده به زبان ساده و دستور Like در SQL، از کاربرد تا نحوه استفاده به زبان ساده را در مجله فرادرس مطالعه کنید.
در تصویر نمایش داده شده پایین میتوان دید که نتیجه شرط IF دوم برابر با TRUE است. اگر نمره دانشآموز بزرگتر یا مساوی 80% بیشینه قابل کسب در امتحان شود یا از 90% این نمره کمتر باشد، این شرط مقدار TRUE برگردانده و عبارت مشخص شده را نمایش میدهد.
در خروجی این کوئری موارد فهرست شده زیر مشاهده میشوند.
- عبارت شرطی IF اول برقرار و پاسخ برابر با TRUE است. در نتیجه پیغام تعبیه شده در این بلوک شرطی، روی خروجی SQL چاپ میشود.
- عبارت شرطی IF دوم برقرار نیست و پاسخ FALSE است. پس پیغام تعریف شده در این بلوک شرطی در خروجی چاپ نخواهد شد.
- کوئری بالا در آخر عبارت ELSE را اجرا کرده و پیغام تعریف شده در این بلوک را چاپ میکند. در این مورد خاص از دو دستور IF در SQL استفاده کردهایم. عبارت IF دوم برابر با FALSE ارزیابی شده است. بنابراین بلوک ELSE متناظر با آن عبارت به شکل اجباری اجرا میشود.
برای تعریف کردن چند دستور IF پشت سر هم باید بسیار با دقت عمل کرد. زیرا ممکن است در صورت استفاده غیر درست از دستور IF در SQL با نتیجه غیر منتظرهای - مانند مورد بالا - روبهرو شویم.
مثال چهارم: دستور IF در SQL بدون عبارت ELSE
در بخشهای بالایی مطلب و بهخصوص بخش سینتکس، بیان کردیم که استفاده از عبارت ELSE در کوئریهای شرطی اختیاری است. در نتیجه میتوانیم از دستور IF در SQL بدون بخش ELSE نیز استفاده کنیم. در این قسمت میخواهیم با کمک مثال سادهای این روش را نیز نشان دهیم.
برای مثال در کد زیر، مقدار عبارت تعریف شده برابر با TRUE ارزیابی میشود. بنابراین باید پیغام مربوط به این بلوک در خروجی چاپ شود.
بعد از اجرای کوئری بالا، همینطور که در تصویر زیر نشان داده شده، خروجی مورد نظر تولید شده و در کنسول پایگاه داده چاپ میشود.
اگر نتیجه عبارت مورد نظر، FALSE ارزیابی شود، توسط بلوک شرطی، هیچ خروجی در این کوئری چاپ نمیشود. برای مدیریت این شرایط، لازم است که از عبارت ELSE استفاده کنیم. در چنین موقعیتی که شرط نوشته شده به نتیجه TRUE نمیرسد، میتوانیم پیغام یا رفتار خاصی را به عنوان پیشفرض تعریف کرده و در خروجی نمایش دهیم.
مثال پنجم: استفاده از عبارت IF برای اجرای اسکریپت های SQL
در مثالهای قبلی، با توجه به اینکه شرطها برقرار میشدند یا نه، پیغامی را در خروجی چاپ میکردیم. اما با توجه به نتیجه شرط، شاید بخواهیم که اسکریپت خاصی را اجرا کنیم.
در مثال زیر، اگر مقدار فروش بیش از 100000000 واحد پولی باشد، با استفاده از دستور Select در SQL، باید رکوردهایی را از جدول SalesOrderDtails انتخاب کرده و در خروجی نمایش داد.
اما اگر مقدار فروش کمتر از 100000000 واحد پولی بود، باید رکوردهای را از جدول SalesOrderHeader برای نمایش در خروجی، انتخاب کنیم.
مثال ششم: دستور IF همراه با مشخص کننده های بلوک BEGIN و END
در دستور IF میتوانیم از عبارتهای مشخص کننده حریم بلوک BEGIN و END استفاده کنیم. وقتی که شرطی برقرار بود، SQL کد تعریف شده درون بلوک BEGIN و END را اجرا میکند.
در تصویر زیر میبینیم که بعد از اجرای کوئری بالا، خروجی مورد نظر تولید شده و در کنسول پایگاه داده چاپ میشود.
همراه با دستور IF میتوان چندین عبارت مختلف را برای اجرا شدن در بلوکهای BEGIN و END مشخص کرد. در کوئری نوشته شده زیر، وقتی که شرط مشخص شده برآورده شد، میخواهیم پیغامی را از دو عبارت PRINT جداگانه چاپ کنیم.
توجه: هر وقت که بلوکی را با استفاده از کلمه کلیدی BEGIN شروع کردیم، متناظر با آن همیشه باید از عبارت END نیز استفاده کنیم.
همینطور که در تصویر زیر میبینیم، بعد از اجرای کوئری بالا، خروجی مورد نظر تولید شده و در کنسول پایگاه داده چاپ میشود.
آموزش کار با انواع پایگاه های داده
نرمافزارهای پایگاه داده متنوعی با استفاده از زبان SQL به ذخیرهسازی و مدیریت دادهها میپردازند. به عنوان مثال میتوان به برنامههایی مانند MySQL و SQLite و PostgreSQL اشاره کرد. برای آموزش کار با پایگاههای دادهی رابطهای و زبان SQL، فیلمها و مطالب خوبی در فرادرس تهیه شدهاند. فرادرس، درباره کار با انواع پایگاههای داده فیلمهای آموزشی خوبی را از سطوح ابتدایی تا حرفهای تهیه کرده است. تمام این فیلمها با هدف آمادهسازی کاربر به منظور ورود به بازار کار، طراحی و منتشر شدهاند. در بخش زیر، چند مورد از فیلمهای آموزشی را فهرست کردهایم.
- فیلم آموزش پایگاه داده MySQL فرادرس
- فیلم آموزش اوراکل، مدیریت بانک اطلاعاتی با Oracle دوره مقدماتی در فرادرس
- فیلم آموزش پایگاه داده SQLite در سی شارپ C# با فرادرس
- فیلم آموزش رایگان پایگاه داده کلیک هاوس ClickHouse دوره مبانی و مقدمات در فرادرس
- فیلم آموزش مقدماتی PostgreSQL برای مدیریت پایگاه داده در فرادرس
برای دیدن فیلمهای آموزشی بیشتر، با کلیک بر روی تصویر زیر میتوانید وارد صفحه مربوط به مجموعه آموزش پایگاه داده در فرادرس شوید.
جمعبندی
در این مطلب از مجله فرادرس، دستور IF در SQL را بررسی کردیم. به میزان گستردهای از این دستور، به خصوص در زمان کار با View-های SQL، استفاده میشود. با استفاده از دستور IF در SQL بر اساس شرایط مشخص شده میتوان کدهایی نوشت تا به صورت بیدرنگ اجرا شوند. وجود ساختارهای شرطی در همه انواع زبانهای برنامه نویسی، از زبانهای سطح ماشین گرفته تا زبانهای مربوط به کوئرینویسی در پایگاههای داده، به امری بدیهی تبدیل شده است. زیرا این ساختارها یکی از قدرتمندترین ابزارهای در دست توسعه دهندگان هستند.
به همین دلیل تصمیم گرفتیم که در این مطلب به بررسی دستور IF در SQL پرداخته و مخاطبان مجله را با این ساختار کوئرینویسی در پایگاههای داده رابطهای آشنا کنیم. در نتیجه بعد از معرفی این عبارت و نمایش سینتکس مورد استفاده برای پیادهسازی آن، رایجترین سناریوهای پیادهسازی دستور IF در SQL را همراه با مثال و راهحلهای کدنویسی شده، نمایش دادهایم.