آموزش دستور IF در SQL Server شرط گذاری و کاربردها

راهنمای جامع دستور IF در SQL Server: شرط‌ها، بلاک‌ها و کاربردهای پیشرفته

دستور **IF در SQL Server** یک عبارت شرطی قدرتمند است که به شما امکان می‌دهد بلاک‌های کد یا دستورات منفرد را تنها در صورتی اجرا کنید که یک شرط خاص صحیح باشد. این دستور در **روال‌های ذخیره‌شده SQL** (Stored Procedures)، توابع و تریگرها کاربرد فراوان دارد و به شما کمک می‌کند منطق برنامه‌نویسی پیچیده‌تری را پیاده‌سازی کنید و **کنترل جریان در SQL** را بهبود بخشید.

ساختار اصلی دستور `IF` شامل یک عبارت بولی (شرط منطقی) است که پس از آن دستور SQL یا یک بلاک دستورات اجرا می‌شود.

IF Boolean_expression { SQL_statement | statement_block }

در اینجا، `Boolean_expression` شرطی است که باید ارزیابی شود و `SQL_statement` یا `statement_block` کدی است که در صورت درست بودن شرط اجرا می‌شود.

برای درک بهتر نحوه کار `IF` در SQL Server، یک سناریو را در نظر بگیرید. می‌خواهیم مقداری را در یک متغیر ذخیره کنیم و سپس بر اساس آن مقدار، پیامی را چاپ کنیم.



DECLARE @MyVariable INT = 10;
IF @MyVariable > 5
    PRINT 'MyVariable is greater than 5.';

در این مثال، چون `MyVariable` (10) بزرگتر از 5 است، عبارت `PRINT` اجرا می‌شود.

#### استفاده از IF همراه با BEGIN و END در SQL Server

هنگامی که نیاز دارید بیش از یک دستور را در بلاک `IF` اجرا کنید، باید از کلمات کلیدی `BEGIN` و `END` استفاده کنید. این ساختار یک **بلاک دستورات SQL** را تعریف می‌کند که به‌طور کامل تحت شرط `IF` اجرا می‌شود. این قابلیت برای **منطق شرطی پیچیده در SQL** ضروری است.

IF Boolean_expression BEGIN { SQL_statement | statement_block } END

این فرمول نشان می‌دهد که اگر `Boolean_expression` صحیح باشد، تمام دستورات بین `BEGIN` و `END` اجرا خواهند شد.

مثال زیر نشان می‌دهد چگونه می‌توان چندین دستور را در یک بلاک `IF` با استفاده از `BEGIN` و `END` گروه‌بندی کرد:



DECLARE @MyVariable INT = 10;
IF @MyVariable > 5
BEGIN
    PRINT 'MyVariable is greater than 5.';
    PRINT 'This is inside the BEGIN...END block.';
END

در این مورد، هر دو عبارت `PRINT` اجرا می‌شوند زیرا `MyVariable` بزرگتر از 5 است.

#### دستور IF ELSE در SQL Server

دستور **IF ELSE در SQL Server** به شما امکان می‌دهد یک مسیر جایگزین برای اجرا تعریف کنید، زمانی که شرط `IF` اولیه نادرست باشد. این ساختار **تصمیم‌گیری دوطرفه در SQL** را فراهم می‌کند و به شما اجازه می‌دهد در هر دو حالت (صحیح یا غلط بودن شرط) واکنش متفاوتی داشته باشید.

IF Boolean_expression { SQL_statement | statement_block } ELSE { SQL_statement | statement_block }

این فرمول نشان می‌دهد که اگر `Boolean_expression` صحیح باشد، بلاک اول اجرا می‌شود؛ در غیر این صورت، بلاک دوم (بعد از `ELSE`) اجرا خواهد شد.

برای مثال، اگر `MyVariable` بزرگتر از 5 نباشد، می‌توانیم پیام متفاوتی نمایش دهیم:



DECLARE @MyVariable INT = 3;
IF @MyVariable > 5
BEGIN
    PRINT 'MyVariable is greater than 5.';
END
ELSE
BEGIN
    PRINT 'MyVariable is NOT greater than 5.';
END

در این حالت، چون 3 بزرگتر از 5 نیست، عبارت `PRINT` در بلاک `ELSE` اجرا می‌شود.

#### دستور IF ELSE IF در SQL Server

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

IF Boolean_expression { SQL_statement | statement_block } ELSE IF Boolean_expression { SQL_statement | statement_block } [ …n ] [ ELSE { SQL_statement | statement_block } ]

این فرمول نشان می‌دهد که SQL Server شرط اول را ارزیابی می‌کند، اگر صحیح بود بلاک آن اجرا می‌شود. در غیر این صورت، به سراغ `ELSE IF` بعدی می‌رود و این روند تا زمانی که یک شرط صحیح پیدا شود یا به بلاک نهایی `ELSE` (در صورت وجود) برسد، ادامه پیدا می‌کند.

بیایید مثالی را برای تخصیص درجه به دانش‌آموزان بر اساس نمره آنها بررسی کنیم:



DECLARE @Score INT = 85;
IF @Score >= 90
    PRINT 'Grade: A';
ELSE IF @Score >= 80
    PRINT 'Grade: B';
ELSE IF @Score >= 70
    PRINT 'Grade: C';
ELSE
    PRINT 'Grade: F';

در این مثال، چون نمره 85 است، شرط دوم (`@Score >= 80`) صحیح بوده و “Grade: B” چاپ می‌شود.

#### دستور IF EXISTS در SQL Server

دستور **IF EXISTS در SQL Server** برای بررسی وجود ردیف‌ها در یک جدول یا نتیجه یک کوئری استفاده می‌شود. این یک روش کارآمد برای **چک کردن وجود داده در SQL** قبل از انجام عملیات دیگر مانند درج (INSERT)، به‌روزرسانی (UPDATE) یا حذف (DELETE) است.

مثالی که وجود یک رکورد خاص را بررسی می‌کند:



IF EXISTS (SELECT 1 FROM Customers WHERE CustomerID = 1)
    PRINT 'Customer with ID 1 exists.';
ELSE
    PRINT 'Customer with ID 1 does NOT exist.';

این کوئری ابتدا بررسی می‌کند که آیا مشتری با `CustomerID` برابر 1 وجود دارد یا خیر. اگر یک ردیف پیدا شود، پیام “Customer with ID 1 exists.” چاپ می‌شود.

#### دستور IF NOT EXISTS در SQL Server

دستور **IF NOT EXISTS در SQL Server** برای بررسی عدم وجود ردیف‌ها در یک جدول یا نتیجه یک کوئری استفاده می‌شود. این دستور به‌ویژه برای **جلوگیری از درج تکراری در SQL** مفید است، جایی که می‌خواهید مطمئن شوید قبل از درج یک رکورد جدید، آن رکورد از قبل وجود نداشته باشد.

مثالی که عدم وجود یک رکورد خاص را بررسی می‌کند:



IF NOT EXISTS (SELECT 1 FROM Products WHERE ProductName = 'New Product')
BEGIN
    INSERT INTO Products (ProductName, Price) VALUES ('New Product', 25.00);
    PRINT 'New Product inserted successfully.';
END
ELSE
BEGIN
    PRINT 'Product "New Product" already exists.';
END

در این مورد، اگر محصولی با نام ‘New Product’ در جدول `Products` وجود نداشته باشد، آن را درج کرده و پیام مربوطه را نمایش می‌دهد.

#### دستور IF IS NULL در SQL Server

دستور **IF IS NULL در SQL Server** برای بررسی اینکه آیا یک ستون یا متغیر حاوی مقدار `NULL` است، به کار می‌رود. این برای **مدیریت مقادیر NULL در SQL** حیاتی است، زیرا مقادیر `NULL` در SQL معنای “ناشناخته” یا “بدون مقدار” دارند و در مقایسه‌های معمولی رفتار متفاوتی دارند.

مثال:



DECLARE @Email VARCHAR(100) = NULL;
IF @Email IS NULL
    PRINT 'Email is NULL.';
ELSE
    PRINT 'Email is NOT NULL.';

در اینجا، چون `Email` با `NULL` مقداردهی شده است، پیام “Email is NULL.” چاپ می‌شود.

#### دستور IF IS NOT NULL در SQL Server

برعکس `IS NULL`، دستور **IF IS NOT NULL در SQL Server** برای بررسی اینکه آیا یک ستون یا متغیر حاوی مقداری به جز `NULL` است، استفاده می‌شود. این برای اطمینان از **وجود داده‌های معتبر در SQL** قبل از پردازش آنها ضروری است.

مثال:



DECLARE @PhoneNumber VARCHAR(20) = '123-456-7890';
IF @PhoneNumber IS NOT NULL
    PRINT 'Phone number is available.';
ELSE
    PRINT 'Phone number is NOT available (NULL).';

در این مثال، `PhoneNumber` دارای یک مقدار است، بنابراین “Phone number is available.” چاپ می‌شود.

#### استفاده از دستور IF با عملگرهای مقایسه‌ای در SQL Server

دستور **IF در SQL Server** به خوبی با انواع **عملگرهای مقایسه‌ای SQL** کار می‌کند. این عملگرها شامل `=` (مساوی)، “ (نامساوی)، `>` (بزرگتر از)، `=` (بزرگتر یا مساوی)، و `<=` (کوچکتر یا مساوی) هستند.

مثال برای استفاده از عملگرهای مقایسه‌ای:



DECLARE @Value1 INT = 20, @Value2 INT = 15;
IF @Value1 > @Value2
    PRINT 'Value1 is greater than Value2.';
IF @Value1 = @Value2
    PRINT 'Value1 is equal to Value2.';
IF @Value1  @Value2
    PRINT 'Value1 is not equal to Value2.';

در این مثال، تنها شرط اول و سوم صحیح خواهند بود.

#### استفاده از دستور IF با عملگرهای منطقی AND و OR در SQL Server

برای ایجاد **شرایط پیچیده‌تر در SQL**، می‌توانید از عملگرهای منطقی `AND` و `OR` در عبارت `Boolean_expression` دستور `IF` استفاده کنید.
* **AND**: هر دو شرط باید صحیح باشند تا کل عبارت صحیح شود.
* **OR**: حداقل یکی از شرط‌ها باید صحیح باشد تا کل عبارت صحیح شود.

مثال استفاده از `AND`:



DECLARE @Age INT = 30, @HasLicense BIT = 1; -- 1 for true, 0 for false
IF @Age >= 18 AND @HasLicense = 1
    PRINT 'Eligible to drive.';
ELSE
    PRINT 'Not eligible to drive.';

در این حالت، چون هر دو شرط (سن بالای 18 و داشتن گواهینامه) صحیح هستند، پیام “Eligible to drive.” نمایش داده می‌شود.

مثال استفاده از `OR`:



DECLARE @IsAdmin BIT = 0, @IsManager BIT = 1;
IF @IsAdmin = 1 OR @IsManager = 1
    PRINT 'User has elevated privileges.';
ELSE
    PRINT 'User has standard privileges.';

در اینجا، چون `IsManager` صحیح است، پیام “User has elevated privileges.” چاپ می‌شود.

#### استفاده از دستور IF با توابع رشته‌ای در SQL Server

می‌توانید از **توابع رشته‌ای SQL** مانند `LEN()`, `LEFT()`, `SUBSTRING()`, `CHARINDEX()` و `PATINDEX()` در عبارت شرطی `IF` استفاده کنید. این قابلیت برای **اعتبارسنجی ورودی‌های رشته‌ای در SQL** یا انجام عملیات بر اساس محتوای متنی بسیار مفید است.

مثال برای بررسی طول یک رشته:



DECLARE @UserName VARCHAR(50) = 'JohnDoe';
IF LEN(@UserName) > 5
    PRINT 'Username is long enough.';
ELSE
    PRINT 'Username is too short.';

در این مثال، چون طول ‘JohnDoe’ برابر 7 است (بزرگتر از 5)، پیام “Username is long enough.” نمایش داده می‌شود.

#### دستور IF تو در تو (Nested IF) در SQL Server

**دستور IF تو در تو در SQL Server** به شما امکان می‌دهد یک دستور `IF` را در داخل دستور `IF` دیگر قرار دهید. این ساختار برای **منطق شرطی چند سطحی در SQL** کاربرد دارد، جایی که نیاز به بررسی شرایط فرعی دارید که تنها پس از برآورده شدن یک شرط اصلی معنا پیدا می‌کنند.

مثال برای شرط‌بندی تو در تو:



DECLARE @ProductCategory VARCHAR(50) = 'Electronics';
DECLARE @Price DECIMAL(10, 2) = 150.00;

IF @ProductCategory = 'Electronics'
BEGIN
    IF @Price > 100.00
        PRINT 'High-priced electronic item.';
    ELSE
        PRINT 'Standard-priced electronic item.';
END
ELSE IF @ProductCategory = 'Books'
BEGIN
    IF @Price > 50.00
        PRINT 'Expensive book.';
    ELSE
        PRINT 'Affordable book.';
END
ELSE
    PRINT 'Other category item.';

در این مثال، ابتدا دسته محصول بررسی می‌شود. اگر ‘Electronics’ باشد، سپس قیمت آن ارزیابی می‌شود. نتیجه، “High-priced electronic item.” خواهد بود.

 

من علی دستجردی‌ام؛ عاشق کار با دیتا، از SQL Server تا بیگ‌دیتا و هوش مصنوعی. دغدغه‌ام کشف ارزش داده‌ها و به‌اشتراک‌گذاری تجربه‌هاست. ✦ رزومه من: alidastjerdi.com ✦

عضویت
منو باخبر کن!!!
guest
نام
ایمیل

0 دیدگاه
Inline Feedbacks
دیدن تمامی کامنتها

فوتر سایت

ورود به سایت

sqlyar

هنوز عضو نیستید؟

ورود به سایت

هنوز تبت نام نکردید ؟