عبارة الشرط IF…ELSE في SQL Server: مثال على تحديد T-SQL

⚡ ملخص ذكي

IF…ELSE هي عبارة تحكم في التدفق في SQL Server تقوم بتشغيل كتلة واحدة من T-SQL عندما يتم تقييم شرط منطقي إلى صحيح، وكتلة بديلة اختيارية عندما يتم تقييم نفس الشرط إلى خطأ.

  • 🧭 المنطق الشرطي: تسمح العبارات الشرطية لـ SQL Server بتشغيل إجراءات T-SQL مختلفة اعتمادًا على ما إذا كان الشرط صحيحًا أم خاطئًا.
  • فروع IF و ELSE: عندما يكون الشرط المنطقي صحيحًا، يتم تشغيل كتلة IF؛ وعندما يكون خاطئًا، يتم تشغيل كتلة ELSE الاختيارية بدلاً من ذلك.
  • 🔢 التعبير المنطقي: يجب أن يكون الشرط تعبيرًا منطقيًا يتم تقييمه إلى صحيح أو خطأ، مثل (1=1) أو مقارنة متغيرة.
  • 🧱 بداية…نهاية الكتل: يجب على الفرع الذي يقوم بتشغيل أكثر من عبارة واحدة أن يغلّف تلك العبارات بين الكلمتين المفتاحيتين BEGIN و END.
  • ELSE اختياري: يمكن لعبارة IF أن تقف بمفردها دون جزء ELSE، لذا فإن الشرط الخاطئ ببساطة لا ينتج عنه أي إجراء.
  • 🔁 الشروط المتداخلة: لا يحتوي SQL Server على كلمة ELSE IF الرئيسية، لذلك تقوم بتضمين عبارة IF…ELSE واحدة داخل أخرى لاختبار عتبات متعددة.

أمثلة على عبارات الشرط IF…ELSE في SQL Server مع استعلامات SELECT في T-SQL

لماذا تحتاج إلى البيانات الشرطية؟

تساعدك العبارات الشرطية في SQL Server على تحديد منطق وإجراءات مختلفة لشروط مختلفة. فهي تتيح لك تنفيذ إجراءات مختلفة بناءً على الشروط المحددة داخل العبارة. في الواقع، تقوم بالعديد من الإجراءات التي تعتمد على نتيجة نشاط أو موقف آخر.

بعض الأمثلة العملية على العبارات الشرطية هي:

  • إذا أمطرت غداً، فسأخطط لرحلة برية.
  • إذا كانت تذاكر الطيران أقل من 400 دولار من مدينتي، فسأذهب في إجازة إلى أوروبا؛ وإلا، فسأفضل وجهة سياحية قريبة.

هنا، يمكنك أن ترى أن أحد الإجراءات، مثل رحلة الطريق المذكورة أعلاه، يعتمد بشكل مشروط على نتيجة نشاط آخر، وهو "ما إذا كانت ستمطر غدًا أم لا". وبالمثل، MS ملقم SQL كما يوفر إمكانية تنفيذ عبارة T-SQL بشكل مشروط.

عبارة IF…ELSE في SQL Server

في لغة MS SQL، تُعدّ عبارة IF…ELSE نوعًا من العبارات الشرطية. يمكن تنفيذ أي عبارة T-SQL شرطيًا باستخدام IF…ELSE. يوضح الشكل أدناه كيفية عمل فرعي IF وELSE في SQL Server:

مخطط انسيابي لعبارة IF…ELSE في SQL Server يوضح فرع IF الصحيح وفرع ELSE الخاطئ

  • إذا تم تقييم الشرط إلى صحيح، فسيتم تنفيذ عبارات T-SQL التي تلي شرط IF في SQL Server.
  • إذا تم تقييم الشرط إلى خطأ، فسيتم تنفيذ عبارات T-SQL التي تلي الكلمة المفتاحية ELSE.
  • بمجرد تنفيذ عبارة IF T-SQL أو عبارة ELSE T-SQL، تستمر عبارات T-SQL الأخرى غير المشروطة في التنفيذ.

بناء جملة وقواعد عبارة IF…ELSE في لغة SQL

بناء الجملة:

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

قواعد:

  • يجب أن يكون الشرط تعبيرًا منطقيًا، أي أن الشرط ينتج عنه قيمة منطقية عند تقييمه.
  • يمكن لعبارة IF…ELSE في لغة SQL أن تتعامل بشكل مشروط مع عبارة T-SQL واحدة أو مجموعة من عبارات T-SQL.
  • يجب أن تبدأ مجموعة العبارات بالكلمة المفتاحية BEGIN وتنتهي بالكلمة المفتاحية END.
  • يساعد استخدام BEGIN و END خادم SQL على تحديد كتلة التعليمات التي يجب تنفيذها وفصلها عن بقية عبارات T-SQL التي لا تشكل جزءًا من كتلة IF…ELSE T-SQL.
  • آخر اختياري.

IF…ELSE مع قيمة عددية فقط في التعبير المنطقي

في هذا المثال الأول، يستخدم التعبير المنطقي قيمًا عددية فقط. انظر إلى الشرط أدناه، وهو صحيح دائمًا لأن 1 يساوي 1.

الحالة: صحيح

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

يؤدي تشغيل الاستعلام مع الشرط الصحيح (1=1) إلى طباعة رسالة فرع IF:

نتيجة تطبيق شرط IF العددي الصحيح، طباعة رسالة IF STATEMENT

الحالة: خطأ

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

في حالة الشرط الخاطئ (1=2)، يتم تشغيل فرع ELSE بدلاً من ذلك:

نتيجة لشرط IF الرقمي الخاطئ، يتم طباعة رسالة ELSE STATEMENT

افترض أن لديك جدولًا باسم 'Guru99' مع عمودين وأربعة صفوف، كما هو موضح أدناه. سنستخدم هذا 'Guruجدول 99 في الأمثلة التالية.

عينة Guruجدول 99 يحتوي على عمود Tutorial_ID وأربعة صفوف من البيانات

IF…ELSE مع متغير في تعبير منطقي

بدلاً من الأرقام الثابتة، يمكن للتعبير المنطقي مقارنة متغير. المثال التالي يُعلن عن متغير عدد صحيح ويختبر قيمته.

الحالة: صحيح

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

لأن قيمة @Course_ID تساوي 4، يتم تشغيل فرع IF ويعيد الصف الذي تكون فيه قيمة Tutorial_ID تساوي 4:

نتيجة الاستعلام تُرجع الصف Tutorial_ID 4 عندما يكون شرط المتغير صحيحًا

الحالة: خطأ

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

الشرط هنا خاطئ، لذا يتم تشغيل فرع ELSE ويعيد كل صف حيث لا يكون Tutorial_ID هو 4:

نتيجة الاستعلام من فرع ELSE تُرجع جميع الصفوف باستثناء Tutorial_ID 4

إذا... وإلا مع بداية... نهاية

عندما يتطلب الفرع تنفيذ أكثر من عبارة واحدة، قم بتضمين العبارات داخل كتلة BEGIN…END. المثال أدناه ينفذ عبارتي SELECT في كل فرع.

الحالة: صحيح

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

بما أن قيمة @Course_ID أقل من أو تساوي 2، فإن كتلة IF تقوم بتشغيل كلا عبارتي SELECT الموجودتين داخل BEGIN…END:

نتيجة تنفيذ كتلة IF لعبارتي SELECT لـ Tutorial_ID 1 و 2

الحالة: خطأ

DECLARE @Course_ID INT = 2

IF (@Course_ID >=3)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

هذه المرة الشرط خاطئ، لذا فإن كتلة ELSE تنفذ عبارتي SELECT الخاصتين بها:

نتيجة تنفيذ كتلة ELSE لعبارتي SELECT للمعرفين Tutorial_ID 3 و 4

عبارة IF بدون ELSE

يمكنك استخدام عبارة IF في لغة SQL بدون جزء ELSE، لأن جزء ELSE اختياري. على سبيل المثال:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

يطبع السطر التالي:

نتيجة صف واحد مطبوعة بواسطة عبارة IF التي لا تحتوي على جزء ELSE

لا يُنتج تنفيذ الشرط الخاطئ أي مخرجات. انظر إلى الاستعلام التالي:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

النتيجة فارغة، كما هو موضح أدناه:

مجموعة نتائج فارغة تنتج عندما يكون شرط IF بدون ELSE خاطئًا

عبارات IF…ELSE المتداخلة

على عكس البعض الآخر لغات البرمجةلا يوفر SQL Server عبارة ELSE IF داخل شرط IF…ELSE. بدلاً من ذلك، يمكنك تضمين شرط IF…ELSE داخل شرط آخر، كما هو موضح أدناه:

 DECLARE @age INT;
SET @age = 60;

IF @age < 18
   PRINT 'underage';
ELSE
BEGIN
   IF @age < 50
      PRINT 'You are below 50';
   ELSE
      PRINT 'Senior';
END;

بالنسبة لعمر 60 عامًا، فإن عبارة IF…ELSE المتداخلة تطبع النتيجة التالية:

نتيجة استخدام عبارة IF…ELSE المتداخلة لطباعة كلمة "كبير السن" لعمر 60 عامًا

  • يقوم الكود بطباعة "أقل من السن القانونية" إذا كانت قيمة @age أقل من 18.
  • وإلا، يتم تنفيذ جزء ELSE. يحتوي جزء ELSE على عبارة IF…ELSE متداخلة.
  • إذا كانت قيمة @age أقل من 50، فسيتم طباعة "عمرك أقل من 50". أما إذا لم يتحقق أي من هذه الشروط، فسيتم طباعة "كبير السن".

الأسئلة الشائعة

تتحكم عبارة IF…ELSE في مسار التنفيذ، حيث تحدد عبارات أو كتل T-SQL التي سيتم تشغيلها. أما عبارة CASE فهي تعبير يُرجع قيمة واحدة داخل استعلام، كما هو الحال في عبارة SELECT أو WHERE. ولا يمكن لعبارة CASE تشغيل عبارات منفصلة.

الدالة IIF() هي اختصار لعبارة CASE، وليست عبارة التحكم في تدفق التعليمات البرمجية IF…ELSE. تُرجع هذه الدالة إحدى قيمتين بناءً على اختبار منطقي، وتُستخدم داخل الاستعلامات. على عكس IF…ELSE، لا تستطيع IIF() تنفيذ عبارات أو كتل T-SQL منفصلة.

لا. عبارة IF…ELSE هي عبارة تحكم في تدفق الاستعلام، لذا لا يمكن استخدامها داخل قائمة SELECT أو شرط WHERE. لإرجاع قيم مشروطة ضمن استعلام، استخدم تعبير CASE أو دالة IIF() بدلاً من ذلك.

اكتب IF EXISTS (SELECT 1 FROM table WHERE condition) متبوعًا بالعبارة المراد تنفيذها. تُرجع EXISTS القيمة true عندما يعثر الاستعلام الفرعي على صف واحد مطابق على الأقل، لذا يتم تنفيذ فرع IF فقط عندما تكون البيانات موجودة.

نعم. تُستخدم عبارة IF…ELSE داخل الإجراءات المخزنة، والمشغلات، والدوال، والدفعات لتفرع المنطق. وبالاقتران مع كتل BEGIN…END، تسمح هذه العبارة للإجراء بتنفيذ عبارات SQL مختلفة بناءً على المعلمات أو نتائج الاستعلام.

تُقيّم عبارة IF…ELSE شرطها مرة واحدة وتُنفّذ الفرع المطابق مرة واحدة فقط. أما حلقة WHILE فتُكرّر كتلة التعليمات طالما بقي الشرط صحيحًا. استخدم IF…ELSE للتفرع وWHILE للتكرار.

نعم. مساعد الطيار جيثب يمكنك إنشاء كتل IF…ELSE، وأغلفة BEGIN…END، وشروط متداخلة من خلال موجه لغة طبيعية. راجع دائمًا الشروط المنطقية المُنشأة ومنطق التفرع قبل تشغيل البرنامج النصي على قاعدة البيانات.

يقوم مساعدو الذكاء الاصطناعي والتعلم الآلي بترجمة القواعد المكتوبة بلغة إنجليزية بسيطة إلى منطق IF…ELSE أو CASE، ويقترحون الفروع المفقودة، ويشيرون إلى الشروط التي لا يمكن أن تكون صحيحة. ويراجع المطور كل اقتراح للتأكد من صحته قبل نشره.

تلخيص هذه التدوينة بـ: