منتدى رياض الجنة - Riad Al-Ganah

منتدى رياض الجنة - Riad Al-Ganah (https://montada.khaledbelal.com/index.php)
-   دورة Microsoft Access 2003 من منتدى قريتي (https://montada.khaledbelal.com/forumdisplay.php?f=83)
-   -   الدرس الثاني عشر والأخير الجزء الرابع - لغة تقنية الاستعلامات - الدوال في الاستعلامات - دورة Microsoft Access 2003 (https://montada.khaledbelal.com/showthread.php?t=894)

khaledbelal 03-30-2010 10:26 PM

الدرس الثاني عشر والأخير الجزء الرابع - لغة تقنية الاستعلامات - الدوال في الاستعلامات - دورة Microsoft Access 2003
 

بسم الله الرحمن الرحيم


السلام عليكم ورحمة الله وبركاته


الدوال في الاستعلامات .

تستخدم العديد من الدوال ضمن طيات جمل الاستعلام ، وهي شائعة الاستخدام ، ومريحة ، وتعيد قيمة وحيدة - لا تعيد جدول - سنتعرف على بعض الدوال مع بعض الأمثلة خلال هذا الدرس .

ولننظر نظرة سريعة إلى الصيغة العامة لاستخدام الدوال والتي تأخذ الشكل التالي :

كود PHP:

     SELECT func(columFROM table WHERE condition



الدالة :AVG


تعطينا هذه الدالة متوسط حقل ما ، مثال لحساب متوسط الأعمار في قاعدة البيانات تبعنا نكتب أمراً كالتالي :

كود PHP:

     Select  AVG(Agefrom Rabia



ولك ان تتخيل ماذا سنفعل لو لم نستخدم هذه الدالة ، كنا سنبحث عن جميع السجلات حيث نجمع ارقام كل سجل ثم ننتقل إلى التالي ثم......... ولكن هكذا - برمجياً - .

أيضاً يمكننا استخدام الدالة بشرط ... فمثلاً لحساب متوسط أعمار الأشخاص الذين لا تزيد أعمارهم عن 60 :

كود PHP:

     SELECT AVG(AgeFROM 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.FnameRabia.lnameTb_R1.passporttb_r1.bclass,  tb_r1.from
FROM Rabia
tb_r1
WHERE Rabia
.Number =  tb_r1.Number




دعنا الآن نشرح الكود ونلاحظ الفروق بين هذه الطريقة والطريقة السابقة :

أولاً :نقوم بكتابة اسم الجدول.اسم الحقل وذلك مهم لأننا نتعامل مع أكثر من جدول .

ثانياً :نقوم بكتابة اكثر من جدول بعد عبارة From لأننا نريد النواتج من أكثر من جدول .

ثالثاً : السطر الأخير من جملة الاستعلام هو لكي يعرض المعلومات التي تتشابه أرقامها في الجدولين سوية .

دعنا الآن نجرب مثالاً آخر ... وذلك بالاستعلام عن كافة المعلومات التي تتعلق بالأصدقاء الذين تزيد أعمارهم عن 50 سنة .

كود PHP:

     SELECT Rabia.FnameRabia.lnameTb_R1.passport,  tb_r1.bclasstb_r1.from
FROM Rabia
tb_r1
WHERE Rabia
.Number =  tb_r1.Number and Rabia.age >50



والآن نريد تطبيق امثلة جديدة ، ولكي نبدأ في تطبيق أمثلة هذا الدرس لا بد أن يكون بعض الأصدقاء لديهم سجلات في الجدول الثاني والبعض الآخر لا .

مازال حديثنا عن العلاقات وما يتعلق بها مستمراً..


الدالة : Join

لهذه الدالة ثلاثة أنواع.. وسنتحدث عن كل نوع بشيء من التفصيل.. إليك تلك الأنواع :


النوع الأول : Inner Join

هي الطريقة العادية والتي تحدثنا عنها في الدرس السابق تعطينا النواتج في حال كان شرط العلاقة متحققاً في كلا الجدولين .
بمعنى : جرب أن تحذف بعض سجلات الأصدقاء من الجدول الثاني ، وستجد أن معلوماتهم - حتى الأساسية - لن تظهر .
هذا النوع من الربط يطلق عليه Inner Joinوهو الافتراضي ... ويمكننا كتابته بالشكل التالي للتفريق بين الأنواع المختلفة :

كود PHP:

     SELECT Rabia.FnameRabia.lnameTb_R1.passporttb_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.FnameRabia.lnameTb_R1.passport,  tb_r1.bclasstb_r1.from
FROM Rabia Left JOIN tb_r1 ON  Rabia
.Number=tb_r1.Number




النوع الثالث : Right Join

هو النوع العكسي تماماً للعملية السابقة ، وبإختصار هذا مثال عليه :

كود PHP:

     SELECT  Rabia.FnameRabia.lnameTb_R1.passporttb_r1.bclasstb_r1.from
FROM Rabia  Right JOIN tb_r1 ON Rabia
.Number=tb_r1.Number





*** في النهاية أود أن انبه إلى أنه ما زال هناك الكثير في TSQL ولكن كانت هذه مقدمة لا بأس بها عنها ***





تم بحمد الله.. وانتهى الدرس وبه تنتهي دورة الآكسيس 2003..

ولن نلتقي بالدرس القادم ^_^ ..


تحياتي : أبو ربيع

-------------------------------

المصدر

akramnasr 05-22-2010 03:19 PM

شكرررررررررررررررررررررررررررررررررررررررررررررررر رررررررررررررررررررررررررررررا

الشمرول 08-17-2011 02:03 PM

مشكوووور يا أخي *_^


الساعة الآن 11:50 PM.

Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية

Ads Management Version 3.0.1 by Saeed Al-Atwi

a.d - i.s.s.w