الفرق بين المراجعتين لصفحة: «SQL/if»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط تعديل التصنيفات |
||
| (مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين) | |||
| سطر 8: | سطر 8: | ||
END IF; | END IF; | ||
</syntaxhighlight>إذ تعبّر الكلمة <code>condition</code> عن الشرط المُختبَر، وكلمة <code>statements</code> عن التعليمات التي ستُجرى أو قد تكون | </syntaxhighlight>إذ تعبّر الكلمة <code>condition</code> عن الشرط المُختبَر، وكلمة <code>statements</code> عن التعليمات التي ستُجرى أو قد تكون تعابير بدلًا من التعليمات. | ||
ويلاحظ في محركي PostgreSQL و Oracle أن الكلمة المفتاحية <code>ELSEIF</code> تصبح <code>ELSIF</code>، وفي محرك SQL Server فهي كلمتان منفصلتان أيّ <code>ELSE IF</code>، أما في محرك SQLite فلا يوجد شرط <code>IF</code> ويُستعاض عنه بشرط <code>[[SQL/case|CASE]]</code>. | ويلاحظ في محركي PostgreSQL و Oracle أن الكلمة المفتاحية <code>ELSEIF</code> تصبح <code>ELSIF</code>، وفي محرك SQL Server فهي كلمتان منفصلتان أيّ <code>ELSE IF</code>، أما في محرك SQLite فلا يوجد شرط <code>IF</code> ويُستعاض عنه بشرط <code>[[SQL/case|CASE]]</code>. | ||
| سطر 165: | سطر 165: | ||
* [https://docs.oracle.com/cloud/latest/db112/LNPLS/controlstatements.htm#LNPLS004 توثيق IF في محرك Oracle] | * [https://docs.oracle.com/cloud/latest/db112/LNPLS/controlstatements.htm#LNPLS004 توثيق IF في محرك Oracle] | ||
* [https://docs.microsoft.com/en-us/sql/t-sql/language-elements/else-if-else-transact-sql توثيق IF في محرك SQLServer] | * [https://docs.microsoft.com/en-us/sql/t-sql/language-elements/else-if-else-transact-sql توثيق IF في محرك SQLServer] | ||
[[تصنيف:SQL]] | [[تصنيف:SQL|{{SUBPAGENAME}}]] | ||
[[تصنيف:SQL | [[تصنيف:SQL Control Structure|{{SUBPAGENAME}}]] | ||
المراجعة الحالية بتاريخ 06:50، 12 يناير 2019
تستخدم صيغة 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)
|
نعم |