دورة الأكسيس : الدرس الرابع : العلاقات
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
العلاقات RelationShip
قبل أن نبدأ نود أن نعرف أولاً لماذا نستخدم العلاقات ؟ لنعرف ذلك لا بد لنا أولاً أن نعرف ما معنى علاقة .
يقصد العلاقة هو اشتراك حقل بين جدولين بحيث تملك كل قيمة في هذا الحقل سجلين ، السجل الأول في الجدول الأول والسجل الثاني في الجدول الآخر .
نعود إلى سؤالنا السابق : نستخدم العلاقة لنضمن شيئين رئيسيين :
أولاً : تحقيق تكامل حقيقي بين جداول قاعدة البيانات .
ثانياً : منع تكرار القيم في أي من الجداول لمنع إهدار حجم قواعد البيانات .
ربما لم نبدأ بعد ، ولكن لنرى مثالاً سريعاً نضيفه سوياً لقاعدة البيانات التي كنا نعمل عليها الدروس السابقة .
لنقل أننا نريد أن نريد أن نقسم الأصدقاء إلى أربع مجموعات - مثلاً - بحسب السنة الدراسية في الكلية على سبيل المثال ، ونريد أن نعرف عن كل سنة عدد الطلبة فيها وعدد المواد الدراسية .
إذا كنا نعمل بالطريقة التقليدية فسنقول : نضيف لكل صديق حقل خاص بالسنة ، وحقل آخر خاص بعدد الطلبة العام وحقل ثالث بعدد المواد .
لكن لاحظ كم مرة سنكرر عدد المواد ، وعدد الطلبة .
لاحظ أيضاً لو زادت مادة لطلبة أي سنة دراسية ، فهذا يعني أننا سنحدث بيانات جميع الحقول .
وقل نفس الأمر بالنسبة للحذف وغير ذلك .
ربما لا يتضح موضوع الحذف في مثالنا ( نوتة الهواتف ) ولكن سأخرج - جزئياً - عن الموضوع لأشرح مثالاً صغيراً على عملية الحذف .
لنفرض أن لدينا قاعدة بيانات تحتوي على الموظفين ويهمنا فقط اسم الموظف وفرع الشركة التي يعمل فيها ومكان الفرع .
إذا قامت الشركة مثلاً بحذف فرع ... فهذا يعني أن تقوم يدوياً - أو حتى بالكود - بحذف جميع الموظفين الذين ينتمون إلى هذا الفرع .
لكن الأمر ليس كذلك مع العلاقات ، فبمجرد حذف القسم سوف يحذف تلقائياً الموظفون التابعون له – طبعاً فقط إذا كنا نرغب في ذلك - .
لتلافي ذلك فإننا نستخدم ما يعرف بالعلاقات RelationShip .
أنواع العلاقات :
النوع الأول : One To One - علاقة واحد لواحد .
في هذه العلاقة نقول أن لكل سجل في القاعدة الرئيسية سجل واحد يقابله في القاعدة الثانية .
مثال على هذه العلاقة ضمن قاعدة بيانات الأصدقاء :
بفرض أننا نريد اضافة المعلومات الموجودة ضمن البطاقة الشخصية ( رقم البطاقة - فصيلة الدم - مصدر البطاقة )
نستطيع اضافة هذه الحقول مباشرة إلى الجدول الأول ، ولكن لاحظ كم سيصبح حجم هذا الجدول ، وبالتالي إذا حاولنا استخراج اسماء الأصدقاء فقط فسيستغرق المزيد من الوقت .
ربما لن يظهر ذلك مع قاعدتنا البسيطة ولكنه يظهر مع قواعد البيانات الضخمة .
إذن سنقوم بانشاء جدول جديد يحتوي على الحقول التالية ( رقم البطاقة - فصيلة الدم - مصدر البطاقة )
PassPort - BClass - From
تبقى شيء واحد وهو الحقل الذي يمثل رابطاً بين الجدولين .
وهذا الحقل الرابط له شروط هي :
* أن يكون موجوداً في الجدولين .
* أن يكون نوعه متطابقاً في الجدولين ( فلا يصلح أن يكون الأول رقم والثاني نص ) .
* أن يحتوي على قيم فريدة ( بمعنى أن لا يتكرر ) حتى لا يسبب المشاكل .
ولذا فإننا نقول أننا لا نستطيع أن نستخدم حقل الإسم لاخلاله بالشرط الثالث لاحتمال تشابه الأسماء .
لذلك فإن أنسب حقل هو حقل الرقم لأننا ذكرنا أنه سيحتوي على قيم فريدة ( غير متشابهه ) .
قم الآن باضافة حقل Number إلى الجدول السابق وعينه كمفتاح رئيسي Primary Key ، وقم بحفظ الجدول تحت اسم Tb_R1 أو أي اسم كما تحب .
النوع الثاني : One To Many - علاقة واحد لمجموعة ( والعكس صحيح ) .
في هذه العلاقة نقول إن لكل سجل في الجدول الرئيسي مجموعة سجلات في الجدول الثاني .
مثال ذلك المثال الذ قمنا بشرحه في الدرس السابق .
لو لاحظت المثال ستجد أن مجموعة من الطلاب يمكن أن يكون لهم سجل واحد في جدول الفرق ، لكن لا يمكن أن يكون لطالب ( سجل ) واحد أكثر من سجل آخر في جدول الفرق ( السنوات الدراسية ) .
وهذا هو الفرق بينه وبين النوع التالي .
لذا قم بانشاء جدول ثالث تحت اسم Tb_R2 ويحتوي على الحقول التالية :
Year - Books - Students
السنة - الكتب - الطلاب
يمكننا اضافة حقل جديد في الجدول الأول Tb_Main تحت اسم Year حيث سيكون هو الحقل الرابط بين الجدولين .
قم بالضغط على الجدول الأول ، ثم اضغط على ( تصميم - Design ) ، ثم قم بالضغط بزر الماوس الأيسر في المكان المطلوب ثم قم بالضغط على ( ادراج صف - Insert Row ) .
أيضاً لا تنس أن تجعل حقل Year مفتاح رئيسي في الجدول الثاني ( جدول الفرق الدراسية ) .
*** هذا النوع من علاقات هي الأكثر استخداماً .
النوع الثالث : Many To Many - علاقة مجموعة إلى مجموعة :
هل تتذكر العبارة التالية التي أوردتها في الدرس السابق ؟
لكن لا يمكن أن يكون لطالب ( سجل ) واحد أكثر من سجل آخر في جدول الفرق ( السنوات الدراسية ) .
إذا أزلنا ( لا ) فإننا نكون قد حصلنا على النوع الثالث .
مثال هذه العلاقة :
لو أردنا أن نضيف جدولاً يحتوي على اللغات فإننا سنلاحظ التالي :
* يمكن للشخص الواحد أن يكون له أكثر من لغة .
* ويمكن للغة الواحدة أن تكون موجودة عند أكثر من شخص .
للقيام بهذه النوعية من العلاقات فإننا نحتاج إلى جدول بسيط ، فمثلاً لدينا جدولين في البداية هما :
الرقم - الاسم .
1 - أحمد
2 - محمد
3 - خالد
4 - سامي
والثاني للغات :
الرقم - اللغة
1 - العربية
2 - الانجليزية
3 - الفرنسية
أما الجدول الإضافي فهو للعلاقة بين اللغات والأشخاص ، فلكي ندلل على أن أحمد يتحدث العربية والانجليزية ، فيما يتحدث محمد الفرنسية ، أما خالد فيتحدث الثلاث ، بينما لا يتحدث سامي أي لغة ! فإننا سوف نشكل الجدول التالي :
رقم الشخص - رقم اللغة
1 - 1
1 - 2
2 - 3
3 - 1
3 - 2
3 - 3
سنقوم الآن ببعض التعديلات على الجداول يصبح كما في المثال المرفق
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]والآن وبعد معرفة الانواع المختلفة سنبدأ الآن بانشاء العلاقات بين الجدول ، وتوجد طريقتين للقيام بذلك :
* عن طريق محرر العلاقات .
* عن طريق المعالج الموجود في نوع البيانات Data Types الموجود في خصائص الحقل .
وسوف نستخدم الطريقة الاولى .
سنبدأ الآن بإنشاء العلاقات بين جدول الأصدقاء وجدول معلومات البطاقة الشخصية ( تذكر أن العلاقة من نوع واحد إلى واحد One To One ) .
من قائمة ( Tools - أدوات ) اختر ( Relationships - علاقات ) سوف تظهر شاشة فارغة - افتراضياً - ... اضغط بزر الماوس الأيمن واختر Show Tables - إظهار جداول ، وذلك بالشكل التالي :
والآن قم باختيار الجداول واحداً تلو الآخر واضغط Add - اضافة ، وبعد الانتهاء اختر Close - إغلاق .
سيظهر لك شكل كالتالي :
الآن من قائمة Relationships - العلاقات ، اختر تحرير علاقة - Edit Relationship . سوف تظهر لك شاشة اختر منها Create New .
سوف تظهر لك شاشة جديدة بالشكل التالي :
في خاصية Left Table Name اختر الجدول الذي سيكون مصدراً للبيانات وهو عندنا Tb_Main
وفي الجزء الأيمن اختر Tb_R1
وبالنسبة لخاصية Left Column Name اختر الحقل الذي سيكون رابطاً من الجدول الرئيسي ، ولذا سنختار Number
وفي الجزء الأيمن سيكون الحقل أيضاً هو Number .
وذلك بالشكل التالي :
قم الآن بالضغط على زر Ok وستظهر لك شاشة بالشكل التالي :
لاحظ ظهور نوع العلاقة في الجزء الأسفل من الشاشة .
أما بالنسبة لأزرار الاختيار :
1 - مربع الإختيار الأول : في هذا الخيار تحدد إذا ما كنت تريد منع المستخدم على ادخال حقل في الجدول الثاني دون أن يكون له نظير في الجدول الأول .
2 - مربع الإختيار الثاني : في هذا الخيار تحدد إذا ما كان تحديث بيانات الجدول الثاني عند تغيير قيم حقل المفتاح الرئيسي .
3 - مربع الإختيار الثالث : في هذا الخيار تحدد إذا ما كنت تريد حذف بيانات الجدول الثاني عند حذف نفس السجل في الجدول الرئيسي .
هناك زر آخر تحت اسم ( Join Type - نوع الدمج ) وبها ثلاث خيارات لأنواع مختلفة من الدمج .
والآن قم بالضغط على زر ( Create - إنشاء ) . ستلاحظ ظهور رسم لعلاقة بين الجدولين وذلك بالشكل التالي :
وبهذا نكون قد أنشأنا العلاقة الأولى من نوع One To One ... في العلاقة التالية سوف نستخدم المعالج .
للتأكد من عمل هذه العلاقة اذهب إلى Tb_Main وانقر علامة + الموجودة على يساره ... أتمنى أن يظهر لديك الشكل التالي :
سوف نقوم الآن بإنشاء العلاقة الخاصة بالسنة الدراسية ... لذا سوف نتجه إلى جدول TB_Main ونضغط Design ومن ثم نذهب إلى الحقل Year ونختار Lookup Wizard ، وذلك بالشكل التالي :
أول شاشة تظهر لنا تخيرنا فيما إذا ما كنا نريد أن نختار جدولاً لننشأ معه علاقة ، أم نريد أن نضع قيم ... سوف نترك الخيار الافتراضي وهو الأول ونضغط على التالي .
الشاشة التالية سوف تطلب منا اختيار الجدول الذي نريد إنشاء علاقة معه ، وسنختار Tb_R2 .
في الشاشة الثالثة سوف يطلب اسماء الحقول التي نريد لها أن تظهر في الجدول ... سوف نختار Year وذلك بالشكل التالي :
ومن ثم نضغط على التالي .
في الشاشة التالية سوف يظهر لنا بيانات الحقل المختار الموجودة حالياً في الجدول الذي اخترناه ، لذا سوف نختار التالي .
أخيراً سوف نختار اسم الحقل الذي نريد له أن يظهر العلاقة ، وسنتركه على ما هو عليه ، ونختار Finish - إنهاء .
سيخبرك أن الجدول لا بد أن يحفظ أولاً قبل القيام بضبط العلاقة ... قم بالحفظ ، ومن ثم أغلق شاشة التصميم .
الآن قم بتشغيل الجدول واختر الحقل Year ولاحظ ظهور قيم الجدول الثاني في قائمة وبإمكانك الاختيار منها مباشرة ... وذلك بالشكل التالي :
أيضاً اختر الجدول Tb_R2 وانقر علامة + سيظهر لك جميع الطلبة الذين ينتمون إلى هذه السنة وذلك بالشكل التالي :
أخيراً سوف نلقي نظرة على شاشة العلاقات التي قمنا بتشغيلها في الدرس السابق ... سوف يظهر لك شكل قريب من التالي :
الملف المرفق يحتوي على جميع العلاقات اضافة إلى جميع محتويات الدروس السابقة ، والله الموفق ...
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]دورة الآكسس: الدرس الخامس : بعض عمليات قواعد البيانات
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
سنتعرف في هذا الدرس على بعض العمليات الخاصة بقواعد البيانات .
أولاً : عمليات الإستيراد والتصدير ( Import & Export ) .
الإستيراد :
نقصد بعملية الإستيراد جلب معلومات إلى قاعدة البيانات من خارجها ...
من قائمة ملف File اختر ( جلب معلومات خارجية - Get External Data ) ومنها اختر ( استيراد - Import )
اختر الملف الذ تريد استيراد جزء منه ... اختر أي ملف وليكن حتى نسخة من قاعدة البيانات الحالية .
ستظهر لك شاشة ... قم بالضغط على ( خيارات - Option ) لتوسيع الشاشة بحيث تصبح بالشكل التالي :
في الجزء العلوي نختار نوع محتوى قاعدة البيانات الذي نريد استيراده ... وليكن ( جداول - Tables ) واختر أي جدول من القائمة .
أما الخيارات التي في الأسفل ففي الأول نحدد الاختيارات التي نريد أن نستوردها ( نجلبها ) مع قاعدة البيانات .
وفي المنتصف نحدد إذا ما كنا نريد أن نستورد الجدول كبناء تصميمي فقط أم الجدول اضافة إلى البيانات بداخله .
وأخيراً في اليمين نحدد إذا ما كنا نريد الاستيراد كجدول أو كاستعلام .
اضغط موافق ولاحظ ظهور الجدول ضمن قائمة الجداول .
هناك نوعية ثانية من الاستيراد وهو الاستيراد المرتبط ، وفي هذه الحالة فإن أي تعديل على بيانات الجدول المضاف ينعكس على قاعدة البيانات المضاف منها الجدول .
ولاختيار هذا النوع من قائمة ملف اختر ( استيراد - Import ) ثم ( جدول مرتبط - Link Table ) .
وبنفس الطريقة اختر الجدول ... عدل في بياناته ولاحظ التغيير في نفس الجدول من قاعدة البيانات الثانية .
التصدير :
هو العملية العكسية - نسبياً - للعملية السابقة ... الآن قم بتحديد جدول من قاعدة البيانات واضغط على قائمة ملف واختر ( تصدير - Export ) .
ستظهر شاشة تحدد فيها قاعدة البيانات التي نريد التصدير إليها ...
وأخيراً ستظهر شاشة تطلب منك ادخال الإسم الذ تريد أن يحمله الجدول المصدر في قاعدة البيانات تلك ... اختر أي اسم ، كما يمكنك الإختيار بين تصدير بيانات الجدول من عدمه ، ثم انقر موافق .
افتح قاعدة البيانات الثانية ولاحظ ظهور الجدول الجديد فيها .
قائمة الأدوات Tools Bar .
تحتوي هذه القائمة على العديد من الخيارات المهمة لقواعد البيانات منها :
1 - أدوات مساعدة لقواعد البيانات DatabaseUtilites .
يهمنا في هذا الجزء عمليتان ... الجزء الأول هو تحويل قاعدة البيانات Convert Database
يتيح لك هذا الخيار تحويل قاعدة بياناتك إلى اصدرات سابقة من أكسيس ... لكن لاحظ أنه لن يمكنك التغيير في بناء النسخة المحولة .
نحتاج مثل هذه الخاصية مثلاً عند التعامل مع Data Control في الفيجوال بيسك والتي لا تتعامل إلى مع Access 97 .
والجزء الثاني هو ضغط وإصلاح قواعد البيانات Compact andRepair Database .
نحتاج بين كل فترة وأخرى إلى هذا الإختيار والذي يقوم بثلاث مهمات رئيسية :
* ضغط بيانات قاعدة البيانات بحيث يصبح حجمها أصغر ، وذلك عن طريق تحديث طريقة حفظ المعلومات إلى طريقة قياسية .
* زيادة سرعة الوصول إلى بيانات قاعدة البيانات عن طريق اعادة ترتيب المحتويات .
* اصلاح الأخطاء التي قد تحدث في قاعدة البيانات والتي قد تنشأ عن عدد من المشاكل منها مثلاً اغلاق الجهاز دون اغلاق قاعدة البيانات ... وهكذا .
* ولا تنس انه يقوم بحذف السجلات التي حذفناها - ظاهرياً - فيما مضى .
2 - أمان Securty .
نحتاج إلى فتح قاعدة البيانات بطريقة Exuclusive ... وذلك من خلال أمر فتح Open اضغط على المؤشر الصغير بجانب زر الفتح واختر Exuclusive وذلك بالشكل التالي :
منوعات في أكسيس .
في هذا الدرس سوف نتعرف بإذن الله على بعض النقاط بصورة سريعة لكي لا يتبقى لنا في يومنا الأخير غداً سوى الاستعلامات إن شاء الله .
1 – التقارير .
إن التقارير هي واحدة من أهم العناصر في أي برنامج متكامل ، ويوفر لنا أكسيس طريقة مبسطة لبناء التقارير باستخدام المعالج كما أن باستطاعتنا بناء تقرير في طريقة عرض التصميم Design View ، والآن سنتبع الخطوات التالية لعمل تقرير يقوم بعرض أسماء وهواتف الأصدقاء .
1 – من يمين الشاشة الرئيسية اختر تقارير – Reports .
2 – اختر ( انشاء تقرير باستخدام المعالج ) .
3 – ستظهر لك شاشة ، من اعلاها حدد الجدول tb_main وهو الجدول مصدر المعلومات ، ومن ثم حدد الحقول التي ترغب في اضافتها . وهنا سنختار
Number – Fname – Lname – Phone
ثم اضغط التالي .
4 – ستعرض لك الشاشة التالية ما يعرف بفواصل التجميع ، لن نحتاج إليها هنا لذا اضغط التالي مباشرة .
5 – الشاشة التالية ستطلب منك تحديد اسلوب لترتيب البيانات ، لا نحتاج إليها في هذا المثال السريع أيضاً لذا اضغط التالي مرة أخرى .
6 – والآن يمكنك تحديد اتجاه التقرير ( عمودي – افقي ) ، وأسلوب الجداول أو الاعمدة للعرض ، اختر ما تريد ثم اضغط التالي .
7 – بعد ذلك حدد نسق العرض الذي تريده ، ومن ثم اضغط التالي .
8 – أخيراً اضغط انهاء .
يمكنك الآن مشاهدة صفحة جاهزة للطباعة حسب النسق الذي قمت باختياره .
والآن يمكنك الضغط على ( تصميم ) كما عملنا مع النماذج للتعديل يدوياً على التقرير .
لا يوفر الأكسيس فقط صفحة للطباعة في التقارير ، إنما بإمكانك وضع بعض نواتج عمليات الاستعلام والبحث لتصميم تقارير أكثر فعالية للمستخدم .
ويمكنك تجربة الاختيارات التي تجاهلناها لمزيد من التفاصيل .
2 – صفحات ويب .
بنفس طريقة التقارير – تقريباً – يمكنك انشاء صفحة ويب مرتبطة ببرنامجك ، ومع انه ينصح ان تقوم بذلك بطرق أخرى عندما تود انشاء صفحة ويب مرتبطة بقواعد البيانات .
بعد الانتهاء سيطلب منك مسار الصفحة الذي تود الحفظ فيه ، وتكون قد جهزت صفحة انترنت يتم تشغيلها بواسطة Internet Explorer .
3 – الوحدات النمطية .
أو ما يعرف باسم Modules ، وهي شبيه بتلك الموجودة في لغات البرمجة ، وتستخدم كصفحة عامة للمتغيرات والاجراءات ، وعندما نصل إلى تلك المرحلة المتعلقة بفيجوال بيسك من هذه السلسلة من الدورات سوف نتعرف على معنى Module بصفة أكثر توسعاً .
4 – وحدات الماكرو .
من خلالها نستطيع تجهيز بعض الأوامر البرمجية للعمل على قاعدة البيانات ، فمثلاً :
سنقوم الآن بانشاء ماكرو يقوم باغلاق قاعدة البيانات فور الضغط عليه ، ولعمل ذلك قم بالنقر من يمين الشاشة على ( وحدات ماكرو Macros ) ومن ثم اضغط على جديد .
تحت خانة تعليق اكتب مثلاً ( اضغط هنا للخروج من البرنامج ) ، وتحت قائمة اجراء Action قم باختيار Quit ، وفي الاسفل يمكنك تحديد بعض الخيارات لهذا الاجراء ، وفي حالة الخروج فإنك تستطيع تحديد خيارات الحفظ .
والآن احفظ الماكرو ، ثم قم بتشغيله من ( تشغيل ) أو بالنقر عليه مرتين ستجد انه اغلق قاعدة البيانات ، وإذا كنت قد اخترت انهاء فلن يتم حفظ التغييرات على عكس حفظ التي يتم فيها الحفظ فورياً ، أما المطالبة فهي حل وسط بين الاثنين .
هذا هو احد ابسط استخدامات الماكرو ، يمكن استخدام الماكرو لاضافة القوائم على سبيل المثال إلى البرنامج وهو واحد من الاستخدامات الشائعة للماكرو .
هل استطيع بناء برنامج كامل من خلال Microsoft Access ؟
الاجابة هي نعم ، وإن كان دائماً من المفضل استخدام لغات برمجة خاصة لبناء برامج قواعد البيانات مع استخدام برنامج Microsoft Access كوسيط للتخزين .
إن البرنامج الكامل هو خليط من الجداول والتقارير والاستعلامات ، وحدات الماكرو ، وغيرها . ويجمعها نموذج أو عدة نماذج لعرضها للمستخدم .
وسنرى مثلاً ما نحتاج إليه في نوتة هواتف بسيطة جداً .
1 – جدول نخزن فيه بيانات الاصدقاء .
2 – تقرير يعرض اسماء الاصدقاء وهواتفهم ، وآخر يعرض كامل معلومات الاصدقاء ، واحد يعرض البيانات على شكل كروت ، والآخر على شكل جدول .
3 – استعلام للبحث عن الاصدقاء من مدينة معينة ، وآخر للبحث بدلالة العمر ، واستعلام آخر مثلاً لاضافة سنة إلى العمر بعد كل سنة ، واستعلام يحسب الفرق مثلاً بين تاريخ اليوم وتاريخ الميلاد – سنتعرف على الاستعلامات بصورة أكثر تفصيلاً غداً إن شاء الله - .
4 – وحدات ماكرو لاضافة قوائم البرنامج ( ملف – تحرير ... ) وغيرها ، حيث يتم التعامل مع النماذج من خلالها .
5 – نموذج يحتوي على ازرار وقوائم ماكرو ، مثلاً ( زر بحث ، زر مرتبط بتغيير الخلفية – زر للخروج – زر لعرض بيانات الاصدقاء – زر لتشغيل التقرير الأول – الثاني .... الخ ) .
من هذا الخليط ومن غيره تستطيع تكوين برنامج مثل ذلك الخاص بهواتف الأصدقاء والذي يباع في الأسواق .
ولا تنس أنه بإمكانك من خلال أزرار النموذج – وكما قمنا بعمل زر الإغلاق – تشغيل نماذج أخرى ( برنامج بأكثر من شاشة مثلاً ) واستعلامات وتقارير وغير ذلك .
ولكن لا تنس أن لغة البرمجة تعطيك المزيد من القوة والتحكم في برنامجك .
ختاماً انصح الجميع بمراجعة درسي الأستاذ أبو يزن حول قوائم الماكرو على هذا الرابط :
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]درس الأستاذة رسيس على الرابط التالي :
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
دورة الأكسيس : الدرس السابع : لغة الاستعلامات الهيكلية 1
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
*** سلسلة دروس TSQL الموجودة في الموسوعة العربية أشمل من هذين الدرسين واللذين سيتم عرضهما هنا ، ولمزيد من التفصيل والتوضيح يفضل مراجعة هذه الدروسعلى هذا الرابط لمن يريد الاستزادة :
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]لكن المطلوب منا فقط هو ما ذكر في هذه الدروس ..
استخدام لغة ( تقنية ) الإستعلامات بطريقة TSQL (1) .
هذا هو الجزء الأكثر اهمية ، حيث ان جمل الاستعلام تعمل مع جميع قواعد البيانات بصورة موحدة مع اختلافات طفيفة جداً ، كما سنستخدمها في فيجوال بيسك ومن خلال Asp أيضاً ، كما انها تستخدم مع غيرهما بنفس الطريقة تقريباً ، وسوف نتطرق هنا لأشهر هذه الجمل مع وجود غيرها ايضاً .
ما هي SQL ؟
هذه الكلمة اختصار ل Structured Query Language .
وتصلح تقنية الاستعلام للعمل مع جميع أنواع قواعد البيانات : Oracle - Access - MS sql Server وغيرها .
تقوم هذه الجملة بالبحث - كما هو شائع - إلا أنها تستخدم أيضاً في الاضافة والحذف والتعديل وانشاء الجداول وحتى قواعد البيانات . والتحكم بها والادارة وغير ذلك .
أين ستكتب جمل الإستعلام في أكسيس ؟
اختر استعلامات Quires من القائمة التي كنا تختار منها Table أو Forms .
اختر Ceate Quriry In Deign Viwe .
ستظهر لك شاشة ... اختر اغلاق - Close .
والآن من قائمة Query اخترSQL Specfic ومن ثم اختر Union وذلك بالشكل التالي :
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]ستظهر لك شاشة فارغة ... هذه هي الشاشة التي سنكتب فيها أوامر الإستعلام .
في أعلى الشاشة نجد رمزاً للقرص المرن وهذا الرمز يرمز إلى حفظ الإستعلام ... أيضاً علامة التعجب تعني ( نفذ الإستعلام )
سوف نقوم بكتابة الإستعلام التالي :
Select FName From Tb_Main;
لا تقلق فلسوف نشرح ماذا يعني الأمر السابق
!!!
اضغط على حفظ واحفظه تحت الاسم الذي يناسبك ... وجرب تنفيذ الإستعلام بالضغط على علامة التعجب ... أيضاً أغلق الشاشة واضغط على اسم الإستعلام ... أتمنى أن تظهر لك في الحالتين شاشة شبيه بذلك :
أيضاً للعودة لشاشة التصميم ... اضغط على الاسم بزر الماوس الأيمن واختر ( عرض التصميم - Design View ) وستظهر شاشة كتابة الكود .
حتى هذه اللحظة فالتغييرات محفوظة في :
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]والآن سنبدأ في تفصيل جمل الاستعلام ، وسوف نتعرف أولاً على جمل البحث والتي تبدأ بـ Select . وهذه هي الصيغة العامة :
Select Colums_Name From Table_Name;
نلاحظ تكون جملة الإستعلام من أربعة أجزاء :
Select : وهي التي تميز جملة البحث عن غيرها من جمل TSQL .
Colum_Name : اسم الحقل أو العمود الذي تريد له أن يظهر .
From : وهي أيضاً صيغة خاصة بجملة البحث وتتغير في باقي جمل TSQL .
Table_Name : هنا نكتب اسم الجدول .
ولنلق نظرة قبل البدء على ما يمكن تسميته ( القواعد النحوية ) Syntex :
* لا يوجد أي فرق بين الأحرف الكبيرة والصغيرة .
* مسافة = مسافتان = عشرة أسطر : لا يعترف بأكثر من مسافة .
* تنتهي جميع جمل الإستعلام بفاصلة منقوطة ; إلا أننا في الفيجوال بيسك وفي بعض البرامج الأخرى لا نحتاج إليها .
لنلق نظرة على المثال السابق
SELECT FName FROM Tb_Main;
لاحظ أننا استخدمنا جملة Select لاستخراج الاسم الأول من الجدول Tb_Main .
وبهذه الصورة يمكننا استخراج مواقع الأصدقاء وذلك بالشكل التالي
SELECT Site FROM Tb_Main;
وهكذا مع الباقي .
وإذا كنا نريد استخراج أكثر من عمود فيمكننا وضعهم بالتوالي وتفصل بينهم الفاصلة ، فمثلاً لاستخراج الإسم الأول والإسم الأخير :
SELECT FName,LName FROM Tb_Main;
ومثلاً لاستخراج الإسم الأول والعمر والبريد الإلكتروني :
SELECT FName, Age,EMail FROM Tb_Main;
ولاستخراج جميع البيانات فإننا نضع * محل اسماء الحقول وذلك بالشكل التالي :
SELECT* FROM Tb_Main;
ولاستخراج البيانات ولكن بدون تكرار نستخدم DISTINCT ... فمثلاً لاستخراج الإسم الأول مع حذف التكرار :
SELECT DISTINCT FNAme FROM Tb_Main;
أيضاً لترتيب البيانات المخرجة تصاعدياً أو تنازلياً نستخدم الأمر :
ORDER BY colum
أو للتصاعدي
ORDER BY colum DESC
فمثلاً لاستخراج جمع البيانات مع الترتيب التصاعدي حسب الإسم الأول :
SELECT * FROM Tb_Main ORDER BY FName DESC;
ويمكننا عمل مستويين للترتيب - كما هو شائع - وذلك باستخدام الفاصلة ، فمثلاً للترتيب حسب الإسم الأول ومن ثم الإسم الأخير ولكن تنازلياً هذه المرة :
SELECT * FROM Tb_Main ORDER BY FName,Lname ;
أيضاً لاستخراج الإسم الأول تحت مسمى MyName فإننا نستخدم As وذلك بالشكل التالي :
Select Fname as MyName From Tb_Main;
وسنستفيد من As لاحقاً في عمليات الاستعلام باستخدام الدوال .
يمكننا أيضاً اجراء العمليات البسيطة على جمل البحث ، فمثلاً لاستخراج أعمار الأصدقاء بزيادة عشرة سنوات :
SELECT Fname,Age+10 as Age2 FROM Tb_Main;
لاحظ أنك تضطر إلى اعادة تسمية الحقل الناتج وإلا فإن Access سوف يضع له اسماً من عنده .
ومثلاً لدمج الإسم الأول مع الإسم الأخير :
SELECT Fname+ " " + LName As CName FROM Tb_Main;
استخدام الجمل الشرطية مع أوامر الإستعلام
استخدام معامل المساواة والمعاملات الرياضية .
تأخذ صيغة استخدام المساواة كشرط في عملية الإستعلام الصيغة التالية :
Select * From Tb_Main Where Field = Value;
ويمكننا استخدام > أو < أو => أو =< أو <> وطبعاً = .
وأخيراً معاملين جدد سنشرحهم بإذن الله لاحقاً وهما Like و Between .
فمثلاً للاستعلام عن الأصدقاء الذي تساوي أعمارهم 18 سنة :
SELECT * FROM tb_Main WHERE age = 18;
ولعرض أسماء من هم أصغر من 50 سنة :
SELECT FName,LName FROM tb_Main where age < 50;
وسنضع Value بين علامتي تنصيص مفردة في حالة كانت نصوصاً وذلك بالشكل التالي - للبحث عن الأشخاص والذين لهم الإسم ( أحمد ) :
SELECT * FROM tb_Main WHERE Fname = 'ahmed';
كما سنضع علامتي # عند البحث عن تواريخ ، ولا توجد أمثلة لتاريخ في قاعدة البيانات ، لكنها تأخذ صيغة شبيهه بالتالي :
Select * Form Table1 Where Date > #12/03/04#;
والآن لندمج بعض ما تعملناه في جملة واحدة :
لاستخراج الإسم الأول والأخير من الجدول بترتيب تنازلياً ومدمجة سوياً تحت اسم Name والتي تحقق شرط أن العمر أكبر من 17 :
SELECT Fname & " " & Lname AS MyName FROM tb_Main WHERE age > 17 ORDER BY FNAME, LName DESC;
والآن : ماذا لو أردنا البحث بتحقيق مجموعة شروط أو أحدها أو تحقيق شرط مع انتفاء آخر ؟
من أجل هذا الغرض نستخدم المعاملات المنطقية البسيطة .
لدينا نوعين من المعاملات المنطقية البسيطة الأكثر استخداماً :
And : تعطي قيمة صحيحة True في حالة كان الطرفين صحيحاً والباقي false .
Or : تعطي قيمة صحيحة True في حالة كان أحد الطرفين صحيحاً وإلا فإنه يعطي false .
والآن إلى مثال سريع ، سنبحث عن الأشخاص الذين يكبر عمرهم عن 17 بشرط ألا يكونوا متزوجين :
Select Fname from tb_main where age > 17 and marry = false;
لنفترض أيضاً أننا نريد معرفة الأشخاص الذين تزيد أعمارهم عن 17 سنة وليس لديهم بريد الكتروني :
قبل أن تجرب المثال قم بتشغيل قاعدة البيانات وقم بحذف البريد الإلكتروني لبعض الأشخاص ، واكتب للبعض كلمة No Mail وللآخرين No .
الآن انظر الأمر التالي :
SELECT * FROM Tb_Main WHERE age>17 And (Email='No' or Email='No Mail');
سنفصل الآن هذه الجملة :
* الشرط الأول : Age > 17 : العمر أكبر من 17 .
* الشرط الثاني : Email = 'No' : البريد الإلكتروني يحتوي على كلمة No .
* الشرط الثالث : Email = 'No Mail' : البريد الإلكتروني يحتوي على كلمة No Mail .
واستخدمنا نوعين من المعاملات المنطقية And و Or .
متى تحقق الشرط الأول ( العمر أكبر من 17 ) فإنه ينتظر تحقيق أحد الشرطين الذين تدمج بينهم Or .
وعندها يعرض السجل الذي يحقق قيمة True لهذا التعبير .
قبل النهاية كن حذراً عند استخدام And مع Or في جملة واحدة ، وذلك عن طريق ترتيب الأقواس بطريقة صحيحة .
استخدام المعامل Like .
نستخدم المعامل Like للبحث عن الكلمات المشابهه لتعبير معين ...
ونستخدم للمعامل Like الصيغة التالية :
Select * From Table Where Field Like '*Name*';
نستخدم * للدلالة على وجود أحرف ما ... وقد نستخدمها في البداية ، أو النهاية ، أو كليهما . وسيتضح الأمر في الأمثلة :
لعرض الأشخاص الذين قد تحتوي أسماءهم الأولى على hm ... لذا سنستخدم جملة استعلام بهذا الشكل :
SELECT * FROM Tb_Main WHERE FName like '*hm*';
أما لو أردنا البحث عن الأشخاص الذين تبدأ أسماءهم بحرف A لذا لن نضع * قبل كلمة البحث :
SELECT * FROM Tb_Main WHERE FName like 'A*';
ولو أردنا البحث عن الأشخاص الذين ينتهي اسمهم بحرف معين سنضع * في البداية دون النهاية .
*
في MS SQL Server نستخدم % بدلاً من * .
مما سبق نستنتج أن * تعني أي عدد من الحروف ، لكن ماذا لو أردنا تحديد عدد الحروف ؟
في هذه الحالو نستخدم "؟" والتي ذكرناها في درس البحث في البداية .
إذن : ماذا لو أردنا أن نبحث عن الأشخاص الذين تبدأ أسماءهم بحرف A بشرط أن يكون عدد حروفهم 3 فقط .
SELECT * FROM Tb_Main WHERE FName like 'A??';
والآن إلى مثال واقعي نسبياً . جرب تعديل حقل العنوان Address للأشخاص بحيث يحتوي على أكثر من معلومة اضافة للمدينة .
في هذه الحالة نستطيع استخراج الأشخاص الذين يسكنون مدينة واحدة عن طريق الشرط Like . هل تعرف كيف ؟؟؟
استخدام المعامل Between .
نستخدم هذا المعامل للبحث ضمن نطاق معين ، وأشهر استعمال لهذا المعامل هو استخدامه في البحث ضمن التواريخ .
يأخذ البحث باستخدام between الصيغة التالية :
SELECT colum FROM table WHERE field BETWEEN v1 AND v2;
فمثلاً لاستخراج الأشخاص الذين تترواح أعمارهم بين 20 و 60 :
SELECT *
FROM tb_main
WHERE age between 20 and 60;
ويمكن استخدام نفس الطريقة مع الأسماء ، والتواريخ بطبيعة الحال .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
دورة الأكسيس : الدرس الأخير : لغة الاستعلامات الهيكلية 2
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
استخدام لغة ( تقنية ) الإستعلامات بطريقة
TSQL (2) .
سنبعد في درسنا هذا عن TSQL مؤقتاً عن جو البحث وسنتحدث عن اضافة وحذف الجداول في قواعد البيانات .
سنبدأ أولاً بصيغة انشاء جدول وذلك بالشكل التالي :
CREATE TABLE tb1 ( colum type, colum type,........);
وكمثال على ذلك ... لننشئ جدولاً تحت اسم Tb2 يحتوي على حقلين : الإسم Name من نوع ( نص - String ) والآخر Age من نوع Number :
CREATE TABLE tb1 (name text,age number );
إذن ماذا لو أردنا أن نحدد حجم حقل العمر Name بخمس خانات فقط ... إذن ضع عدد الخانات بين قوسين مع تعيين نوع بيانات الاسم ك Text وذلك بالشكل التالي :
CREATE TABLE tb1 (name text(6),age number );
آخر نقطة سأشرحها في انشاء الجداول هي كيف نجعل الحقل لا يقبل فراغ - Null ... ولنجرب هذا المثال مع الإسم أيضاً :
CREATE TABLE tb1 (name text(6) Not Null,age number );
ولكن ماذا عن الحذف ... في الواقع هذا الكود يقوم بحذف الجدول الذي قمنا بإنشاءه تواً :
DROP Table tb1;
ولو كان هذا الجدول مرتبطاً بعلاقات فلا بد من تحديثها باضافة CASCADE إلى آخر الكود وذلك بالشكل التالي :
DROP Table tb1 CASCADE;
لا تنسى أن تنشأ الجدول بعد حذفه لأننا سوف نعمل عليه مجدداً .
والآن سنبدأ في اضافة حقول إليه وذلك بعد عملية الانشاء - أعتقد أن الفرق بين الجدول وقاعدة البيانات والحقول أصبح واضحاً - .
نستطيع اضافة الحقول بصيغة عامة بالطريقة التالية :
ALTER TABLE tb1 ADD colum type;
فلنضف حقلين جديدين : الأول هو تاريخ الميلاد ، والثاني النوع ( ذكر - أنثى ) .
ALTER TABLE tb1 ADD birth_Date date,Gender Text;
والآن لنحذف أحد هذه الحقول وليكن حقل Gender ... لاحظ أننا دائماً نضيف كلمة CASCADE لتحديث العلاقات - في حال وجودها - ، وذلك بالشكل التالي :
ALTER TABLE tb1 DROP gender CASCADE;
والآن سوف نتعلم اضافة السجلات ، وسوف نستخدم Tb_Main كجدول لنجرب أوامرنا عليه ، والآن إلى الصيغة العامة لأمر الإضافة :
INSERT INTO table VALUES (v1, v2,......);
لاحظ أننا سنمرر القيم واحداً وراء الثاني وتفصل بينهم فاصلة ، مع مراعاة وضع النصوص بين علامتي تنصيص "" والتواريخ بين علامتي ## .
سنمرر القيم التالية : الرقم - الإسم الأول - الإسم الأخير - رقم الهاتف - العمر - العنوان - البريد الإلكتروني - السنة - اللغة - الموقع - متزوج/لا - ملاحظات .
وذلك بالشكل التالي :
Insert into tb_main values(11,'ahmed','gamal',6666666,18,'Cairo','Hamm ada2091','First Year','','',false,'');
تواحهنا مشكلة وهو أننا جعلنا الرقم حقلاً وحيداً - لا تتكرر قيمه - لذا وجب علينا في كل مرة أن نغير الرقم ... برمجياً يمكننا ذلك ولكن من خلال الأكسيس جرب ازالة رقم 11 ووضع كلمة MyNumber بالشكل التالي :
Insert into tb_main values(MyNumber,'ahmed','gamal',6666666,18,'Cairo' ,'Hammada2091','First Year','','',false,'');
جرب تنفيذ جملة الإستعلام وستظهر لك رسالة تطلب منك ادخال قيمة MyNumber . ضع قيمة بشرط ألا تكون مكررة وسوف يتم اضافتها في الجدول .
* ملاحظة :
إن هذا الجزء في الأكسيس سيقابله متغير في الفيجوال بيسك .. كذا الامر بالنسبة للبحث .
هل تتذكر جملة البحث التالية :
Select * From Tb_Main where name='ahmed';
جرب أن تزيل Ahmed وضع متغيراً MyName بالشكل التالي :
Select * From Tb_Main where name = myname;
وهذا يعطيك تحكماً فيما ترغب في البحث عنه ...
التعديل :
الصيغة العامة لتعديل بيانات سجل بالشكل التالي :
UPDATE table_name SET colum1 = v1 , colum2 = v2 WHERE colum = v;
سنجرب الآن مثالاً لجعل العمر = 28 والموقع =
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] للشخص الذي اسمه الأول ( Ahmed ) والاخير ( Gamal ) :
Update tb_main set age=25 , site='
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] where fname='ahmed' and lname='Gamal';
ولكن ماذا لو كان الأمر يشمل أكثر من سجل . في الواقع هذا الأمر شائع ويشبهه المثال التالي :
Update tb_main set fname='Ahmad' where fname='ahmed';
قد يستخدم مثل هذا المثال لتوحيد الأسماء خصوصاً مع اللغة العربية ، كما يمكن أن يستخدم أيضاً لتجاهل تأثير الهمزة في عمليات البحث ، فمثلاً يصبح أحمد = احمد .
ولكن ماذا لو أردنا تعميم التغييرات ... في هذه الحالة لن نضع الشرط ، ويمكن وضع أمر شبيه بالأمر التالي لزيادة الأعمار 5 سنوات :
Update tb_main set age=age+5;
يعتبر هذا الأمر من أكثر الأوامر شيوعاً في قواعد بيانات الشركات ... فمثلاً يستخدم لزيادة رواتب الموظفين بنسبة معينة ( يمكن أن تكون زيادة ثابته أو نسبيه ) .
ولكن ماذا عن الحذف ... في الواقع تتخذ جملة البحث صيغة عامة كالتالي :
DELETE FROM table WHERE colum = value;
ويمكن أن يكون الحذف تحت تأثير تحقق أكثر من شرط .. في المثال التالي سوف نحذف جميع الأشخاص الذين تزيد أعمارهم عن الأربعين :
Delete from tb_main where age>40;
ولكن ماذا عن حذف كامل محتويات جدول ما ... هذه هي الطريقة :
DELETE * FROM table;
الدوال في الاستعلامات .
تستخدم العديد من الدوال ضمن طيات جمل الاستعلام ، وهي شائعة الاستخدام ، ومريحة ، وتعيد قيمة وحيدة - لا تعيد جدول - سنتعرف على بعض الدوال مع بعض الأمثلة خلال هذا الدرس .
ولننظر نظرة سريعة إلى الصيغة العامة لاستخدام الدوال والتي تأخذ الشكل التالي :
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;
*** واجب سريع : حاول أن تنشئ جملة استعلام تقوم بعرض اسماء الطلاب + ارقام البطاقات الشخصية + فصيلة الدم + عدد الكتب الدراسية لكل صديق يحتوي اسمه على
h ( لا تنسى عبارة like ) .
والآن نريد تطبيق امثلة جديدة ، ولكي نبدأ في تطبيق أمثلة هذا الدرس لا بد أن يكون بعض الأصدقاء لديهم سجلات في الجدول الثاني والبعض الآخر لا .
ومازال حديثنا حول العلاقات وما يتعلق بها ... وسنتحدث عن الدالة 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 لمزيد من الفائدة ، أيضاً لا تنس ان SQL لا زالت تحتوي على الكثير من الأوامر والتي يمكنك البحث في المزيد منها على الانترنت .
بهذا نكون بحمد الله قد اتممنا الجزء الأول من الدورة الكاملة ، أي الدورة الأولى، وإلى اللقاء في الدورة القادمة .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
تحميل: مثال عملي البحث بالحرف الأول
Search.zip
قبل أن ندخل في شرح هذا المثال العملي أحب أن أشرح لكم شريط مربع الأدوات كمدخل لتصميم النموذج الموجود في المثال.
شريط مربع الأدوات :
يتكون من عدة أدوات تستخدم في تصميم النماذج بشكل مبسط وجميل، حيث كل أداة تقوم بوظيفة معينة ولها خصائص تميزها عن الأداة الأخرى.
افترض أنك بصدد عمل نموذج داخل قاعدة بيانات أنشأتها مسبقا، بالطبع سوف تختار نموذج ثم جديد ثم طريقة عرض التصميم.
ملاحظة: يلزمنا هنا اختيار النموذج الجديد في طريقة عرض التصميم حتى نتمكن من استخدام مربع الأدوات في تصميم هذا النموذج.
بعد ذلك سوف تظهر لك نافذة نموذج1 ، تستطيع بعد ذلك إظهار مربع الأدوات كالتالي:
من قائمة عرض اختر أشرطة أدوات ثم انقر على مربع أدوات، فيظهر لك شريط يحتوي على الأدوات التالية:
والآن سنأتي لشرح وظائف هذه الأدوات بالتفصيل حسب الترقيم الموجود تحت كل أداة في الصورة مع ملاحظة أنه يمكنك الإطلاع على خصائص كل أداة بالنقر على الأداة ثم بالضغط على المفتاح F4 .
الأداة 1: تسمية
عنصر تحكم يعرض نص وصفي مثل عنوان أو تعليق في نموذج أو تقرير أو صفحة بيانات Access. من الممكن أن تحتوي التسميات في النماذج و التقارير على ارتباطات تشعبية، لكن الارتباطات التشعبية لن تعمل عند عرضها في Microsoft Access؛ حيث تعمل الارتباطات عند إخراج التقرير إلى Microsoft Word، أو Microsoft Excel أو إلى تنسيق HTML.
الأداة 2: مربع نصي
ويستخدم في لعرض البيانات أو إدخالها أو تحريرها في مصدر السجل الأساسي لنموذج أو تقرير أو صفحة بيانات Access، كذلك تستخدم في عرض نتائج عمليات حسابية أو قبول بيانات مدخلة من المستخدم.
الأداة 3: مجموعة خيار
يستخدم مع خانات الاختيار أو أزرار الخيار أو أزرار التبديل لعرض مجموعة قيم بديلة. فعلى سبيل المثال يمكنك استخدام مجموعة خيارات لتحديد طريقة شحن طلب ما، إما عن طريق البر أو عن طريق البحر. في Microsoft Access يمكن أن تتضمن مجموعة الخيار أزرار خيارات فقط.
الأداة 4: الزر تبديل
يستخدم كعنصر تحكم مستقل منضم إلى حقل "نعم / لا" في قاعدة بيانات Microsoft Access أو عمود "بت" في مشروع Microsoft Access . زر التبديل عبارة عن عنصر تحكم غير منضم لقبول إدخالا من المستخدم في مربع حوار مخصص، أو جزء من مجموعة خيار.
الأداة 5: الزر خيار
يستخدم كعنصر تحكم مستقل منضم إلى حقل "نعم / لا" في قاعدة بيانات Microsoft Access أو عمود "بت" في مشروع Microsoft Access . زر الخيار عبارة عن عنصر تحكم غير منضم لقبول إدخالا من المستخدم في مربع حوار مخصص، أو جزء من مجموعة خيار.
الأداة 6: خانة اختيار
يستخدم أيضا كعنصر تحكم مستقل منضم إلى حقل "نعم / لا" في قاعدة بيانات Microsoft Access أو عمود "بت" في مشروع Microsoft Access . خانة الخيار عبارة عن عنصر تحكم غير منضم لقبول إدخالا من المستخدم في مربع حوار مخصص، أو جزء من مجموعة خيار.
الأداة 7: مربع التحرير والسرد
تجمع مزايا مربع القائمة ومربع النص، حيث يمكنك الكتابة في مربع النص أو تحديد إدخال في مربع القائمة لإضافة قيمة إلى حقل أساسي.
الأداة 8: مربع قائمة
تقوم هذه الأداة بعرض قائمة قيم قابلة للتمرير، عند فتح نموذج في طريقة العرض نموذج، أو عند فتح صفحة بيانات Access في طريقة العرض صفحة أو في Microsoft Internet Explorer فإنه يمكنك أن تحدد عنصر من القائمة لإدخال قيمة في سجل جديد، أو أن تغير قيمة في سجل موجود.
الأداة 9: الزر أمر
يستخدم لتنفيذ إجراءات مثل البحث عن سجل ، طباعة سجل أو تطبيق عامل تصفية نموذج.
الأداة 10: صورة
تستخدم هذه الأداة لعرض صورة ثابتة في نموذج أو تقرير، مع ملاحظة أنه لا يكون بإمكانك تحرير الصورة بعد إضافتها إلى نموذج أو تقرير.
الأداة 11: إطار كائن غير منضم
يستخدم لعرض كائن OLE غير منضم، مثل جدول بيانات Microsoft Excel في نموذج أو تقرير. استخدام هذا الأداة يؤدي إلى عرض نفس الكائن عند التنقل بين السجلات المختلفة.
الأداة 12: إطار كائن منضم
يستخدم لعرض كائنات OLE كسلسلة من الصور، في نموذج أو تقرير. وعنصر التحكم هذا خاص بالكائنات المخزنة في حقل في مصدر السجلات الأساسي للنموذج أو التقرير.
استخدام هذه الأداة يؤدي إلى عرض كائن مختلف في النموذج أو التقرير عند تنقلك من سجل إلى آخر.
الأداة 13: فاصل صفحات
يستخدم لبدء شاشة جديدة في نموذج، صفحة جديدة في نموذج مطبوع أو صفحة جديدة في تقرير.
الأداة 14: عنصر تحكم التبويب
تستخدم هذه الأداة لإنشاء نموذج أو مربع حوار متعدد التبويب يحتوي على أكثر من صفحة.
الأداة 15: نموذج فرعي / تقرير فرعي
تستخدم لعرض بيانات من أكثر من جدول في نموذج أو تقرير.
الأداة 16: تستخدم هذه الأداة لرسم خط داخل النموذج أو التقرير.
يستفاد من هذه الخطوط في تقسيم النموذج أو التقرير إلى مجموعات بحيث أن عناصر كل مجموعة تكون مرتبطة مع بعضها أو يكون لها نفس الهدف ومفصولة عن المجموعات الأخرى. كما يستفاد منها أيضا في تقسيم النموذج إلى مقاطع مختلفة على سبيل المثال.
الأداة 17: مستطيل
تستخدم هذه الأداة في التأثيرات الرسومية مثل تجميع مجموعة من عناصر التحكم المرتبطة.
الأداة 18: عناصر تحكم إضافية
تستخدم هذه الأداة في إضافة عناصر تحكم إضافية إلى المستند .
إنشاء قاعدة البيانات والجدول
شرح المثال العملي الذي يفترض أنكم قمتم بتحميله من الوصلة
Search.zip
سوف نتناول إن شاء الله في هذا الدرس والدروس القادمة معا خطوات تصميم قاعدة البيانات مع النموذج خطوة خطوة. فعلى بركة الله
الخطوة الأولى: افتح البرنامج
اتجه إلى قائمة ابدأ ثم البرامج ثم اختر منها برنامج إنشاء وتحرير قواعد البيانات الشهير Microsoft Access .
الخطوة الثانية: أنشئ قاعدة بيانات جديدة
ثم اتجه إلى قائمة ملف ثم جديد ثم اختر قاعدة بيانات فارغة ، سوف تظهر لك نافذة اسمها "ملف قاعدة بيانات جديدة" ، في خانة اسم الملف نكتب اسم قاعدة البيانات وهو في مثالنا هذا "قاعدة بيانات البحث عن أعضاء الموسوعة". انظر الصورة:
الخطوة الثالثة: تصميم قاعدة البيانات
وتعتبر هذه الخطوة أهم خطوة وهي أساس عملك في هذا الدرس.
تتكون قاعدة البيانات هذه من جدول واحد واستعلام واحد ونموذج واحد. سوف نتناول إنشاء كل منها واحدا تلو الآخر.
أولا: إنشاء جدول باسم "الأسماء"
والهدف من هذا الجدول هو إدخال بيانات أعضاء الموسوعة، كل عضو سوف ندخل له الاسم ورقم الهاتف الثابت.
من جهة اليمين حدد الكائن جداول ثم انقر على جديد في شريط الأدوات
ثم اختر طريقة عرض التصميم من نافذة "جدول جديد" ثم اضغط على موافق
يحتوي هذا الجدول على حقلين هما: "الاسم" و "رقم الهاتف الثابت"
بالنسبة للحقل الأول فنكتب:
اسم الحقل: الاسم
نوع البيانات: نص
خصائص الحقل:
حجم الحقل: 50
قاعدة ا