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