لقد قرأ العديد منكم المقالة السابقة حول كيفية التصور غير الصحيح لشرح كيفية عمل JOINs يمكن أن يكون مربكا في بعض الحالات. لا تستطيع دوائر Venn توضيح نقاط معينة تمامًا ، على سبيل المثال ، في حالة تكرار القيم في الجدول.
استعدادًا لتسجيل العدد السادس من بودكاست Zinc Prod (حيث اتفقنا على مناقشة المقال) ، يبدو أنني تمكنت من العثور على إصدار واحد مثير للاهتمام من التصور. بالإضافة إلى ذلك ، تم تقديم خيار مماثل أيضًا في التعليقات على المقالة الأصلية.
الجميع مدعوون تحت الخفض
لذلك ، التصور. كما اكتشفنا في التعليقات على المقال السابق ، إن الانضمام هو منتج ديكارت أكثر من تقاطع. إذا نظرت إلى كيفية توضيح المنتج الديكارتي ، فيمكنك أن ترى أنه غالبًا ما يكون جدولًا مستطيلًا ، حيث تسير العلاقة الأولى على محور واحد والثاني على طول الآخر. وبالتالي ، فإن عناصر الجدول تكون جميع مجموعات من كل شيء.
من الصعب استخلاصها بصورة مجردة ، لذلك يجب أن تكون قدوة.
دعنا نقول لدينا جدولين. في واحد منهم
id -- 1 1 6 5
في مكان آخر:
id -- 1 1 2 3 5
إخلاء المسؤولية فورًا: دعوت الحقل بكلمة "id" لفترة قصيرة. كثيرون في المقالة الأخيرة كانوا ساخطين ، لأنه - معرف تكرار ، عار. لا تقلق كثيرا ، حسنا
تخيل ، على سبيل المثال ، أن هذا جدول يحتوي على إحصاءات يومية ، حيث توجد بيانات عن زيارة موقع لكل يوم ولكل مستخدم. بشكل عام ، وليس هذه النقطة.
لذلك ، نريد أن نعرف ما يحدث مع صلات الجدول المختلفة. لنبدأ مع CROSS JOIN:
الصليب الانضمام
SELECT t1.id, t2.id FROM t1 CROSS JOIN t2
CROSS JOIN هي كل المجموعات الممكنة التي يمكن استلامها من جدولين.
يمكن تصور ذلك على النحو التالي: على المحور السيني - جدول واحد ، على المحور ص - آخر ، جميع الخلايا بداخله (مظللة باللون البرتقالي) - هذه هي النتيجة

الداخلية انضم
إن INNER JOIN (أو فقط JOIN) هي نفس CROSS JOIN التي تحتوي فقط على العناصر التي تفي بالشروط المكتوبة في بنية "ON". انتبه إلى الموقف عند تكرار السجلات - ستكون هناك أربع نتائج مع الوحدات.
SELECT t1.id, t2.id FROM t1 INNER JOIN t2 ON t1.id = t2.id

اليسار اليسار
LEFT OUTER JOIN (أو LEFT JOIN فقط) هو نفسه INNER JOIN ، لكن بالإضافة إلى ذلك ، نضيف لاغية للصفوف من الجدول الأول ، والتي لم يعثر عليها في الثانية
SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id

الانضمام الصحيح
JOIN RIGHT OINTER (أو JOIN RIGHT) هي نفس LEFT JOIN ، تماماً عكس ذلك. أي هذا هو INNER JOIN + null بالنسبة للصفوف من الجدول الثاني ، والذي لم يتم العثور على أي شيء في الأول
SELECT t1.id, t2.id FROM t1 RIGHT JOIN t2 ON t1.id = t2.id

→ يمكنك اللعب مع الطلبات هنا
النتائج
يبدو أنه تصور بسيط. على الرغم من وجود قيود: فهو يوضح الحالة عند كتابة المساواة في ON وليس شيئًا خادعًا (أي تعبير منطقي). بالإضافة إلى ذلك ، لم يتم النظر في الحالة التي يكون فيها null ضمن قيم الجدول. أي هذا لا يزال بعض التبسيط ، ولكن يبدو أنه قد تحول بشكل أفضل وأكثر دقة من دوائر Venn.
اشترك في بودكاست Zinc Prod الخاص بنا ، حيث نناقش قواعد البيانات وتطوير البرامج وأشياء أخرى مثيرة للاهتمام.