FULL JOIN همان گونه که در جواب مرتبط آمده است جزو OUTER JOIN ها می باشد. در صورتی که رکورد معادل بر روی شرط JOIN در دو جدول وجود داشته باشد، آن سطر به صورت کامل می آید و در غیر اینصورت رکوردهای مربوط به جدولی که نقص اطلاعات دارد نمی آید.
اما CROSS JOIN ضرب دکارتی دو جدول است و هر رکورد یک جدول را به ازای تمامی رکوردهای جدول دیگر تکرار می کند.
برای مثال دو جدول زیر را در نظر بگیرید:
SELECT *
FROM test_mohi;
FIRST_FIELD SECOUND_FIELD THIRD_
----------- ------------- ----------
1 1 5
2 1 6
1 2 4
2 2 5
2 0 10
5 rows selected.
SELECT *
FROM test_mohi_2;
FIRST_FIELD SECOUND_FIELD THIRD_
----------- ------------- ----------
3 3 3
1 2 3
2 rows selected.
در صورت FULL JOIN بین آنها مقادیر زیر را خواهیم داشت:
SELECT *
FROM test_mohi t1 FULL JOIN test_mohi_2 t2 ON t1.first_field = t2.first_field;
FIRST_FIELD SECOUND_FIELD THIRD_ FIRST_FIELD_1 SECOUND_FIELD_1 THIRD__1
----------- ------------- ---------- ------------- --------------- ----------
1 1 5 1 2 3
2 1 6
1 2 4 1 2 3
2 2 5
2 0 10
3 3 3
6 rows selected.
و در صورت CROSS JOIN :
SELECT *
FROM test_mohi t1 CROSS JOIN test_mohi_2 t2;
FIRST_FIELD SECOUND_FIELD THIRD_ FIRST_FIELD_1 SECOUND_FIELD_1 THIRD__1
----------- ------------- ---------- ------------- --------------- ----------
1 1 5 3 3 3
2 1 6 3 3 3
1 2 4 3 3 3
2 2 5 3 3 3
2 0 10 3 3 3
1 1 5 1 2 3
2 1 6 1 2 3
1 2 4 1 2 3
2 2 5 1 2 3
2 0 10 1 2 3
10 rows selected.
همانگونه که مشاهده می کنید در FULL JOIN چون هر دو جدول دارای مقدار 1 در فیلد FIRST_FIELD می باشند، رکوردهای دارای مقدار 1 در FIRST_FIELD به صورت کامل آمده اند.
به صورت کلی تعداد رکورد حاصل از CROSS JOIN برابر با (تعداد رکورد جدول اول * تعداد رکورد جدول دوم) می باشد و تعداد رکورد حاصل از FULL JOIN بین (ماکزیمم تعداد رکورد های جدول اول و تعداد رکورد های جدول دوم) و (تعداد رکورد جدول اول + تعداد رکورد جدول دوم) متغیر است.
یعنی برای مثال ما که جدول اول 5 رکورد و جدول دوم 2 رکورد دارد، CROSS JOIN باید 10 رکورد و FULL JOIN بین 5 تا 7 رکورد (وابسته به تطبیق شرط) داشته باشد.