+1 امتیاز
قبل در برنامه نویسی توسط (7.2هزار امتیاز)
از آنجایی که هم FULL JOIN و هم CROSS JOIN هر دو تمامی رکورد های دو جدول JOIN خورده را می آورند؟ چه تفاوتی در این دو وجود دارد؟

کارایی هر یک از این انواع JOIN چگونه و کجاست؟

2 پاسخ

+2 امتیاز
قبل توسط (7.2هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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 رکورد (وابسته به تطبیق شرط) داشته باشد.

0 امتیاز
قبل توسط (555 امتیاز)
در Full Join شما مثل Join های دیگه باید با استفاده از کلمه کلیدی ON دو فیلد از دو جدول را معیار قرار دهید

اما در Cross Join  کلمه کلیدی ON وجود ندارد و تمامی رکورد های دو جدول آورده میشود

سوالات مشابه

0 امتیاز
1 پاسخ 3.0هزار بازدید
0 امتیاز
1 پاسخ 452 بازدید
+1 امتیاز
1 پاسخ 6.3هزار بازدید
0 امتیاز
2 پاسخ 1.4هزار بازدید
0 امتیاز
0 پاسخ 239 بازدید
...