هذه المقالة موجهة للأشخاص الذين يعرفون أساسيات SQL ولكنهم لا يفهمون JOIN بشكل جيد، أو الذين يريدون مراجعة ما نسوه. المحتوى يتناول مفهوم الـ INNER JOIN والـ OUTER JOIN، وبعد ذلك سنقوم بتطبيقه باستخدام MySQL.
ما هو INNER JOIN؟
الـ INNER JOIN
في SQL هو وظيفة مهمة جدًا تستخدم لربط عدة جداول واسترجاع البيانات ذات الصلة. يتيح لنا ذلك دمج بيانات من جدولين أو أكثر بشكل فعال والحصول على المعلومات اللازمة في مجموعة نتائج واحدة. هذه العملية ضرورية بشكل خاص عند استخدام عدة جداول في قاعدة البيانات تحتوي على علاقات.
INNER JOIN
صعب. في مثل تلك الحالات، يمكنك الاستفادة من Apidog لإجراء تصحيح الأخطاء واختبار الـ API بكفاءة، مما يجعل من السهل التحقق من سلوك استعلامات SQL ودمج البيانات. Apidog هو أداة قوية تعزز من إمكانية تصور واختبار الـ API وتساعد على تشخيص المشاكل في قاعدة البيانات بسرعة. يمكن للمبتدئين استخدامه بسهولة، مما يزيد بشكل كبير من فعالية التطوير. قم الآن بتنزيل Apidog وجرب تجربة جديدة في اختبار قاعدة البيانات والـ API!
بيئة التنفيذ
في هذه المقالة، سنوضح استخدام INNER JOIN
الأساسي باستخدام MySQL. النموذج الأساسي هو نفسه حتى في RDBMS الأخرى (مثل PostgreSQL و SQL Server)، ولكن يمكن أن يكون هناك اختلافات طفيفة، لذا تأكد من مراجعة بناء الجملة بناءً على البيئة التي تستخدمها.
إنشاء الجداول
قبل استخدام INNER JOIN
، تحتاج أولاً إلى إنشاء جدول لتخزين البيانات. على سبيل المثال، نقوم بإعداد جدول employees
(الموظفين) و جدول departments
(الأقسام) كما يلي:
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
بهذه الطريقة، يمكنك ربط department_id
في جدول employees
مع department_id
في جدول departments
، مما يتيح لك دمج كلا الجدولين.
البناء الأساسي
البناء الأساسي لـ INNER JOIN
هو كما يلي:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
في هذا البناء، يتم ربط جدولين table1
و table2
بواسطة INNER JOIN
، باستخدام كلمة ON
لدمج الصفوف بناءً على العمود المشترك (المفتاح).
الاستخدام الأساسي
على سبيل المثال، إذا كنت ترغب في استرجاع معلومات الموظفين مع أسماء الأقسام، يمكنك استخدام INNER JOIN
كما يلي:
SELECT employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
هذا الاستعلام يقوم بدمج عمود employee_name
من جدول employees
مع عمود department_name
من جدول departments
، مما يتيح لك معرفة أي قسم ينتمي إليه كل موظف.
الاختلاف بين OUTER JOIN و INNER JOIN
عادة ما تتم مقارنة INNER JOIN
مع OUTER JOIN
. يشمل OUTER JOIN
ثلاثة أنواع إضافية ( LEFT JOIN
، RIGHT JOIN
، FULL JOIN
)، لكن INNER JOIN
يعيد فقط البيانات المطابقة للشرط المحدد. على سبيل المثال، إذا كان هناك موظف في جدول employees
وليس له قسم محدد، فلن يتم تضمينه في النتائج عند استخدام INNER JOIN
.
باستخدام OUTER JOIN
، يمكنك تضمين البيانات التي لا تتوافق مع الشروط عن طريق إرجاع قيم NULL. إليك مثالاً عن استخدام LEFT JOIN
:
SELECT employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
في حالة استخدام LEFT JOIN
، حتى لو لم يكن هناك قسم له علاقة بالموظف، سيتم عرض اسم الموظف، وسيتم عرض اسم القسم كـ NULL.
مثال تطبيقي: إرسال تنسيق جسم الطلب
مثال 1: إرسال البيانات كـ application/x-www-form-urlencoded
دعونا نلقي نظرة على كيفية استخدام application/x-www-form-urlencoded
كتنسيق لجسم طلب API. يسهل هذا الأمر إرسال بيانات النموذج المشفرة في URL.
POST /api/user
Content-Type: application/x-www-form-urlencoded
username=johndoe&email=john@example.com
في هذا التنسيق، يتم إرسال البيانات كأزواج key=value
، حيث تفصل المجالات المتعددة بـ &
. مثل INNER JOIN
يمكنك ربط جداول متعددة لاسترجاع البيانات الضرورية بشكل فعال.
مثال 2: إرسال البيانات كـ application/json
من جهة أخرى، إذا كنت تستخدم application/json
، سيتم إرسال جسم الطلب بتنسيق JSON. تعتبر هذه الطريقة مريحة لتمثيل البيانات هيكليًا، خاصةً عند إرسال بيانات معقدة.
POST /api/user
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com"
}
يسمح لك هذا التنسيق بالحفاظ على هيكل بيانات معقد أثناء إرسال المعلومات إلى API.
استخدام Apidog لتعزيز تفاعل API
Apidog هو أداة مفيدة جدًا لاختبار API وتصحيح الأخطاء. عند التعامل مع استعلامات معقدة مثل INNER JOIN
، من المهم التحقق من استجابة API وطلبات البيانات. باستخدام Apidog، يمكنك رؤية محتوى جسم الطلب وردود الاستجابة بصريًا، مما يساعدك في اكتشاف الأخطاء بسرعة. يكون هذا مفيدًا خصوصًا عند دمج عدة جداول أو عند إرسال بيانات بتنسيق JSON.
قواعد البيانات الممكنة للاتصال بها عبر Apidog
يدعم Apidog أيضًا قواعد البيانات التي تعتبر شائعة اليوم. دعونا نقدم لكم الأنواع المدعومة من قواعد البيانات في Apidog.
- MySQL
- SQL Server
- Oracle
- PostgreSQL
- ClickHouse
- MongoDB
كيفية توصيل API بقاعدة البيانات عبر Apidog
الخطوة 1: أثناء اختبار API، يمكنك استخدام عمليات قاعدة البيانات من خلال إعدادات "المعالجة السابقة" و "المعالجة اللاحقة".

الخطوة 2: قم بإعداد قاعدة البيانات. هنا يمكنك إضافة قاعدة بيانات جديدة من خلال خيار الاتصال بقاعدة البيانات. أدخل المعلومات اللازمة للاتصال بقاعدة البيانات كما هو موضح في الصورة أدناه.

الإجراء: استرجاع بيانات قاعدة البيانات والتحقق من ردود الأفعال
الخطوة 1: أدخل أمر SQL لتحديد البيانات المستهدفة والإجراء اللازم. على سبيل المثال: "SELECT * FROM departments WHERE department_id = 1;" يمكنك إدخال هذا الأمر لاسترجاع بيانات المستخدمين الذين لديهم department_id = 1
من جدول الأقسام.

ملاحظة: قم بتفعيل خيار عرض النتائج في وحدة التحكم ثم انقر فوق زر إرسال وستظهر لك البيانات التي تم استرجاعها من قاعدة البيانات في وحدة التحكم.
الخطوة 2: من خلال خيار استخراج النتائج في المتغيرات، يمكنك إدخال اسم المتغير وصيغة JSONPath للاحتفاظ بالبيانات المسترجعة من قاعدة البيانات كمتغيرات بيئة في Apidog، سواء كانت متغيرات عالمية أو محلية.

الخطوة 3: بعد إعداد المتغيرات، انقر فوق زر إرسال لحفظ المتغيرات. يمكنك الآن النقر فوق أيقونة إعدادات البيئة في الزاوية العلوية اليمنى لترى المتغيرات المحفوظة.

علاوة على ذلك، باستخدام ميزة Assertions في Apidog، يمكنك أيضًا التحقق مما إذا كانت استجابة API المسترجعة تتطابق مع بيانات قاعدة البيانات، مما يجعلها ميزة مفيدة جدًا لضمان تصحيح وظائف API وجودتها.

عند إعداد Assertions، سيتحقق Apidog تلقائيًا مما إذا كانت البيانات المعادة في الاستجابة تتطابق مع بيانات قاعدة البيانات.

الخاتمة
باستخدام INNER JOIN
، يمكنك ربط البيانات ذات الصلة من عدة جداول للحصول على معلومات أكثر ثراءً. الـ INNER JOIN
هو ميزة قوية جدًا ولا غنى عنها عند بناء استعلامات معقدة. عند استخدام قاعدة البيانات، يمكنك تحقيق استرجاع البيانات بشكل فعال من خلال استخدام INNER JOIN
بشكل مناسب. لذا فإن إتقان INNER JOIN
يعد أمرًا بالغ الأهمية في عمليات قاعدة البيانات.
الأسئلة الشائعة: FAQ حول INNER JOIN
1. ما الفرق بين INNER JOIN
وLEFT JOIN
؟
- الإجابة:
INNER JOIN
يعيد فقط البيانات المشتركة بين الجدولين، بينماLEFT JOIN
يعيد كافة البيانات من الجدول الأيسر والبيانات المطابقة من الجدول الأيمن، وإذا لم توجد بيانات متطابقة على اليمين، يعود بـNULL
.
2. ماذا تفعل إذا لم يظهر أي نتيجة عند استخدام INNER JOIN
؟
- الإجابة: قد يكون هناك احتمال لعدم وجود بيانات تتطابق مع شرط الربط في كلا الجدولين. تحقق مرة أخرى من شرط الربط والبيانات، وتأكد من وجود البيانات المطلوبة.
3. ماذا يحدث إذا نسيت شرط الربط عند استخدام INNER JOIN
؟
- الإجابة: شرط الربط ضروري في
INNER JOIN
. إذا لم تحدد الشروط، فستحصل على خطأ SQL. تأكد دائمًا من تحديد شرط الربط المناسب باستخدام جملةON
.
4. هل INNER JOIN
و JOIN
لهما نفس المعنى؟
- الإجابة: نعم،
INNER JOIN
وJOIN
لهما نفس المعنى بشكل أساسي.INNER JOIN
هو تعبير صريح، بينماJOIN
هو اختصار ينفذ الربط الداخلي بشكل افتراضي.
5. عند القيام بـ INNER JOIN
لعدة جداول، هل الترتيب مهم؟
- الإجابة: يمكن أن يؤثر ترتيب الربط على الأداء. عادةً ما يكون من الأكثر كفاءة البدء بجدول أصغر. تحقق من خطة تنفيذ الاستعلام واختر الترتيب الأنسب.