تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس العاشر و الأخير : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الرابع
#1
بسم الله الرحمن الرحيم
الدروس مقدمة من أحمد جمال

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



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


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

[SIZE=4]الدالة
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 :


وتعيد هذه الدالة عدد السجلات ولها صورتان تعمل مع أكسيس ... أما الصورة الثالثة فهي لا تعمل على الاكسيس :
الصيغة الأولى :
[/SIZE]
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 .

[SIZE=4]النوع الأول :
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 :


في هذا النوع يعرض جميع بيانات الجدول الأول ( على اليسار ) ومن ثم يعرض البيانات المقابلة في الجدول الثاني .
لاحظ في هذا النوع أمرين :
[/SIZE]
* إذا كانت هناك سجلات ( على اليسار ) لا تقابلها سجلات على اليمين فإن اليسار يعرض ويعرض اليمين فارغاً .
* وإذا كانت هناك سجلات ( على اليمين ) ليس لها مقابل على اليسار فإنها لا تُعرض أبداً .
مثال هذه النوعية :

كود :
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;

[SIZE=4]النوع الثالث :
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 ولكن كانت هذه مقدمة سريعة إليها ...

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

[/SIZE]
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الدرس العاشر و الأخير : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الرابع - بواسطة azzamxp - 04-10-12, 08:34 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الثاني : 2 - مقدمة عامة عن أكسيس Access ، انشاء الجداول . azzamxp 4 9,020 09-02-21, 03:56 AM
آخر رد: AmirPelavin
  الدرس الثامن : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الثاني azzamxp 2 4,545 07-11-14, 01:20 PM
آخر رد: Microformt
  الدرس التاسع : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الثالث azzamxp 2 4,327 04-03-13, 07:28 PM
آخر رد: abdoojh
  الدرس السابع : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الأول azzamxp 1 3,904 04-03-13, 12:51 AM
آخر رد: abdoojh
  الدرس السادس : منوعات في أكسيس . مقدمة إلى التقارير ، الماكرو azzamxp 1 4,029 04-03-13, 12:34 AM
آخر رد: abdoojh
  الدرس الخامس : عمليات أخرى في قواعد البيانات أكسيس azzamxp 1 3,913 03-03-13, 08:29 PM
آخر رد: abdoojh
  الدرس الرابع : العلاقات Relationships . azzamxp 1 4,450 03-03-13, 08:03 PM
آخر رد: abdoojh
  الدرس الثالث : بناء النماذج Forms azzamxp 1 8,421 26-02-13, 12:19 AM
آخر رد: abdoojh
  الدرس الأول : مقدمة عامة عن قواعد البيانات وأهيمتها . وانواع البيانات . azzamxp 1 6,121 25-02-13, 09:57 PM
آخر رد: abdoojh

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم