تقييم الموضوع :
  • 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]
الرد }}}}
تم الشكر بواسطة:
#2
[COLOR="#B22222"]يعطيك الف عافيه
تحياتيي لك[/COLOR]
الرد }}}}
تم الشكر بواسطة:
#3
شكراً عالجهد الهائل دا بسسسسسسسسس...

بس ياريت تحطه في ملف على شكل بي دي اف مع المرفقات
عشان تعم الفائدة للجميع
أرجووووووووووووووووك وافق
وأنا أول من بيحملو على طوووووووووووووول
... اللهم احفظ والداي ...
... آميييييييييييييين ...
الرد }}}}
تم الشكر بواسطة:
#4
اشكر الاخ احمد جمال على هذه المجهودات الطيبة
واشكرك اخي [b]azzamxp على مساعدتك في نقل هذه الدروس
والحمد لله قمت بقرائتها كلها وافادتني كثيرا
وبارك الله فيكم وجزاكم الله كل خير
[/b]
الرد }}}}
تم الشكر بواسطة:
#5
جزاك الله خيرا
الرد }}}}
تم الشكر بواسطة:
#6
الحمد لله اللي نفعنا بها والله يجزاك خيرا ياسيدي
الرد }}}}
تم الشكر بواسطة:
#7
بارك الله فيك ونفع بك
آمين
غير موجود بالمنتدى لفترات طويلة بسبب ظروف العمل
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الثامن : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الثاني azzamxp 2 1,057 07-11-14, 01:20 PM
آخر رد: Microformt
  الدرس التاسع : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الثالث azzamxp 2 899 04-03-13, 07:28 PM
آخر رد: abdoojh
  الدرس السابع : استخدام لغة ( تقنية ) الإستعلامات بطريقة Tsql - الجزء الأول azzamxp 1 991 04-03-13, 12:51 AM
آخر رد: abdoojh
  الدرس السادس : منوعات في أكسيس . مقدمة إلى التقارير ، الماكرو azzamxp 1 1,032 04-03-13, 12:34 AM
آخر رد: abdoojh
  الدرس الخامس : عمليات أخرى في قواعد البيانات أكسيس azzamxp 1 873 03-03-13, 08:29 PM
آخر رد: abdoojh
  الدرس الرابع : العلاقات Relationships . azzamxp 1 1,177 03-03-13, 08:03 PM
آخر رد: abdoojh
  الدرس الثالث : بناء النماذج Forms azzamxp 1 1,805 26-02-13, 12:19 AM
آخر رد: abdoojh
  الدرس الثاني : 2 - مقدمة عامة عن أكسيس Access ، انشاء الجداول . azzamxp 2 1,101 25-02-13, 10:33 PM
آخر رد: abdoojh
  الدرس الأول : مقدمة عامة عن قواعد البيانات وأهيمتها . وانواع البيانات . azzamxp 1 1,771 25-02-13, 09:57 PM
آخر رد: abdoojh

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


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