INTERSECT vs MINUS در اوراکل
A INTERSECT B = A MINUS (A MINUS B)
برای درک این مورد با دو مثال متفاوت بیان می کنم که فرق آنها در اوراکل به چه صورت می باشد.
مثال اول در خصوص اشتراک بین دو مجموعه می باشد که از دستور INTERSECT در دیتابیس Oracle استفاده می کنیم:
مجموعه اول شامل اعداد ۱و۲و۳و۴
مجموعه دوم شامل اعداد ۵و۲و۳و۶
select * from(
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
INTERSECT
(select 5 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 6 as x from dual
))
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
INTERSECT
(select 5 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 6 as x from dual
))
خوب جواب دستور بالا در اوراکل بدین صورت است: ۲و۳
حال مثال دوم در خصوص دستور MINUS در دیتابیس Oracle به معنی (تفاضل) دو مجموعه می باشد:
مجموعه اول شامل اعداد ۱و۲و۳و۴
مجموعه دوم شامل اعداد ۵و۲و۳و۶
همانطور که در مثال زیر مشاهده می کنید جواب کوئری که تفاضل دو مجموعه می باشد شامل اعداد ۱و۴ هست.
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
minus
(select 5 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 6 as x from dual
)
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
minus
(select 5 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 6 as x from dual
)
حال می خواهیم که این دستور (A INTERSECT B = A MINUS (A MINUS B را از طریق مثال زیر ثابت کنیم . بدین صورت که مجموعه اول را از نفاضل دو مجموعه که در مثال بالا مشاهده کردید،منها می کنیم.
select * from(
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
MINUS
(
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
minus
(select 5 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 6 as x from dual
) ))
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
MINUS
(
(select 1 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 4 as x from dual
)
minus
(select 5 as x from dual
union
select 2 as x from dual
union
select 3 as x from dual
union
select 6 as x from dual
) ))