الاختبار الشرطي 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)
|
نعم |