در پایگاه دادههای رابطهای مانند MySQL، از JOIN برای ترکیب دادههای چندین جدول استفاده میشود.
یکی از پرکاربردترین انواع JOIN، LEFT JOIN است که تمام رکوردهای جدول چپ را نمایش میدهد، حتی اگر در جدول راست مقدار منطبق نداشته باشد.
در این مقاله، مفهوم LEFT JOIN، نحوه عملکرد آن، مثالهای کاربردی و تفاوت آن با سایر JOINها را بررسی خواهیم کرد.
۱. LEFT JOIN چیست؟
LEFT JOIN تمام رکوردهای جدول چپ (اولین جدول در دستور JOIN) را نمایش میدهد و در صورت وجود دادههای منطبق در جدول راست، آنها را اضافه میکند.
🔹 اگر در جدول راست تطابقی وجود نداشته باشد، مقدار NULL در خروجی نمایش داده میشود.
ساختار کلی دستور LEFT JOIN:
SELECT column_names
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column;
✅ table1 → جدول چپ (تمام رکوردهای آن نمایش داده میشوند)
✅ table2 → جدول راست (فقط دادههای منطبق نمایش داده میشوند، در غیر این صورت مقدار NULL خواهد بود)
۲. مثال عملی از LEFT JOIN
فرض کنید دو جدول داریم:
۱. جدول customers (مشتریان)
CREATE TABLE customers (
customer_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL
);
customer_id | name |
---|---|
1 | علی احمدی |
2 | زهرا مرادی |
3 | رضا نوری |
۲. جدول 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 | 1 | 2024-03-15 |
103 | 2 | 2024-03-20 |
۳. اجرای کوئری LEFT JOIN
SELECT customers.name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
✅ نتیجه اجرای کوئری:
name | order_id | order_date |
---|---|---|
علی احمدی | 101 | 2024-03-10 |
علی احمدی | 102 | 2024-03-15 |
زهرا مرادی | 103 | 2024-03-20 |
رضا نوری | NULL | NULL |
🔹 توضیح:
- تمام مشتریان نمایش داده شدهاند، حتی رضا نوری که سفارشی ثبت نکرده است.
- سفارشهای علی احمدی و زهرا مرادی نیز نمایش داده شدهاند.
- مقدار NULL نشاندهنده مشتریانی است که سفارشی ندارند.
۳. LEFT JOIN و شرط WHERE برای نمایش مشتریان بدون سفارش
برای نمایش فقط مشتریانی که سفارشی ثبت نکردهاند، میتوان از WHERE orders.order_id IS NULL استفاده کرد:
SELECT customers.name
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.order_id IS NULL;
✅ نتیجه:
name |
---|
رضا نوری |
۴. LEFT JOIN بین سه جدول
میتوان از LEFT JOIN برای ترکیب سه جدول نیز استفاده کرد. فرض کنید بخواهیم اطلاعات مشتری، سفارش و جزئیات سفارش را نمایش دهیم.
اضافه کردن جدول 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)
);
کوئری LEFT JOIN برای ترکیب سه جدول
SELECT customers.name, orders.order_id, order_details.product_name, order_details.quantity
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
LEFT JOIN order_details ON orders.order_id = order_details.order_id;
✅ نتیجه:
name | order_id | product_name | quantity |
---|---|---|---|
علی احمدی | 101 | لپتاپ | 1 |
علی احمدی | 101 | موس | 2 |
زهرا مرادی | 103 | گوشی | 1 |
رضا نوری | NULL | NULL | NULL |
🔹 مقدار NULL برای مشتریانی نمایش داده میشود که سفارشی ثبت نکردهاند.
۵. مقایسه LEFT JOIN با سایر انواع JOIN
نوع JOIN | توضیح |
---|---|
INNER JOIN | فقط رکوردهای مشترک بین دو جدول را نمایش میدهد. |
LEFT JOIN | تمام رکوردهای جدول چپ و دادههای منطبق از جدول راست را نمایش میدهد. |
RIGHT JOIN | تمام رکوردهای جدول راست و دادههای منطبق از جدول چپ را نمایش میدهد. |
FULL JOIN | تمام رکوردهای هر دو جدول را نمایش میدهد (در MySQL مستقیماً پشتیبانی نمیشود). |
۶. نکات مهم در استفاده از LEFT JOIN
✔ تمام رکوردهای جدول چپ همیشه در خروجی نمایش داده میشوند.
✔ اگر مقدار منطبق در جدول راست وجود نداشته باشد، مقدار NULL برمیگردد.
✔ میتوان با استفاده از WHERE، فقط دادههای خاصی را نمایش داد (مثلاً مشتریانی که سفارش ندارند).
✔ LEFT JOIN زمانی مناسب است که بخواهید دادههای یک جدول را بهطور کامل نمایش دهید، حتی اگر در جدول دیگر مقدار منطبق نداشته باشند.
۷. نتیجهگیری
LEFT JOIN یکی از پرکاربردترین روشهای اتصال دادهها بین جداول در MySQL است که تمام رکوردهای جدول چپ را نمایش داده و در صورت وجود دادههای منطبق در جدول راست، آنها را اضافه میکند.
نکات کلیدی:
✅ LEFT JOIN تمام دادههای جدول چپ را نمایش میدهد، حتی اگر در جدول راست مقدار منطبق نداشته باشد.
✅ اگر مقدار منطبق وجود نداشته باشد، مقدار NULL در خروجی نمایش داده میشود.
✅ میتوان از WHERE orders.order_id IS NULL برای نمایش دادههای بدون تطابق استفاده کرد.
✅ LEFT JOIN را میتوان با چندین جدول ترکیب کرد تا دادههای مرتبط را دریافت کرد.
با استفاده از LEFT JOIN، میتوانید تحلیلهای دقیقتری از دادهها داشته باشید و گزارشهای بهتری تهیه کنید! 🚀