بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
الدوال في الاستعلامات .
تستخدم العديد من الدوال ضمن طيات جمل الاستعلام ، وهي شائعة الاستخدام ، ومريحة ، وتعيد قيمة وحيدة - لا تعيد جدول - سنتعرف على بعض الدوال مع بعض الأمثلة خلال هذا الدرس .
ولننظر نظرة سريعة إلى الصيغة العامة لاستخدام الدوال والتي تأخذ الشكل التالي :
كود PHP:
SELECT func(colum) FROM table WHERE condition;
تعطينا هذه الدالة متوسط حقل ما ، مثال لحساب متوسط الأعمار في قاعدة البيانات تبعنا نكتب أمراً كالتالي :
كود PHP:
Select AVG(Age) from Rabia;
ولك ان تتخيل ماذا سنفعل لو لم نستخدم هذه الدالة ، كنا سنبحث عن جميع السجلات حيث نجمع ارقام كل سجل ثم ننتقل إلى التالي ثم......... ولكن هكذا - برمجياً - .
أيضاً يمكننا استخدام الدالة بشرط ... فمثلاً لحساب متوسط أعمار الأشخاص الذين لا تزيد أعمارهم عن 60 :
كود PHP:
SELECT AVG(Age) FROM Rabia where age < 60;
نفذ الاستعلام ولو لاحظت لوجدت أن ناتج الدالة يظهر في حقل تحت اسم Expr100أو ما شابه ... لذا قم - إذا كنت تريد - بإعادة تسمية حقل الناتج عن طريق Asكما تعلمنا ذلك سابقاً وبالشكل التالي :
كود PHP:
SELECT AVG(Age) as AVGAGE FROM Rabia WHERE age < 60;
لاحظ أيضاً أن الدالة سوف تتجاهل السجلات الفارغة..
الدوال :
Min : تعطيك الأصغر من بين القيم .
Max :تعطيك الأكبر من بين القيم .
Sum : تعطيك مجموع جميع القيم .
مثال على أكبر عمر في قاعدة البيانات :
كود PHP:
SELECT max(Age) AS mxAGE FROM Rabia;
غير مكان max الدالتين المتبقيتين.. لترى النتائج..
ولا تنسى أن بإمكاننا وضع شرط لعملية الإستعلام .
الدالة : Count
وتعيد هذه الدالة عدد السجلات ولها صورتان تعمل مع أكسيس ... أما الصورة الثالثة فهي لا تعمل على الاكسيس :
الصيغة الأولى : Count(colum) .. وتعيد عدد السجلات التي لم يكن هذا الحقل فارغاً فيها .
الصيغة الثانية : Count(*) .. وتعيد عدد السجلات دون النظر إلى إذا ما كانت فارغة أم لا .
أما الصيغة الثالثة : COUNT(DISTINCT Colum( حيث تقوم بعد السجلات مع تجاهل المكرر منها .
ولنرى مثالاً على الصيغة الثانية :
كود PHP:
Select count(*) From Rabia;
لا تنسى أن بإمكانك وضع شرط لعملية العد .
كانت هذه بعض الدوال البسيطة والاكثر شهرة في TSqlوالآن ، ماذا لو كانت لدينا علاقات ونرغب في العمل عليها ؟
في مثل هذه الحالة ... نريد الحصول على معلومات البطاقة الشخصية الخاصة باسم ما وذلك من Tb_R1 - لاحظ أنه لا يوجد حقل للاسم في الجدول الثاني - .
كود PHP:
SELECT Rabia.Fname, Rabia.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from
FROM Rabia, tb_r1
WHERE Rabia.Number = tb_r1.Number;
دعنا الآن نشرح الكود ونلاحظ الفروق بين هذه الطريقة والطريقة السابقة :
أولاً :نقوم بكتابة اسم الجدول.اسم الحقل وذلك مهم لأننا نتعامل مع أكثر من جدول .
ثانياً :نقوم بكتابة اكثر من جدول بعد عبارة From لأننا نريد النواتج من أكثر من جدول .
ثالثاً : السطر الأخير من جملة الاستعلام هو لكي يعرض المعلومات التي تتشابه أرقامها في الجدولين سوية .
دعنا الآن نجرب مثالاً آخر ... وذلك بالاستعلام عن كافة المعلومات التي تتعلق بالأصدقاء الذين تزيد أعمارهم عن 50 سنة .
كود PHP:
SELECT Rabia.Fname, Rabia.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from
FROM Rabia, tb_r1
WHERE Rabia.Number = tb_r1.Number and Rabia.age >50;
والآن نريد تطبيق امثلة جديدة ، ولكي نبدأ في تطبيق أمثلة هذا الدرس لا بد أن يكون بعض الأصدقاء لديهم سجلات في الجدول الثاني والبعض الآخر لا .
مازال حديثنا عن العلاقات وما يتعلق بها مستمراً..
الدالة : Join
لهذه الدالة ثلاثة أنواع.. وسنتحدث عن كل نوع بشيء من التفصيل.. إليك تلك الأنواع :
النوع الأول : Inner Join
هي الطريقة العادية والتي تحدثنا عنها في الدرس السابق تعطينا النواتج في حال كان شرط العلاقة متحققاً في كلا الجدولين .
بمعنى : جرب أن تحذف بعض سجلات الأصدقاء من الجدول الثاني ، وستجد أن معلوماتهم - حتى الأساسية - لن تظهر .
هذا النوع من الربط يطلق عليه Inner Joinوهو الافتراضي ... ويمكننا كتابته بالشكل التالي للتفريق بين الأنواع المختلفة :
كود PHP:
SELECT Rabia.Fname, Rabia.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from
FROM Rabia inner join tb_r1
on Rabia.Number=tb_r1.Number;
لاحظ أننا استبدلنا Where بـ onكما وضعنا inner join بين اسمي الجدولين .
النوع الثاني : Left Join
في هذا النوع يعرض جميع بيانات الجدول الأول ( على اليسار ) ومن ثم يعرض البيانات المقابلة في الجدول الثاني .
لاحظ في هذا النوع أمرين :
* إذا كانت هناك سجلات ( على اليسار ) لا تقابلها سجلات على اليمين فإن اليسار يعرض ويعرض اليمين فارغاً .
* وإذا كانت هناك سجلات ( على اليمين ) ليس لها مقابل على اليسار فإنها لا تُعرض أبداً .
مثال هذه النوعية :
كود PHP:
SELECT Rabia.Fname, Rabia.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from
FROM Rabia Left JOIN tb_r1 ON Rabia.Number=tb_r1.Number;
النوع الثالث : Right Join
هو النوع العكسي تماماً للعملية السابقة ، وبإختصار هذا مثال عليه :
كود PHP:
SELECT Rabia.Fname, Rabia.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from
FROM Rabia Right JOIN tb_r1 ON Rabia.Number=tb_r1.Number;
*** في النهاية أود أن انبه إلى أنه ما زال هناك الكثير في TSQL ولكن كانت هذه مقدمة لا بأس بها عنها ***
تم بحمد الله.. وانتهى الدرس وبه تنتهي دورة الآكسيس 2003..
ولن نلتقي بالدرس القادم ^_^ ..
تحياتي : أبو ربيع
-------------------------------
المصدر