پیوست درونی در مقابل عضویت بیرونی
پیوستن داخلی و پیوستن بیرونی دو روش اتصال SQL هستند که در پردازش پرس و جو برای پایگاههای داده استفاده میشوند. آنها به خانواده بندهای پیوستن تعلق دارند (دو مورد دیگر Left و Right Joins) هستند. با این حال، یک Self Join وجود دارد که می تواند برای موقعیت های تخصصی استفاده شود. هدف Join ترکیب کردن فیلدها با استفاده از مقادیر مشترک در دو جدول است. این اتصال ها رکوردهای چند جدول را در یک پایگاه داده ترکیب می کنند. مجموعههای حاصل را ایجاد میکند که میتوانند بهعنوان جدول دیگری ذخیره شوند.
Inner Join چیست؟
متداولترین عملیات SQL Join، Inner Join است.می توان آن را به عنوان نوع پیش فرض اتصال مورد استفاده در برنامه ها در نظر گرفت. اتصال داخلی برای ترکیب دو جدول از گزاره join استفاده می کند. با فرض اینکه دو جدول A و B باشند، پس گزاره الحاقی ردیف های A و B را با هم مقایسه می کند تا تمام جفت هایی را که گزاره را برآورده می کنند، پیدا کند. مقادیر ستونهای تمام ردیفهای رضایتبخش جداول A و B برای ایجاد نتیجه ترکیب میشوند. می توان آن را به این صورت در نظر گرفت که ابتدا پیوند متقاطع (محصول دکارتی) همه رکوردها را می گیرد و سپس فقط رکوردهایی را برمی گرداند که گزاره الحاقی را برآورده می کنند. با این حال، در واقعیت، محصول دکارتی محاسبه نمی شود، زیرا بسیار ناکارآمد است. به جای آن از پیوستن هش یا پیوستن مرتبسازی ادغام استفاده میشود.
Outer Join چیست؟
برخلاف پیوستن داخلی، پیوستن بیرونی همه رکوردها را حفظ می کند، حتی اگر نتواند رکوردی مشابه پیدا کند. این بدان معناست که پیوستن خارجی به یک رکورد نیاز دارد تا یک رکورد منطبق پیدا کند تا در نتیجه ظاهر شود. در عوض، تمام رکوردها را برمی گرداند، اما رکوردهای بی همتا مقادیر تهی خواهند داشت. اتصالات بیرونی به سه زیر دسته تقسیم می شوند.آنها اتصال بیرونی سمت چپ، اتصال بیرونی راست و پیوستن کامل بیرونی هستند. این تمایز بر این اساس است که ردیف جدول (جدول سمت چپ، جدول سمت راست یا هر دو جدول) در صورت یافتن رکوردهای بیهمتا حفظ میشود. اتصالات بیرونی چپ (همچنین به عنوان اتصال ساده چپ نیز شناخته می شود) تمام رکوردهای جدول سمت چپ را حفظ می کند. این بدان معناست که حتی اگر تعداد رکوردهای تطبیق صفر باشد، باز هم رکوردهایی در جدول نتیجه خواهد داشت، اما مقادیر null برای تمام ستون های B خواهد داشت. به عبارت دیگر، تمام مقادیر جدول سمت چپ با مقادیر منطبق از سمت راست برگردانده می شوند. جدول (یا مقادیر تهی در صورت عدم تطابق). اگر مقادیر چندین ردیف از جدول سمت چپ با یک سطر از جدول سمت راست مطابقت داده شود، ردیف از جدول سمت راست در صورت لزوم تکرار می شود. اتصال بیرونی سمت راست تقریباً شبیه به اتصال بیرونی سمت چپ است، اما برخورد با جداول مورد احترام است. این بدان معناست که نتیجه حداقل یک بار تمام سطرهای جدول سمت راست را با مقادیر جدول سمت چپ مطابقت دارد (و مقادیر تهی برای مقادیر ناهمسان سمت راست). اتصال بیرونی کامل از اتصالات بیرونی چپ و راست جامع تر است.این منجر به ترکیب اثر اعمال هر دو سمت چپ و راست به هم پیوسته بیرونی می شود.
تفاوت بین Join داخلی و خارجی چیست؟
Inner Join ردیفهای بیهمتا را در نتیجه نگه نمیدارد، اما پیوستن خارجی تمام رکوردهای حداقل یک جدول را حفظ میکند (بسته به اینکه از کدام اتصال خارجی استفاده شده است). بنابراین، رفتار عدم وجود اطلاعات در ردیفهای بیهمتا در جدول نتیجه نامطلوب است، شما باید همیشه از یکی از اتصالات خارجی (به جای اتصال داخلی) استفاده کنید. اگر هیچ منطبقی پیدا نشود، اتصال داخلی ممکن است نتیجه ای ایجاد نکند. اما پیوستن بیرونی همیشه یک جدول نتیجه ایجاد می کند، حتی بدون ردیف های منطبق. پیوستن داخلی همیشه جداول را با مقادیر (در صورت بازگشت) برمی گرداند. اما اتصالات خارجی ممکن است به جداول با مقادیر تهی منجر شود.