codefinder

ما هى ال joins ؟ و ما انواعها و فيما تستخدم ؟

5 ردود في هذا الموضوع

بسم الله الرحمن الرحيم

اخوانى الاعزاء واجهتنى مشكلة كبيرة مع الـ joins و للاسف انا غير متقدم فى مستوى اللغة الانجليزية و لا اعلم

ما الفكرة العامة للـ joins .

فاذا امكن من اى عضو لة خلفية كاملة عن الـ joins فارجوا ان يقم بالاجابة على الاسئلة التى بنهايتها سوف تكون مرجع لكل

من تقف امامة عملية الربط او الـ ( joins ) .

- الاسئلة :

1- ما هى ال joins ؟

2- ما انواع الـ joins و الفرق بينهم فى الاستخدام ؟

و شكرا ً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أولا أعتذر عن التأخر في الإجابة على السؤال

بالنسبة للjoins:

الجداول المرتبطة joined tables هي مجموعة بيانات ناتجة من عمليات ربط تمت بين جدولين أو أكثر ، ولها عدة أنواع:

1- الربط الداخلي inner join ، وهو النوع الافتراضي ، ويحدد أنه إذا كان سجلان متوافقان من جدولين مختلفين ، ولكنهما يوافقان شرط ON الذي يربط بينهما، فعندئذ يجب تضمينهما في مجموعة البيانات ، وإلا يهملان، مثلا:

SELECT   s.stor_id, d.discounttype
FROM     stores s JOIN discounts d
ON       s.stor_id = d.stor_id

هنا يتم دمج الجدولين stores و discounts ليتم تحديد أي المخازن يوفر تخفيضا على بضائعه ، وعرض نوع التخفيض، نلاحظ أن هذا الاستعلام يمكن كتابته بطريقة أخرى هي:

 select s.store_id, d.discounttype 
from stores s, discounts d
where s.store_id=d.store_id

2- الربط الخارجي الكامل، full Outer join ويحدد أن السجلات غير المتطابقة (التي لا تحقق شرط ON) والسجلات المتطابقة (التي تحقق الشرط) هي التي يتم اختيارها جميعا. بالنسبة للسجلات غير المتطابقة ستظهر القيمة null فيها ، وفي مثالنا هذا ، ظهور القيمة Null تعني أن المخزن المعين لا يوفر أي تخفيضات على بضائعه. وذلك لأن القيمة store_id في السجل من جدول stores لا تطابق قيمة store_id في السجل من جدول discounts ، مثلا:

SELECT   s.stor_id, d.discounttype
FROM     stores s FULL OUTER JOIN discounts d
ON       s.stor_id = d.stor_id

3- الارتباط الخارجي الأيسر left outer join يرجع السجلات المطابقة للشرط ، ومعها كل السجلات من الجدول المحدد يسار كلمة join ، مثلا:

SELECT   s.stor_id, d.discounttype
FROM     stores s LEFT OUTER JOIN discounts d
ON       s.stor_id = d.stor_id

أيضا ستظهر القيمة null في حقل discounttype في السجلات التي قيمة store_id فيها لاتوافق لشرط الارتباط join.

4- الارتباط الخارجي الأيمن right outer join ، ويرجع السجلات المطابقة للشرط ، ومعها كل السجلات من الجدول المحدد يمين كلمة join ، مثلا:

SELECT   s.stor_id, d.discounttype
FROM     stores s RIGHT OUTER JOIN discounts d
ON       s.stor_id = d.stor_id

هنا ستظهر القيمة null في كل السجلات من جدول discounttype التي لا تمتلك قيمة store_id مطابقة في جدول stores ، وتحديدا في الحقل store_id ، بينما في السابق كانت تظهر في الحقل discounttype .

5- الارتباط المتقاطع cross join ، وهو حاصل الاختيار من كلا من الجدولين في حالة عدم تحديد فقرة where ، وفي هذه الحالة يتم ربط كل سجل من الجدول الأول مع كل سجل في الجدول الثاني ، لذا فعدد السجلات الناتجة من تطبيق مثل هذا الاستعلام = عدد سجلات الجدول الأول مضروبا في عدد سجلات الجدول الثاني ، أو بصورة أخرى يعادل الحاصل الكارتيزي cartesian product لسجلات كلا الجدولين.

أما في حالة تحديد فقرة where فسيكون مثل الربط الداخي inner join.

مثلا

SELECT   *  FROM     stores CROSS JOIN sales

ويعادل

SELECT   * FROM     stores, sales

ولتجنب كثرة المعلومات نتيجة الاستعلام يفضل استعمال فقرة where ، مثلا:

SELECT   *
FROM     sales CROSS JOIN stores
WHERE    sales.stor_id = stores.stor_id

هذه الجملة ستضيق نطاق البحث كثيرا، ولتضييقه أكثر حدد حقولا معينة ، بدلا من اختيار جميع الحقول، مثلا:

SELECT   sales.stor_id, stores.city
FROM     sales CROSS JOIN stores
WHERE    sales.stor_id = stores.stor_id

(مترجم من كتاب SQL server administrators companion)

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

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

اخى العزيز " walcom "

فى البداية انا أعتز على تأخرى فى الرد على المشاركة و لكن هناك بعض المشاكل التى تواجهنى و ارجوا من الله ان يوفقنى فيها

بالنسبة لاعتزارك اخى الفاضل (((( فلا يهم التأخير و لكن الاهم هو الوصول للمعلومة ))))

فلا تعتزر اخى الفاضل على شئ بسيط كهذا و ارجوا من الله ان يوفقق فيما ان فية

اخى الفاضل و الله انى اواجهة مشكل مع (( الـ joins )) و لكن هل الربط الداخلى يفى

بالغرض بحيث انى باستخدام بعض الفروض يمكننى من الوصول الى البيانات المطلوبة فهل هذا كلام صحيح ؟؟

و اشكرك اخى الفاضل على و ضع الشرح الوافى للانواع و لكننى اعترف انى ( غبى ) فارجوا منك ان توضح لى اكثر الجزء الخاص بالربط الخارجى (( ما سوف يعود على من الإستعلام من خلال هذا الكود )) فقط لا غير

شكرا ً و اسف للإطالة

السلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخ codefinder

لاتشغل بالك كثيرا بالربط الخارجي ، نسبة لأن نتائج البحث فيه متخمة بقيم null ونتائج بحث لا تحتاج لها ولا داعي لها، والربط الداخلي يفي تمام بالغرض.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

اخى العزيز اشكرك

و سوف اضع لك مشاركة جديدة بها سؤال جديد

و شكرا ً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .