الدوال في
الاستعلامات .
تستخدم العديد من الدوال ضمن طيات جمل الاستعلام ، وهي
شائعة الاستخدام ، ومريحة ، وتعيد قيمة وحيدة - لا تعيد جدول - سنتعرف على
بعض الدوال مع بعض الأمثلة خلال هذا الدرس .
ولننظر نظرة سريعة إلى الصيغة العامة لاستخدام الدوال والتي
تأخذ الشكل التالي :
رمز برمجي:
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.from
FROM tb_main, tb_r1
WHERE tb_main.Number = tb_r1.Number;دعنا الآن نلاحظ الفروق بين هذه
الطريقة والطريقة السابقة :
أولاً : نقوم بكتابة اسم الجدول.اسم الحقل
وذلك مهم لأننا نتعامل مع أكثر من جدول .
ثانياً : نقوم بكتابة اكثر من جدول بعد عبارة
From لأننا نريد النواتج من أكثر من جدول .
ثالثاً : السطر الأخير من جملة الاستعلام هو لكي يعرض
المعلومات التي تتشابه أرقامها في الجدولين سوية .
دعنا الآن نجرب مثالاً آخراً ... وذلك بالاستعلام عن كافة
المعلومات التي تتعلق بالأصدقاء الذين تزيد أعمارهم عن 20 سنة .
رمز برمجي:
SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from
FROM tb_main, tb_r1
WHERE 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.from
FROM tb_main inner join tb_r1
on 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.from
FROM 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.from
FROM tb_main Right JOIN tb_r1 ON tb_main.Number=tb_r1.Number;
*** في النهاية أود أن انبه إلى أنه
ما زال هناك الكثير في TSQL ولكن كانت هذه نبذه عنها...
والله الموفق ...
وشكرا لكم
الدرس الأخير : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الرابع