در مطلب پیشین آموزش روش های الحاق (Join) دو یا چندین جدول را آغاز کردیم که در آن روش EquiJoin توضیح داده شد. در این مطلب می خواهیم روش های دیگر مانند INNER JOIN (ضرب داخلی) و NATUARL JOIN (ضرب طبیعی) را آموزش دهیم. به عنوان یادآوری EquiJoin روشی بود که توسط عملگر =، سطرهای خروجی تنها شامل رکوردهایی از دو جدول است که مقدار هر دو ستون با هم برابر باشند.

۲ – روش INNER JOIN

در زبان SQL الحاق INNER JOIN روشی است که در آن دو جدول بر اساس برابر بودن مقادیر دو ستون ادغام می شوند. در این صورت می توانیم آنرا همسان با EquiJoin در نظر بگیریم ولی تفاوت این دو در این است که در INNER JOIN می توانیم عملگرهای دیگر مانند عملگر نامساوی =! یا <> و عملرهای بزرگ و کوچکتر و کوچکتر مساوی و بزرگتر مساوی را نیز به کار ببریم. مطابق با استاندارد SQL-92، برای انجام INNER JOIN باید از عبارت INNER JOIN و یا عبارت JOIN تنها استفاده کنیم. در واقع توشتن کلمه INNER اختیاری استفرمت کلی استفاده از عبارت INNER JOIN برای ادغام دو جدول به صورت زیر استهمانطور که می بینید به جای استفاده از عبارت WHERE، شرط تساوی مقدار دو ستون در جلوی عبارت INNER JOIN ON آمده است.

مثالدو کوئری زیر یک خروجی را دارند ولی در اولین کوئری از عبارت INNER JOIN استفاده شده است ولی در دومی دیگر عبارت INNER نوشته نشده است.

۳ – روش NATURAL JOIN

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

به طور مثال دو جدول hr.countries و hr.regions دارای یک ستون همنام به نام region_id هستند، پس عملیات inner join قابل انجام شدن بر روی این دو جدول است. یا در دو جدول hr.employees و hr.departments دو ستون همنام به نام های department_id و manager_id وجود دارند، پس عملیات inner join قابل انجام شدن بر روی این دو جدول است.

مثالدر ادامه سه فایل را می توانید دانلود کنید که هر یک نتیجه اجرای یک کوئری است. هدف از این فایل بررسی اجرای nartuarl join بر روی دو جدول hr.employees و hr.departments است. توجه کنید که natuarl join از طریق ستون های همنام اجرا می شود و آن سطرهایی در خروجی خواهند بود که دقیقا مقادیر هر ستون همنام در دو جدول، یکسان باشددر جدول های hr.employees و hr.departments دو ستون همنام deparment_id و manager_id وجود دارد، پس natural join بر روی این دو ستون انجام می شود.

اگر به مقادیر ستون department_id در جدول hr.departments نگاه کنید خواهید دید که شناسه های دپارتمان شامل عدد ۱۰و ۲۰ و ۳۰ و ۴۰ و ۵۰ تا ۲۷۰ است. در ستون department_id از جدول hr.employees تنها اعداد ۱۰ و ۲۰ و ۳۰ و ۴۰ و ۵۰ و ۶۰ و ۷۰ و ۸۰ و ۹۰ و ۱۰۰ و ۱۱۰ وجود دارند، پس سطرهایی از حاصل اجرای natuarl join در خروجی خواهند بود که مقدار ستون آنها برابر با یکی از همین اعداد باشد. شکل های زیر به ترتیب تمامی مقدار ستون های department_id در جدول های hr.employees و hr.departments را نشان می دهد. این شکل ها را جهت مقایسه آنچه که گفتیم آورده ایم.

اگر به شکل جدول  hr.departments نگاه کنید می بینید که دپارتمان با شناسه ۹۰ دارای مدیر با شناسه ۱۰۰ است، پس سطرهایی از حاصل natuarl join در خروجی نشان داده می شوند که مقدار هر یک از ستون های همنام در دو جدول به ترتیب برابر با مقدار ۹۰ و ۱۰۰ باشد.

در شکل بالا می بینید که دو سطر از خروجی natuarl join است می بینید که دو کارمند با شناسه دپارتمان ۹۰ در خروجی هستند در حالی که سه کارمند هستند که شناسه دپارتمان آنها برابر با ۹۰ بود، ولی چون مقدار ستون manager_id یک سطر از جدول hr.employees برابر با NULL بود، پس این سطر جز خروجی نخواهد بود.بنابراین اگر هر چند سطر همنام وجود داشته باشد، دقیقا باید مقادیر هر ستون همنام در هر دو جدول یکسان باشد.

ستون های خروجی از انجام شدن NATURAL JOIN

اگر از علامت * (یا asterisk) در دستور SELECT استفاده کنیم، علامت * برای نمایش ستون ها به صورت زیر تفسیر می شود:

۱تمامی ستون های همنام

۲هر ستون در جدول اول (سمت چپ)، که یکی از ستون های همنام نیستند.

۳هر ستون در جدول دوم (سمت راست)، که یکی از ستون های همنام نیستند.