دستور SELECT برای انتخاب و نمایش سطر ها استفاده می شود. آنچه که تا به حال در مورد آن توضیح دادیم، انتخاب داده ها (سطرها) تنها از یک جدول بود ولی قاعدتا در یک سیستمی که توسط مدل رابطه ای آنرا مدل کرده ایم، قطغعا چندین جدول وجود دارد که هر یک از این جداول یک موجودیت (entity) را مدل می کنند و میان این موجودیت ها ممکن است یک ارتباط (relationship) وجود داشته باشددر این مطلب می خواهیم در مورد انتخاب داده ها (سطرها) از چندین جدول صحبت کنیم که در اصول پایگاه داده های رابطه ای این مفهوم را join کردن جداول می گویند. در واقع مفهوم join به ترکیب یا ادغام دو یا چند جدول به هم دارد تا بتوانیم داده ها را از چندین جدول بدست آوریم.

انواع رابطه میان جدول ها در پایگاه داده رابطه ای

انواع Join در اوراکل

اوراکل همانند دیگر پایگاه داده های رابطه ای مانند MySQL, SQL Server و PostgreSQL دارای روش متفاوتی برای join کردن دو یا چند جدول است تا بتوانیم داده ها را همزمان از چندین جدول بدست آوریمتوجه کنید که هر یک از این روش ها کاربرد و نتیجه خودش را دارد و هر کدام برای منظور و هدف خاصی استفاده می شود و قاعدتا خروجی آنها با دیگری متفاوت است. در ادامه هر یک از این روش ها را بررسی می کنیم و سپس آنها را با یکدیگر مقایسه خواهیم کرد.

۱ – روش EquiJoin

Equi برگرفته از واژه Equality و به معنی تساوی است. در واقع equijoin به join کردن جداول بر اساس متساوی بودن و برابر بودن مقدار در دو ستون از جداول اشاره دارد. برای مقایسه کردن تساوی مقدار دو ستون در شرط جلوی عبارت WHERE از علامت تساوی  استفاده می شود.

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

مثالاطلاعات کارمندان و محل (دپارتمان) کار آنها را نمایش دهید.

 در مثال بالا چون تمامی اطلاعات را می خواست از علامت * استفاده کردیم ولی می توانستید نام تک تک ستون های هر دو جدول را نیز فهرست کنید. همچنین در جلوی عبارت WHERE از شرط تساوی مقدار برای ستون های department_id از جدول های hr.employees و hr.departmnts استفاده شده است. شکل زیر خروجی کوئری مثال را نشان می دهد.

در شکل بالا می بینید که تنها سطرهایی از هر دو جدول نشان داده شده اند که مقدار ستون department_id در هر دو جدول برابر و یکسان باشد. همچنین می بینید که تمامی ستون ها از هر دو جدول نشان داده شده اند. بنابراین می توانیم به جای استفاده از کاراکتر * و جلوگیری از نمایش ستون های تکراری (مانند department_id) تعیین کنیم ستون های ویژه و مورد نظر ما از جدول ها در خروجی نشان داده شوند.

مثالنام، نام خانوادگی، شناسه دپارتمان و نام پارتمان را نشان دهید.

در کوئری بالا از حرف به عنوان نام مستعار برای جدول employees و از حرف d به عنوان نام مستعار برای جدول departments استفاده شده است و همانطور که مشاهده می کنید از این نام های مستعار در جلوی نام ستون های فهرست شده در جلوی SELECT و جلوی ستون های شرط WHERE استفاده شده است تا تعیین کنیم کدام ستون از کدام جدول را می خواهیم.

مثالنام، نام خانوادگی، شغل شناسه دپارتمان و نام پارتمان را نشان دهید که شغل آنها SA_MAN یا IT_PROG باشد. سپس بر اساس نام خانوادگی و به صورت نزولی مرتب سازی کنید.

همانطور که کد بالا می بینید در جلوی عبارت WHERE دو شرط تعیین شده است. یکی مشخص می کند عنوان شغل کارمند SA_MAN یا IT_PROG باشد و دیگری تعیین می کند که مقدار ستون department_id در دو جدول یکسان باشد که در واقع همان عامل ادغام دو جدول و بدست آوردن اطلاعات از دو جدول است.

مثالنام، نام خانوادگی، شغل شناسه دپارتمان و نام پارتمان را نشان دهید که شغل آنها SA_MAN باشد و سپس خروجی را بر اساس نام خانوادگی مرتب کنید. (مرتب سازی پیشفرض صعودی خواهد بود)

بنابراین EquiJoin یک نوع از join است که بر اساس عملگر تساوی و متساوی بودن مقدار دو ستون عمل می کند. توجه کنید که بی توجه به نوع join ها که در ادامه بقیه آنها را توضیح خواهیم داد، خروجی عملیات join یا ادغام کردن جدوال، مجددا یک جدول جدید است که ستون های این جدول، ترکیبی از ستون های تمامی جداول شرکت کننده در join هستند.

ممکن است شما تعدادی از ستون ها را در دستور SELECT استفاده کرده باشید یا تمامی ستون ها را تعیین کرده باشید. در صورتی که نام تمامی ستون ها را فهرست کرده باشید، قاعدتا نام ستون های شرکت کننده در شرط تساوی جلوی عبارت WHERE نیز به صورت تکراری نمایش داده می شوند.

در مقابل EquiJoin نوع دیگری از عملیات join وجود دارد که مبتنی بر عملگرهای غیر متساوی است که آنرا NonEquiJoin می نامند. به عبارت دیگر در NonEquiJoin یکی از عملگرهای نامتساوی، کوچکتر، کوچکتر مساوی، بزرگتر و یا بزرگتر مساوی استفاده می شود. فرمت کلی join از نوع NonEquiJoin همانند آنچه است که پیش از این توضیح داده ایم.