المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الأخير : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الرابع



أبو عبد الله
06-18-2007, 07:46
الدوال في الاستعلامات .


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


كود:
SELECT func(colum) FROM table WHERE condition;



الدالة

AVG :



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

كود:
Select AVG(Age) from tb_main;
ولك ان تتخيل ماذا سنفعل لو لم نستخدم هذه الدالة ، كنا سندور على جميع السجلات حيث نجمع ارقام كل سجل ثم ننتقل إلى التالي وهكذا - برمجياً - .



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

كود:
SELECT AVG(Age) FROM tb_main where age < 25;
لو لاحظت لوجدت أن ناتج الدالة يظهر في حقل تحت اسم Expr100 أو ما شابه ... لذا قم - إذا كنت تريد - باعادة تسمية حقل الناتج عن طريق As كما تعلمنا سابقاً وبالشكل التالي :

كود:
SELECT AVG(Age) as AVGAGE FROM tb_main WHERE age < 25;



لاحظ أن الدالة سوف تتجاهل السجلات الفارغة ...



الدوال

Sum,Max,Min :



تعطي هذه الدوال المجموع - الأكبر - الأصغر على التوالي ، وهذا مثال على أكبر عمر في قاعدة البيانات :

كود:
SELECT max(Age) AS mxAGE FROM tb_main;



لا تنس أن بإمكاننا وضع شرط لعملية الإستعلام .




الدالة

Count :



وتعيد هذه الدالة عدد السجلات ولها صورتان تعمل مع أكسيس ... أما الصورة الثالثة فهي لا تعمل على الاكسيس :


الصيغة الأولى :

Count(colum) ... وتعيد عدد السجلات التي لم يكن هذا الحقل فارغاً فيها .
الصيغة الثانية : Count(*) ... وتعيد عدد السجلات دون النظر إلى إذا ما كانت فارغة أم لا .




أما الصيغة الثالثة : COUNT(DISTINCT Colum( حيث تقوم بعد السجلات مع تجاهل المكرر منها .

ولنر مثالاً على الصيغة الثانية :

كود:
Select count(*) From Tb_Main;



لا تنس أن بإمكانك وضع شرط لعملية العد .



كانت هذه بعض الدوال البسيطة والاكثر شهرة في TSql والآن ، ماذا لو كانت لدينا علاقات ونرغب في العمل عليها .

في مثل هذه الحالة ... نريد الحصول على معلومات البطاقة الشخصية الخاصة باسم ما وذلك من Tb_R2 - لاحظ أنه لا يوجد حقل للاسم في الجدول الثاني - .


كود:
SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.fromFROM tb_main, tb_r1WHERE tb_main.Number = tb_r1.Number;

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

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

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





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


كود:
SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.fromFROM tb_main, tb_r1WHERE tb_main.Number = tb_r1.Number and tb_main.age >25;




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



النوع الأول :

Inner Join :




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


كود:
SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.fromFROM tb_main inner join tb_r1on tb_main.Number=tb_r1.Number;




لاحظ أننا استبدلنا Where ب on كما وضعنا inner join بين اسمي الجدولين .




النوع الثاني :

Left Join :



في هذا النوع يعرض جميع بيانات الجدول الأول ( على اليسار ) ومن ثم يعرض البيانات المقابلة في الجدول الثاني .
لاحظ في هذا النوع أمرين :

* إذا كانت هناك سجلات ( على اليسار ) لا تقابلها سجلات على اليمين فإن اليسار يعرض ويعرض اليمين فارغاً .
* وإذا كانت هناك سجلات ( على اليمين ) ليس لها مقابل على اليسار فإنها لا تُعرض أبداً .


مثال هذه النوعية :

كود:
SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.fromFROM tb_main Left JOIN tb_r1 ON tb_main.Number=tb_r1.Number;




النوع الثالث :

Right Join :



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


كود:
SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.fromFROM tb_main Right JOIN tb_r1 ON tb_main.Number=tb_r1.Number;



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




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

ولد ديرتي
06-25-2007, 06:13
الله يعطيك العافيه يالغالي


لاهنت

أبو عبد الله
06-25-2007, 02:58
أهلاً بك ولد ديرتي بس الظاهر إن الشباب الباقين ماهو عاجبهم الموضوع