PostgreSQL أنواع الوصلات: داخلية، خارجية، يسارية، يمينية

⚡ ملخص ذكي

PostgreSQL تقوم عمليات الربط باسترداد ودمج الصفوف من جدولين أو أكثر باستخدام مفتاح مشترك، وتشمل عمليات الربط الداخلية مثل theta و EQUI و natural، بالإضافة إلى عمليات الربط الخارجية التي تغطي النتائج اليسرى واليمنى والكاملة.

  • 🔗 الجمع بين: تقوم عمليات الربط بدمج الأعمدة من جداول متعددة بناءً على مفتاح مشترك.
  • 🎯 صلة داخلية: تُرجع عمليات الربط الداخلي فقط الصفوف التي يتحقق فيها شرط الربط.
  • ⬅️ الانضمام الأيسر: يحتفظ LEFT OUTER JOIN بكل صف من صفوف الجدول الأيسر، ويضيف قيم NULL للصفوف اليمنى غير المتطابقة.
  • ➡️ الانضمام الأيمن: يحتفظ RIGHT OUTER JOIN بكل صف من صفوف الجدول الأيمن، ويضيف قيم NULL للصفوف اليسرى غير المتطابقة.
  • ؟؟؟؟ الانضمام الكامل: تُعيد عملية الربط الخارجي الكامل جميع الصفوف من كلا الجدولين مع القيم الفارغة (NULL) حيث لا يوجد تطابق.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم المساعدات الذكية باختيار نوع الربط الصحيح وكتابة شرط التشغيل.

PostgreSQL أنواع الانضمام

ما هي الانضمامات في PostgreSQL?

PostgreSQL ينضم تُستخدم هذه العمليات لاسترجاع البيانات من أكثر من جدول. باستخدام عمليات الربط (JOIN)، يُمكننا دمج عبارات SELECT وJOIN في عبارة واحدة. يُضاف شرط الربط إلى العبارة، وتُعاد جميع الصفوف التي تُحقق هذا الشرط. تُدمج القيم من الجداول المختلفة بناءً على الأعمدة المشتركة، والتي غالبًا ما تكون مفتاحًا أساسيًا في الجدول الأول ومفتاحًا خارجيًا في الجدول الثاني.

PostgreSQL أنواع الانضمام

هناك نوعان من الانضمامات PostgreSQL:

  • ينضم الداخلية
  • ينضم الخارجية

PostgreSQL صلة داخلية

هناك 3 أنواع من الانضمامات الداخلية PostgreSQL:

  • ثيتا ينضم
  • صلة طبيعية
  • الانضمام إلى EQUI

ثيتا انضم

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

صلة ثيتا هي النوع الأساسي من JOIN. سيعيد كافة الصفوف من الجداول حيث يتم استيفاء شرط JOIN.

بناء الجملة:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

خذ بعين الاعتبار الجداول التالية لقاعدة بيانات العرض التوضيحي:

كتاب:

PostgreSQL ثيتا انضم

السعر:

PostgreSQL ثيتا انضم

نريد أن نرى اسم كل كتاب والسعر المقابل له، يمكننا تشغيل الأمر التالي:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

سيؤدي هذا إلى إرجاع ما يلي:

PostgreSQL ثيتا انضم

3 صفوف فقط استوفت شرط الانضمام.

انضم إلى EQUI

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

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

سيؤدي هذا إلى إرجاع ما يلي:

PostgreSQL انضم إلى EQUI

تم إرجاع السجلات من كلا الجدولين بناءً على الأعمدة المشتركة، أي عمود المعرف.

انضمام طبيعي

يوفر لنا هذا النوع من الارتباط طريقة أخرى لكتابة صلة EQUI. يمكننا تحسين مثالنا السابق بإضافة الكلمة الأساسية NATURAL كما هو موضح أدناه:

SELECT *
FROM Book
NATURAL JOIN Price;

سيؤدي هذا إلى إرجاع ما يلي:

PostgreSQL انضمام طبيعي

تم إرجاع عمود معرف واحد فقط. تمكنت NATURAL JOIN من ملاحظة أن عمود المعرف شائع في الجدولين. تم إرجاع واحد فقط.

PostgreSQL الانضمام الخارجي

هناك 3 أنواع من الانضمامات الخارجية PostgreSQL:

  • ترك صلة خارجية
  • حق الانضمام الخارجي
  • وصلة خارجية كاملة

PostgreSQL ترك صلة خارجية

ستعيد LEFT OUTER JOIN جميع الصفوف في الجدول على الجانب الأيسر وفقط الصفوف الموجودة في الجدول على الجانب الأيمن حيث تم استيفاء شرط الربط.

بناء الجملة:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

نحتاج إلى رؤية اسم كل كتاب والسعر المقابل له. يمكننا تشغيل الأمر التالي:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

هذا يعيد ما يلي:

PostgreSQL ترك صلة خارجية

تم إرجاع كافة الصفوف الأربعة الموجودة في جدول الكتاب. ثلاثة صفوف فقط من جدول الأسعار استوفت شرط الانضمام. ومن ثم تم إعادتهم. الكتاب الأخير ليس له قيمة سعرية مقابلة.

PostgreSQL حق الانضمام الخارجي

تقوم RIGHT OUTER JOIN بإرجاع جميع الصفوف في الجدول على الجانب الأيمن والصفوف الموجودة في الجدول على الجانب الأيسر حيث تم استيفاء شرط الربط.

بناء الجملة:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

فمثلا:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

هذا يعيد ما يلي:

PostgreSQL حق الانضمام الخارجي

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

الانضمام الخارجي الكامل PostgreSQL

سيعيد هذا النوع من JOIN جميع الصفوف في الجدول على الجانب الأيسر وجميع الصفوف في الجدول على الجانب الأيمن مع القيم الخالية حيث لا يتم استيفاء شرط الربط.

بناء الجملة:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

فمثلا:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

هذا يعيد ما يلي:

PostgreSQL وصلة خارجية كاملة

تم إرجاع كافة الصفوف من كافة الجداول، مع القيم الخالية حيث لم يتم العثور على أي تطابق.

باستخدام pgAdmin

يمكن إنجاز المهام المذكورة أعلاه في pgAdmin كما يلي. تشرح الأقسام التالية كل نوع من أنواع الربط خطوة بخطوة.

pgAdmin الانضمام الداخلي

توضح الخطوات التالية كيفية تشغيل كل نوع من أنواع الربط الداخلي في pgAdmin.

كيفية استخدام ثيتا انضم إلينا PostgreSQL باستخدام pgAdmin

فيما يلي خطوات استخدام ثيتا جوين PostgreSQL باستخدام pgAdmin:

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك

افتح pgAdmin وقم بتسجيل الدخول باستخدام بيانات الاعتماد الخاصة بك

الخطوة 2) إنشاء قاعدة بيانات تجريبية

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

pgAdmin الانضمام الداخلي

الخطوة 3) اكتب الاستعلام

اكتب الاستعلام أدناه في محرر الاستعلام:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

الخطوة 4) تنفيذ الاستعلام

انقر فوق الزر "تنفيذ".

pgAdmin الانضمام الداخلي

ينبغي أن يعود ما يلي:

pgAdmin الانضمام الداخلي

انضم إلى EQUI

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

انضم إلى pgAdmin EQUI

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

الخطوة 4) انقر فوق الزر "تنفيذ".

انضم إلى pgAdmin EQUI

ينبغي أن يعود ما يلي:

انضم إلى pgAdmin EQUI

انضمام طبيعي

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

pgAdmin الانضمام الطبيعي

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT *
FROM Book
NATURAL JOIN Price;

الخطوة 4) انقر فوق الزر "تنفيذ".

pgAdmin الانضمام الطبيعي

ينبغي أن يعود ما يلي:

pgAdmin الانضمام الطبيعي

pgAdmin الانضمام الداخلي البسيط

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

pgAdmin الانضمام الداخلي البسيط

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

الخطوة 4) انقر فوق الزر "تنفيذ".

pgAdmin الانضمام الداخلي البسيط

ينبغي أن يعود ما يلي:

pgAdmin الانضمام الداخلي البسيط

الانضمام الخارجي pgAdmin

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

ترك صلة خارجية

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

pgAdmin الانضمام الخارجي الأيسر

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

الخطوة 4) انقر فوق الزر "تنفيذ".

pgAdmin الانضمام الخارجي الأيسر

ينبغي أن يعود ما يلي:

pgAdmin الانضمام الخارجي الأيسر

حق الانضمام الخارجي

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

pgAdmin الانضمام الخارجي الأيمن

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

الخطوة 4) انقر فوق الزر "تنفيذ".

pgAdmin الانضمام الخارجي الأيمن

ينبغي أن يعود ما يلي:

pgAdmin الانضمام الخارجي الأيمن

وصلة خارجية كاملة

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  • من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  • انقر فوق العرض التوضيحي.

pgAdmin الانضمام الخارجي الكامل

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

الخطوة 4) انقر فوق الزر "تنفيذ".

pgAdmin الانضمام الخارجي الكامل

ينبغي أن يعود ما يلي:

pgAdmin الانضمام الخارجي الكامل

قم بتنزيل قاعدة البيانات المستخدمة في هذا البرنامج التعليمي

الأسئلة الشائعة

تُعيد عملية الربط الداخلي (INNER JOIN) الصفوف المتطابقة فقط في كلا الجدولين. أما عملية الربط الخارجي (OUTER JOIN) فتحتفظ أيضاً بالصفوف غير المتطابقة، وتملأ الأعمدة المفقودة بقيمة NULL، ويمكن أن تكون يسارية أو يمينية أو كاملة حسب الجدول الذي يتم الاحتفاظ به.

تجمع عملية الربط (JOIN) أعمدة من جداول مختلفة جنبًا إلى جنب باستخدام مفتاح مطابق، مما يؤدي إلى توسيع كل صف. أما عملية الاتحاد (UNION) فتُرصّ صفوف مجموعتي النتائج عموديًا وتتطلب نفس عدد الأعمدة.

يربط الربط الذاتي جدولاً بنفسه باستخدام اسمين مستعارين للجدول. وهو مفيد لمقارنة الصفوف داخل جدول واحد، مثل مطابقة الموظفين مع المديرين المخزنين في نفس الجدول.

تُعيد عملية الربط المتقاطع (CROSS JOIN) حاصل الضرب الديكارتي، حيث تربط كل صف من الجدول الأول بكل صف من الجدول الثاني. ولا تستخدم هذه العملية أي شرط تشغيل (ON)، لذا يمكنها إنتاج مجموعات نتائج كبيرة جدًا بسرعة.

نعم. يمكنك ربط عدة عبارات JOIN في استعلام واحد، وإضافة كل جدول إضافي بشرط JOIN و ON آخر. PostgreSQL يقوم بتقييمها من أجل بناء مجموعة نتائج واحدة مدمجة.

تقترح المساعدات المدعومة بالذكاء الاصطناعي مثل GitHub Copilot نوع الربط الصحيح، وتكتب شرط التشغيل من المفاتيح الخارجية، وتشير إلى الشرط المفقود الذي قد يتسبب في حدوث ضرب ديكارتي عرضي، مما يقلل من أخطاء الربط الشائعة.

نعم. يمكن للمساعدين المدعومين بالذكاء الاصطناعي قراءة خطة الاستعلام، واقتراح فهارس على أعمدة الربط، وإعادة كتابة ترتيب الربط أو الشروط. مع ذلك، لا تزال قاعدة البيانات تحرص على صحة البيانات، لذا يُرجى مراجعة كل اقتراح قبل تطبيقه في بيئة الإنتاج.

لا توجد عملية ربط واحدة هي الأسرع دائمًا؛ فالأداء يعتمد على الفهارس وعدد الصفوف والمرشحات. عادةً ما تكون عمليات الربط الداخلي (INNER JOIN) على المفاتيح المفهرسة فعالة، بينما تميل عمليات الربط الخارجي الكامل (FULL OUTER JOIN) على الجداول الكبيرة غير المفهرسة إلى أن تكون الأكثر تكلفة.

تلخيص هذه التدوينة بـ: