در پایگاه دادههای رابطهای، دادهها معمولاً در چندین جدول ذخیره میشوند تا ساختار بهینه و سازمانیافتهای داشته باشند.
برای استخراج اطلاعات از سه جدول مرتبط، از INNER JOINهای متوالی استفاده میکنیم تا فقط دادههای مشترک بین جداول را نمایش دهیم.
در این مقاله، نحوه اتصال سه جدول مرتبط با استفاده از INNER JOIN در MySQL را بررسی میکنیم.
۱. چرا از INNER JOIN بین سه جدول استفاده میکنیم؟
✔ ترکیب دادهها از چندین جدول بهصورت کارآمد
✔ جلوگیری از تکرار دادهها و حفظ ساختار بهینه پایگاه داده
✔ افزایش سرعت جستجو و کاهش سربار پردازشی
✔ نمایش فقط دادههای مرتبط بدون وجود مقدارهای نامعتبر (NULL)
۲. سناریوی عملی برای INNER JOIN بین سه جدول
فرض کنید سه جدول زیر داریم:
- customers (مشتریان) → اطلاعات مشتریان
- orders (سفارشات) → سفارشهای مشتریان
- order_details (جزئیات سفارشات) → جزئیات هر سفارش، شامل محصولات و تعداد آنها
ساختار جداول:
۱. جدول customers (مشتریان)
CREATE TABLE customers (
customer_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL
);
customer_id | name |
---|---|
1 | علی احمدی |
2 | زهرا مرادی |
۲. جدول orders (سفارشات)
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
order_id | customer_id | order_date |
---|---|---|
101 | 1 | 2024-03-10 |
102 | 2 | 2024-03-15 |
۳. جدول order_details (جزئیات سفارشات)
CREATE TABLE order_details (
order_detail_id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT,
product_name VARCHAR(100),
quantity INT,
FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
order_detail_id | order_id | product_name | quantity |
---|---|---|---|
1 | 101 | لپتاپ | 1 |
2 | 101 | موس | 2 |
3 | 102 | گوشی | 1 |
۳. اجرای INNER JOIN بین سه جدول
برای نمایش اطلاعات نام مشتری، شماره سفارش، نام محصول و تعداد خریداری شده، از INNER JOIN بین این سه جدول استفاده میکنیم:
SELECT customers.name AS customer_name,
orders.order_id,
order_details.product_name,
order_details.quantity,
orders.order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
INNER JOIN order_details ON orders.order_id = order_details.order_id;
✅ نتیجه اجرای کوئری:
customer_name | order_id | product_name | quantity | order_date |
---|---|---|---|---|
علی احمدی | 101 | لپتاپ | 1 | 2024-03-10 |
علی احمدی | 101 | موس | 2 | 2024-03-10 |
زهرا مرادی | 102 | گوشی | 1 | 2024-03-15 |
۴. نحوه عملکرد INNER JOIN در این کوئری
INNER JOIN اول (customers و orders)
- این بخش اطلاعات مشتریانی را نمایش میدهد که سفارشی ثبت کردهاند.
- مشتریانی که سفارشی نداشته باشند، در نتیجه نمایش داده نخواهند شد.
INNER JOIN دوم (orders و order_details)
- این بخش فقط سفارشهایی را نمایش میدهد که جزئیات ثبت شده دارند.
- سفارشهایی که جزئیات ندارند، در خروجی نمایش داده نمیشوند.
۵. فیلتر کردن دادهها در INNER JOIN
میتوان با استفاده از WHERE، دادههای خاصی را فیلتر کرد. بهعنوان مثال، نمایش فقط سفارشات ثبتشده بعد از ۲۰۲۴-۰۳-۱۰:
SELECT customers.name AS customer_name,
orders.order_id,
order_details.product_name,
order_details.quantity,
orders.order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
INNER JOIN order_details ON orders.order_id = order_details.order_id
WHERE orders.order_date > '2024-03-10';
✅ نتیجه:
customer_name | order_id | product_name | quantity | order_date |
---|---|---|---|---|
زهرا مرادی | 102 | گوشی | 1 | 2024-03-15 |
۶. استفاده از INNER JOIN همراه با GROUP BY و COUNT
برای نمایش تعداد محصولات خریداری شده توسط هر مشتری، میتوان از GROUP BY و COUNT() استفاده کرد:
SELECT customers.name AS customer_name,
COUNT(order_details.order_detail_id) AS total_products
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
INNER JOIN order_details ON orders.order_id = order_details.order_id
GROUP BY customers.name;
✅ نتیجه:
customer_name | total_products |
---|---|
علی احمدی | 2 |
زهرا مرادی | 1 |
۷. مقایسه INNER JOIN با LEFT JOIN و RIGHT JOIN
نوع JOIN | توضیح |
---|---|
INNER JOIN | فقط رکوردهای منطبق در هر سه جدول را نمایش میدهد. |
LEFT JOIN | تمام رکوردهای جدول سمت چپ و دادههای منطبق از دو جدول دیگر را نمایش میدهد. |
RIGHT JOIN | تمام رکوردهای جدول سمت راست و دادههای منطبق از دو جدول دیگر را نمایش میدهد. |
✅ مثال LEFT JOIN: نمایش تمام مشتریان، حتی اگر سفارشی نداشته باشند.
SELECT customers.name, orders.order_id, order_details.product_name
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
LEFT JOIN order_details ON orders.order_id = order_details.order_id;
۸. نتیجهگیری
INNER JOIN در MySQL روشی مؤثر برای اتصال دادههای سه جدول مرتبط است. با استفاده از INNER JOIN متوالی میتوان اطلاعات منظم و دقیق از چندین جدول دریافت کرد.
نکات کلیدی:
✅ INNER JOIN فقط رکوردهای مشترک بین جداول را نمایش میدهد.
✅ میتوان INNER JOIN را با چندین جدول ترکیب کرد.
✅ استفاده از GROUP BY و COUNT() برای تحلیل دادهها مفید است.
✅ LEFT JOIN و RIGHT JOIN میتوانند برای نمایش تمام دادههای یک جدول استفاده شوند.
با استفاده صحیح از INNER JOIN، میتوانید دادههای خود را بهینه و کارآمد مدیریت کنید! 🚀