الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول joins في قاعدة بيانات طلاب

مغلق
بدأه زيد الرافدين في 8 يونيو 2006 · 4 رد · 631 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

وجدت موضوع حول joins لكني صراحة لم افهم عليه لاني صراحة ماافهمت الجداول التي يشرح عليها المثال

انا افهمتو اننا نستعمل joins لربط او لجلب معلومات من اكثر من جدول

طلبي هو

ممكن تعطوني مثال على الجداول التالية

عندي جدولين

اولا جدول الطلاب يحتوي على

ID : الرقم التسلسلي للطلاب وهو مفتاح اساسي

Name : اسم الطالب

ثانيا : جدول الدرجات يحتوي على

ID : الرقم التسلسلي للطلاب وهو مفتاح اساسي وهي نفس الارقام في جدول الطلاب ( واعتقد من الافضل ربط علاقة بين جدول ID في جدول الطلاب و بين جدول ID في جدول الدرجات )

mark : درجة الطالب

المطلوب عمل جملة sql تجلب اسم الطالب من جدول الطلاب ودرجة الطالب من جدول الدرجات عند ادخال ID طالب معين

واعتقد ننا لازم نستعمل joins في هذه الحالة

شكرا

#2

السلام عليكم

ابحث في الonline books عن كلمه joins و هتلاقي شرح بالتفصيل و سهل جدا

في مثالك محتاج inner join و هيه القيمه الافتراضيه لو استخدمت كلمه join فقط

select s.name,s.id,d.mark

from students s inner join degree d (on s.id = d.id)

تم تعديل هذه المشاركة بواسطة walcom في 10 يونيو 2006 في 12:20

#3

مشكور اخي احمد

بس هذا online books منين القيها ؟؟

انا استخدم نسخة sql server 2005 express

شكرا

#4

السلام عليكم ورحمة الله و بركاته أخي زيد :

قرأت سؤالك وفهمت أن العلاقات بين الجداول فيها مشكلة بالنسبة لك .. أليس كذلك ؟ إذا كان كذلك إقرأ ما كتبته لعله يفيدك في شيء ..

لاحظ معي :

أولاً : المفتاح الأساسي في جدول العلامات يا زيد يجب أن يكون هناك ما يدل على المادة كاسم المادة أو رقمها ... لذا افترض وجود حقل آخر و هو اسم المادة ..

حسناً إذاً ..

ثانياً : لو افترضنا أن تصميمك للجدولين السابقين صحيح .. فهذا ما يسمى في قواعد البيانات العلائقية (Relational Databases) بعلاقة رأس برأس ..

أي أن الطالب الواحد في جدول الطلاب له سجل مقابل وحيد في جدول العلامات يعني لكل طالب علامة كالتالي يا زيد :

=========================================================================
||--------------- جدول الطلاب ----------------||--------------------- جدول العلامات ---------------------||
=====================================||====================================||
||---ID  ---|--- name ------------------------------||--------------------------- ID -----|--- Mark ----||	
--------------------------------------------------------------------------------------------------------------

||--- 1 ----|--- Ahmad --------------------------->||--------------------------->1-----|----80--------||
||--- 2 ----|--- Samer --------------------------->||--------------------------->2-----|----75--------||
||--- 3 ----|--- saef ------------------------------>||--------------------------->3-----|----85--------||
||--- 4 ----|--- obaida --------------------------->||--------------------------->4-----|----89--------||

الإستعلام :

Select Std_TB.*, Mark_TB.Mark 
From Std_TB
INNER JOIN Mark_TB ON Mark_TB.ID = Std_TB.ID

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

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

=============================================================================
||--------------- جدول الطلاب ----------------||--------------------- جدول العلامات ---------------------||
=====================================||==================================||
||---ID  ---|--- name ------------------------------||--------------------------- ID -----|--- Mark ----||	
--------------------------------------------------------------------------------------------------------------
||--- 1 ----|--- Ahmad----------|----------------->||--------------------------->1-----|----80--------||
-----------------------------------\--------------->||--------------------------->1-----|----92--------||

||--- 2 ----|--- Samer----------------------------->||--------------------------->2-----|----75--------||
||--- 3 ----|--- saef------------------------------->||--------------------------->3-----|----85--------||
||--- 4 ----|--- obaida --------------------------->||--------------------------->4-----|----89--------||

الإستعلام سوف يبقى كالسابق :

Select Std_TB.*, Mark_TB.Mark 
From Std_TB
INNER JOIN Mark_TB ON Mark_TB.ID = Std_TB.ID

هذا النوع من الربط يا زيد يدعى الربط الداخلي المباشر ..

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

لأفترض يا زيد أنه لدينا في جدول الطلاب أسماء طلاب ليس لهم في جدول العلامات أي علامة ؟؟ فماذا ستجلب عبارة الإستعلام السابقة ياهل ترى؟؟؟؟

ستجلب الطلاب + علامات الطلاب الموجودة أرقامهم في جدول العلامات .. طيب ماذا سأفعل لأجلب الطلاب حتى ولو لم يكن لهم علامات ؟؟

عندها ستحدد ميل الربط يساراً يعني تكتب بدلاً من (INNER JOIN) العبارة (LEFT OUTER JOIN).. لكي تجلب عبارة الـ Select الطلاب جميعاً مع

علامات الطلاب الذين لهم علامات وليس لهم علامات في جدول العلامات .. فيصبح الإستعلام كالتالي :

Select Std_TB.*, Mark_TB.Mark 
From Std_TB
LEFT OUTER JOIN Mark_TB ON Mark_TB.ID = Std_TB.ID

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

أما إذا كان العكس يا زيد أي توجد علامات و ليس لها أي صاحب من الطلاب فسيكون حالة معاكسة و بالتالي بدل الربط اليساري (Left) يصبح الربط يميني خارجي :

(OUTER RIGHT JOIN) ومثال الإستعلام التالي :

Select Std_TB.*, Mark_TB.Mark 
From Std_TB
RIGHT OUTER JOIN Mark_TB ON Mark_TB.ID = Std_TB.ID

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

أتمنى أن أكون ساعدتك ..

تم تعديل هذه المشاركة بواسطة imadouzoun في 9 يونيو 2006 في 00:41

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#5

مشكور اخي

والله ماقصرت

يعطيك الف عافية

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…