الاختبار الشرطي IF في SQL

من موسوعة حسوب

تستخدم صيغة IF لاختبار شرط معين للتأكّد من تحقّقه أو عدم تحقّقه وإجراء ما يتناسب مع ذلك، وتكون البنية العامة لها بالشكل الآتي:

IF condition THEN statements
[ ELSEIF condition THEN statements
[ ELSEIF condition THEN statements
    ...]]
[ ELSE   statements ]
END IF;

إذ تعبّر الكلمة condition عن الشرط المُختبَر، وكلمة statements عن التعليمات التي ستُجرى أو قد تكون تعابير بدلًا من التعليمات.

ويلاحظ  في محركي PostgreSQL و Oracle أن الكلمة المفتاحية ELSEIF تصبح ELSIF، وفي محرك SQL Server فهي كلمتان منفصلتان أيّ ELSE IF، أما في محرك SQLite فلا يوجد شرط IF ويُستعاض عنه بشرط CASE.

مثال

ليكن الجدول rivers الآتي موجودًا في قاعدة البيانات:

Continent Outflow LengthMiles LengthKm River Serial
South America Atlantic Ocean 4345 6992 Amazon 1
Africa Mediterranean 4258 6853 Nile 2
North America Gulf of Mexico 3902 6275 Mississippi 3
Asia Bohai Sea 3395 5464 Yellow River 4
Africa Atlantic Ocean 2922 4700 Congo 5
Asia Laptev Sea 2736 4400 Lena 6
Africa Gulf of Guinea 2611 4200 Niger 7
Europe Caspian Sea 2266 3645 Volga 8
Asia Andaman Sea 1901 3060 Salween 9

إن تنفيذ استعلام SELECT الآتي:

SELECT Name, Length = 
  IF LengthKm>5000 THEN 'Long'
  ELSEIF LengthKm>3500 THEN 'Medium'
  ELSE 'Short'
  END  
FROM rivers;

سيظهر تقديرًا لطول النهر في عمود Length وذلك بالاعتماد على الشرط المُختبَر في حالات اختبار الشرط IF، لتظهر النتائج الآتية:

Length LengthKm Name
Long 6992 Amazon
Long 6853 Nile
Long 6275 Mississippi
Long 5464 Yellow River
Medium 4700 Congo
Medium 4400 Lena
Medium 4200 Niger
Medium 3645 Volga
Short 3060 Salween

ويمكن تحديد عدد الأنهار الإجمالي مقارنة بالعدد 5 كما في الشيفرة الآتية:

IF   (SELECT COUNT(*) FROM rivers) > 5  
PRINT 'There are more than 5 rivers.'  
ELSE PRINT 'There are 5 or less rivers.' ;

ولدى تنفيذها في محرك SQL Server ستُطبَع العبارة:

There are more than 5 rivers.

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم (باسم ELSE IF) لا (انظر CASE) نعم (باسم ELSIF) نعم (باسم ELSIF) نعم

مصادر