📞 02166056460

دستور LEFT JOIN در sql

9 / 10
از 7 کاربر
بازگشت به لیست مقالات » | شنبه 2 آبان 1405 در ساعت 15 و 26 دقیقه | نظرات کاربران ( 0 )
آموزش SQL

دستور LEFT JOIN در SQL؛ آموزش کاربرد و مثال

با حفظ همه رکوردهای جدول سمت چپ، داده های مرتبط جدول دیگر را هم دریافت کنید.
۰۱

دستور LEFT JOIN چیست و چه کاربردی دارد؟

دستور LEFT JOIN در SQL برای ترکیب داده های دو جدول استفاده می شود؛ با این تفاوت مهم که تمام ردیف های جدول سمت چپ در نتیجه باقی می مانند، حتی اگر برای بعضی از آن ها رکورد مرتبطی در جدول سمت راست وجود نداشته باشد. در چنین وضعیتی، ستون های جدول سمت راست برای ردیف های بدون تطبیق مقدار NULL خواهند داشت.

در یک کوئری، جدولی که پس از FROM می آید جدول سمت چپ است و جدولی که پس از LEFT JOIN نوشته می شود جدول سمت راست محسوب می شود. شرط اتصال در بخش ON مشخص می کند کدام ردیف ها با هم ارتباط دارند. بنابراین، جایگاه جدول ها و شرط اتصال هر دو در نتیجه نهایی اثر می گذارند.

برای مثال، ممکن است جدولی از مشتریان داشته باشید و بخواهید سفارش های هر مشتری را مشاهده کنید. اگر از INNER JOIN استفاده شود، مشتریانی که هنوز سفارشی ندارند از نتیجه حذف می شوند؛ اما با دستور LEFT JOIN، همه مشتریان نمایش داده می شوند و برای مشتری بدون سفارش، ستون های سفارش به صورت NULL برمی گردند.

🎯

حفظ جدول چپ

تمام ردیف های جدول سمت چپ در نتیجه باقی می مانند.

🔄

اتصال داده ها

رکوردهای مرتبط جدول سمت راست به نتیجه افزوده می شوند.

📌

نمایش NULL

برای ردیف های بدون تطبیق، ستون های سمت راست NULL می شوند.

۵ نکته مهم درباره دستور LEFT JOIN در SQL

۰۲

۱. ترتیب جدول ها را درست انتخاب کنید

در LEFT JOIN، ترتیب جدول ها تعیین می کند کدام داده ها بدون توجه به وجود تطبیق حفظ شوند. جدول بلافاصله پس از FROM در سمت چپ قرار می گیرد و جدول پس از LEFT JOIN در سمت راست. اگر جدولی که باید همه رکوردهایش دیده شود در سمت راست باشد، ممکن است نتیجه چیزی نباشد که انتظار دارید.

برای نمونه، اگر هدف بررسی همه افراد و سفارش هایشان باشد، جدول Persons باید در سمت چپ قرار بگیرد. اما اگر هدف، نمایش همه سفارش ها همراه با اطلاعات احتمالی افراد باشد، باید درباره جدول اصلی و ترتیب اتصال دوباره تصمیم بگیرید. نام گذاری روشن جدول ها و استفاده از نام مستعار، خواندن این رابطه را ساده تر می کند.

مثال کاربردی: اگر گزارش شما باید همه مشتریان، حتی مشتریان تازه ثبت شده و بدون خرید را نشان دهد، جدول مشتریان را پس از FROM قرار دهید. این کار مانع حذف ناخواسته مشتریان بدون سفارش می شود.

۰۳

۲. شرط اتصال را در بخش ON بنویسید

بخش ON مشخص می کند که SQL بر اساس کدام ستون یا ستون ها، ردیف های دو جدول را به هم مرتبط کند. معمولاً این ارتباط از طریق کلید اصلی و کلید خارجی برقرار می شود؛ برای مثال، شناسه مشتری در جدول مشتریان با شناسه همان مشتری در جدول سفارش ها تطبیق داده می شود.

اگر شرط اتصال ناقص یا اشتباه باشد، ممکن است ردیف های غیرمرتبط کنار هم قرار بگیرند یا تعداد نتایج به شکل غیرمنتظره افزایش پیدا کند. بهتر است ستون های اتصال را با نام جدول یا نام مستعار مشخص کنید؛ این کار به ویژه زمانی مفید است که هر دو جدول ستون هایی با نام یکسان داشته باشند.

مثال کاربردی: اگر جدول سفارش ها به جای شناسه مشتری با شماره تلفن اتصال داده شود، شماره های تکراری یا ناهماهنگ می توانند نتیجه نادرست ایجاد کنند. انتخاب ستون رابطه باید با ساختار واقعی داده ها و قواعد پایگاه داده هماهنگ باشد.

۰۴

۳. مقدار NULL را به درستی بررسی کنید

وقتی برای یک ردیف از جدول چپ، ردیف منطبق در جدول راست پیدا نشود، ستون های جدول راست مقدار NULL می گیرند. این مقدار به معنی صفر یا رشته خالی نیست؛ بلکه نشان می دهد داده ای برای آن ستون وجود ندارد یا در نتیجه این اتصال، تطبیقی پیدا نشده است.

برای پیدا کردن ردیف های بدون تطبیق، از شرطی مانند WHERE Orders.P_Id IS NULL استفاده کنید. در SQL برای بررسی مقدار تهی باید از IS NULL یا IS NOT NULL استفاده شود؛ مقایسه با = NULL روش درستی برای این کار نیست.

مثال کاربردی: برای تهیه فهرست افرادی که هیچ سفارشی ثبت نکرده اند، ابتدا افراد را با سفارش ها LEFT JOIN کنید و سپس ردیف هایی را نگه دارید که شناسه سفارش آن ها NULL است.

۰۵

۴. تفاوت شرط ON و WHERE را در نظر بگیرید

شرط های قرارگرفته در ON نحوه تطبیق ردیف های دو جدول را مشخص می کنند، اما شرط های WHERE نتیجه نهایی را پس از اتصال فیلتر می کنند. در LEFT JOIN این تفاوت مهم است؛ چون شرطی که روی ستون جدول راست در WHERE قرار می گیرد ممکن است ردیف های دارای NULL را حذف کند.

برای مثال، اگر بخواهید همه مشتریان را ببینید، اما فقط سفارش های پرداخت شده را به آن ها متصل کنید، شرط وضعیت سفارش را در ON قرار دهید. اگر همان شرط را در WHERE بنویسید، مشتریانی که سفارش پرداخت شده ندارند ممکن است از خروجی حذف شوند و نتیجه عملاً شبیه اتصال داخلی شود.

مثال کاربردی: هنگام گزارش گیری از همه محصولات و سفارش های تکمیل شده، شرط تکمیل شدن سفارش را با دقت در محل درست بنویسید. ابتدا مشخص کنید هدف حفظ همه محصولات است یا فقط محصولاتی که سفارش تکمیل شده دارند.

۰۶

۵. تکرار ردیف ها را بررسی کنید

اگر یک ردیف از جدول چپ با چند ردیف در جدول راست تطبیق داشته باشد، در خروجی چند بار تکرار می شود؛ در هر ردیف، اطلاعات یکی از رکوردهای مرتبط نمایش داده خواهد شد. این رفتار معمولاً خطا نیست، بلکه نتیجه طبیعی رابطه یک به چند است.

برای نمونه، یک مشتری ممکن است چند سفارش ثبت کرده باشد. اتصال جدول مشتریان به جدول سفارش ها، نام آن مشتری را در چند ردیف نشان می دهد؛ هر ردیف با یک سفارش متفاوت مرتبط است. اگر تعداد ردیف ها بیش از انتظار باشد، تعداد رکوردهای مرتبط و یکتایی ستون های اتصال را بررسی کنید.

مثال کاربردی: اگر به جای فهرست سفارش ها، تعداد سفارش های هر مشتری را می خواهید، از تابع تجمیعی مانند COUNT و عبارت GROUP BY استفاده کنید. افزودن بی هدف DISTINCT ممکن است تکرار واقعی داده ها را پنهان کند، بدون آن که علت اصلی را برطرف کند.

✅

نام مستعار

برای ساده تر شدن خواندن کوئری از نام مستعار استفاده کنید.

🔎

ستون های مشخص

به جای انتخاب همه ستون ها، ستون های مورد نیاز را بنویسید.

📊

نتیجه قابل بررسی

خروجی را با چند رکورد نمونه کنترل کنید.

⚙️

شرط دقیق

ستون های اتصال را بر اساس رابطه واقعی داده ها انتخاب کنید.

۰۷

شکل کلی دستور LEFT JOIN در SQL

ساختار پایه دستور left join شامل انتخاب ستون ها، معرفی جدول اصلی، اتصال جدول دوم و نوشتن شرط ارتباط است. در صورت نیاز می توانید پس از آن شرط فیلتر یا مرتب سازی هم اضافه کنید.

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
  ON table_name1.column_name = table_name2.column_name;

در بعضی پایگاه های داده، دستور LEFT JOIN با نام دستور LEFT OUTER JOIN نوشته می شود. واژه OUTER اختیاری است و در این کاربرد، نتیجه مورد انتظار با LEFT JOIN تفاوتی ندارد.

بهتر است به جای انتخاب همه ستون ها با *، نام ستون های مورد نیاز را بنویسید. این کار باعث می شود خروجی روشن تر باشد، از ابهام میان ستون های هم نام جلوگیری شود و نگهداری کوئری در آینده ساده تر شود.

مثال کاربردی اتصال جدول Persons و Orders

۰۸

نمایش همه افراد و سفارش های مرتبط

در این مثال، جدول Persons جدول اصلی است و در سمت چپ اتصال قرار دارد. شناسه P_Id در دو جدول برای پیدا کردن رابطه استفاده می شود. چون اتصال از نوع چپ است، همه افراد در خروجی باقی می مانند؛ حتی اگر سفارشی نداشته باشند.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
  ON Persons.P_Id = Orders.P_Id
ORDER BY Persons.LastName;

اگر فردی در جدول Persons وجود داشته باشد اما هیچ ردیف متناظری در Orders نداشته باشد، نام او همچنان در خروجی دیده می شود و مقدار Orders.OrderNo برابر NULL خواهد بود. اگر فرد چند سفارش داشته باشد، نام او به تعداد سفارش های مرتبط در چند ردیف تکرار می شود.

برای یافتن افرادی که هیچ سفارشی ندارند، می توانید خروجی را با شرط Orders.P_Id IS NULL محدود کنید. در این حالت، ستون شناسه جدول راست که برای اتصال استفاده شده بررسی می شود تا ردیف هایی که تطبیق نداشته اند باقی بمانند.

SELECT Persons.LastName, Persons.FirstName
FROM Persons
LEFT JOIN Orders
  ON Persons.P_Id = Orders.P_Id
WHERE Orders.P_Id IS NULL
ORDER BY Persons.LastName;
۰۹

تفاوت LEFT JOIN و INNER JOIN

INNER JOIN فقط ردیف هایی را برمی گرداند که در هر دو جدول تطبیق دارند. در مقابل، LEFT JOIN تمام ردیف های جدول سمت چپ را نگه می دارد و اطلاعات جدول راست را در صورت وجود تطبیق به آن ها اضافه می کند. انتخاب میان این دو، به پرسشی بستگی دارد که گزارش شما قرار است پاسخ دهد.

اگر فقط مشتریانی را لازم دارید که سفارش دارند، اتصال داخلی می تواند مناسب باشد. اگر لازم است همه مشتریان، از جمله افراد بدون سفارش، در گزارش باقی بمانند، اتصال چپ انتخاب مناسبی است. هیچ کدام به تنهایی بهتر نیستند؛ معیار اصلی، حفظ یا حذف ردیف های بدون تطبیق است.

معیار LEFT JOIN INNER JOIN
حفظ همه ردیف های جدول چپ بله خیر
نمایش ردیف های بدون تطبیق بله، با مقدار NULL در ستون های جدول راست خیر
کاربرد رایج گزارش همه موارد جدول اصلی نمایش موارد دارای رابطه در هر دو جدول

مزایای استفاده از LEFT JOIN

مزایای LEFT JOIN

داده های کامل تر و کاربردی تر

برای گزارش گیری از جدول اصلی
۰۱
پوشش کامل

حفظ ردیف های جدول چپ

داده های بدون تطبیق حذف نمی شوند.

۰۲
گزارش گیری

شناسایی موارد بدون رابطه

ردیف های دارای NULL قابل شناسایی هستند.

۰۳
ترکیب داده

نمایش اطلاعات مرتبط

ستون های جدول دوم به نتیجه افزوده می شوند.

۰۴
تحلیل

پیدا کردن خلأهای داده

موارد فاقد رکورد مرتبط آشکار می شوند.

۰۵
انعطاف

ساخت گزارش های متنوع

اتصال چپ برای گزارش های جامع کاربرد دارد.

راهکار دیجیتال

داده های خود را برای وب سایت آماده کنید

ساختار درست داده ها و گزارش های دقیق می تواند در توسعه کسب و کار آنلاین مفید باشد. برای آشنایی با خدمات طراحی سایت به این صفحه مراجعه کنید.

مشاهده خدمات طراحی سایت ←

اشتباهات رایج هنگام استفاده از LEFT JOIN

۱۰

قرار دادن شرط جدول راست در WHERE بدون توجه به NULL

شرط گذاری در WHERE روی ستون جدول راست می تواند ردیف های دارای NULL را کنار بگذارد. اگر قصد دارید همه ردیف های جدول چپ حفظ شوند، بررسی کنید شرط مربوط به جدول راست باید در ON نوشته شود یا در WHERE. این انتخاب به هدف کوئری بستگی دارد.

۱۱

انتخاب ستون اتصال نامناسب

اتصال دو جدول بر اساس ستونی که رابطه واقعی را نشان نمی دهد، می تواند اطلاعات نامرتبط یا تکراری تولید کند. پیش از نوشتن کوئری، نوع رابطه جدول ها و نقش کلیدهای اصلی و خارجی را بررسی کنید. اگر ساختار جدول روشن نباشد، ابتدا چند ردیف نمونه را جداگانه مشاهده کنید.

۱۲

استفاده بی دلیل از SELECT *

انتخاب همه ستون ها ممکن است خروجی را شلوغ کند و در صورت یکسان بودن نام ستون ها، استفاده از داده ها را دشوار سازد. ستون های مورد نیاز را مشخص کنید و برای ستون های هم نام، نام جدول یا نام مستعار را به کار ببرید. این کار خوانایی و نگهداری کوئری را بهتر می کند.

۱۳

نتیجه گیری: چه زمانی از دستور LEFT JOIN استفاده کنیم؟

دستور LEFT JOIN در SQL زمانی انتخاب مناسبی است که می خواهید همه ردیف های یک جدول اصلی را نگه دارید و اطلاعات جدول دیگری را در صورت وجود رابطه به آن اضافه کنید. ردیف های بدون تطبیق نیز در نتیجه باقی می مانند و ستون های جدول راست برای آن ها مقدار NULL خواهند داشت.

برای نوشتن کوئری دقیق، جدول اصلی را درست انتخاب کنید، شرط اتصال را بر اساس رابطه واقعی داده ها بنویسید و تفاوت شرط های ON و WHERE را در نظر بگیرید. سپس نتیجه را با داده های نمونه بررسی کنید تا مطمئن شوید ردیف های تکراری یا مقادیر تهی با هدف گزارش هماهنگ هستند.

نکته اهمیت بررسی سریع
انتخاب جدول سمت چپ تعیین می کند کدام ردیف ها حفظ شوند آیا همه ردیف های این جدول باید دیده شوند؟
شرط ON رابطه میان دو جدول را مشخص می کند آیا ستون های اتصال درست انتخاب شده اند؟
بررسی NULL ردیف های بدون تطبیق را آشکار می کند آیا از IS NULL استفاده شده است؟
بررسی تکرار رابطه یک به چند را در خروجی نشان می دهد آیا چند رکورد مرتبط وجود دارد؟

سوالات متداول دستور LEFT JOIN در SQL

آیا LEFT JOIN و LEFT OUTER JOIN تفاوت دارند؟

خیر. در این کاربرد، واژه OUTER اختیاری است و LEFT JOIN و LEFT OUTER JOIN نتیجه یکسانی دارند. هر دو تمام ردیف های جدول سمت چپ را نگه می دارند و در صورت نبود ردیف منطبق، ستون های جدول راست را با مقدار NULL نمایش می دهند.

چرا بعد از LEFT JOIN بعضی ردیف ها چند بار تکرار می شوند؟

اگر یک ردیف جدول چپ با چند ردیف جدول راست مطابقت داشته باشد، نتیجه برای هر تطبیق یک ردیف جداگانه می سازد. این رفتار در رابطه یک به چند طبیعی است. اگر به جای نمایش تک تک رکوردها به تعداد آن ها نیاز دارید، از تابعی مانند COUNT همراه با GROUP BY استفاده کنید.

چطور ردیف های بدون تطبیق را با LEFT JOIN پیدا کنم؟

پس از اتصال جدول ها، در بخش WHERE ستونی از جدول سمت راست را که در ردیف منطبق مقدار می گیرد بررسی کنید. شرطی مانند WHERE Orders.P_Id IS NULL ردیف های بدون تطبیق را پیدا می کند. برای بررسی مقدار تهی از IS NULL استفاده کنید، نه از مقایسه با = NULL.

چه تفاوتی میان شرط ON و WHERE در LEFT JOIN وجود دارد؟

شرط ON تعیین می کند ردیف های دو جدول چگونه با هم تطبیق پیدا کنند. شرط WHERE نتیجه حاصل را فیلتر می کند. شرطی روی جدول راست که در WHERE قرار بگیرد ممکن است ردیف های دارای NULL را حذف کند؛ بنابراین اگر حفظ همه ردیف های جدول چپ مهم است، جای شرط را با دقت انتخاب کنید.

آیا LEFT JOIN همیشه از INNER JOIN کندتر است؟

نه، نمی توان بدون بررسی پایگاه داده، اندازه جدول ها، ایندکس ها و طرح اجرای کوئری چنین نتیجه ای گرفت. نوع اتصال را بر اساس خروجی مورد نیاز انتخاب کنید و برای بهبود کارایی، ستون های اتصال و ایندکس های مرتبط را بررسی کنید. همچنین انتخاب ستون های لازم به جای استفاده بی دلیل از SELECT * می تواند به روشن تر شدن کوئری کمک کند.

با مثال های واقعی، SQL را بهتر یاد بگیرید

با تمرین روی جدول های مرتبط، کاربرد LEFT JOIN، تفاوت ON و WHERE و شیوه بررسی مقادیر NULL را بهتر درک می کنید.

مطالعه دستور LEFT JOIN ←
ارسال نظر و نظرات ثبت شده
سایر مقالات
دستور ISNULL در اس کیو ال آموزش SQL دستور ISNULL در SQL؛ آموزش کاربرد، تفاوت‌ها و مثال‌ها یاد بگیرید مقدار ...
مقدار Null در اس کیو ال آموزش پایگاه داده مقدار Null در SQL چیست و چگونه از آن استفاده کنیم؟ تفاوت مقدار تهی با رش ...
دستور SELECT INTO در sql آموزش SQL دستور SELECT INTO در SQL؛ آموزش ساخت جدول و نسخه پشتیبان یاد بگیرید چطور داده ها ...
عملگر UNION در اسکیوال آموزش SQL دستور UNION در SQL؛ راهنمای ترکیب نتایج جداول نحوه استفاده از UNION و UNION ALL ...
دستور FULL JOIN در sql آموزش SQL دستور FULL JOIN در SQL؛ آموزش کامل با مثال ترکیب همه سطرهای دو جدول، حتی وقتی بر ...
دستور RIGHT JOIN در sql راهنمای SQL دستور RIGHT JOIN در SQL؛ آموزش، مثال و کاربردها نحوه نمایش همه رکوردهای جدول س ...
دستور LEFT JOIN در sql آموزش SQL دستور LEFT JOIN در SQL؛ آموزش کاربرد و مثال با حفظ همه رکوردهای جدول سمت چپ، داد ...
دستور INNER JOIN در sql آموزش SQL دستور INNER JOIN در SQL؛ آموزش کاربرد و مثال یاد بگیرید چگونه داده‌های مرتب ...
دستورات پیوند و Join در SQL آموزش پایگاه داده SQL JOIN چیست؟ راهنمای تفاوت انواع دستورهای پیوند آشنایی با INNER JOIN، ...
Alias در اس کیو ال آموزش SQL Alias در SQL چیست و چگونه از آن استفاده کنیم؟ راهنمای نام گذاری موقت ستون ها و ج ...
عملگر BETWEEN در شرطهای sql آموزش SQL عملگر BETWEEN در SQL؛ آموزش استفاده از بازه ها کاربرد، ساختار، مثال ها و نکات مه ...
عملگر In در شرط های sql آموزش SQL عملگر IN در SQL چیست و چگونه از آن استفاده کنیم؟ راهنمای کاربردی بررسی چند مقدار ...
علامت های شرطی در Like علامت های شرطی در LIKE و کاربرد آن ها در SQL 💡آشنایی با جستجوی الگویی هنگام جستجو در پایگ ...
عملگر Like در SQL عملگر LIKE در SQL چیست و چه کاربردی دارد؟ 🔎جست وجوی الگو در داده ها عملگر LIKE در SQL برا ...
دستور شرطی Top در SQL دستور TOP در SQL چیست و چه کاربردی دارد؟ 💡آشنایی با محدود کردن خروجی دستور TOP در SQL برای ...
دسته بندی
جستجو
⏳ در حال پردازش...
لطفا صبر کنید