قابلیتهای جدید اوراکل 21c در زمینه عملگرهای مجموعه ای

تا قبل از نسخه 21c، صرفا می توانستیم از سه عملگر مجموعه ای INTERSECT، MINUS و UNION [ALL] در اوراکل استفاده کنیم اما در نسخه 21c دو عملگر جدید EXCEPT و EXCEPT ALL به این مجموعه اضافه شدند که این دو عملگر معادل عملگرهای MINUS و MINUS ALL هستند و صرفا به دلیل استفاده از عبارتهای EXCEPT و EXCEPT ALL در دیتابیسهای دیگر، اوراکل هم این دو عملگر را به مجموعه عملگرهای خود اضافه کرده است.

مجددا تاکید می شود که در عمل تفاوتی بین EXCEPT و MINUS وجود ندارد و حتی در صورت استفاده از عملگر EXCEPT، اوراکل در زمان اجرای پرس و جو، در مرحله Query Transformation، عملگر EXCEPT را به MINUS تبدیل می کند.

با این توضیحات، در شرایط زیر، برای برگرداندن رکوردهایی که در t1.c1 وجود دارند اما در t2.c1 وجود ندارد(با حذف رکوردهای تکراری!!) دو انتخاب داریم، عملگرEXCEPT و عملگر MINUS:

select t1.c1 from t1
MINUS
select t2.c1 from t2;
D
Z
select t1.c1 from t1
EXCEPT
select t2.c1 from t2;
D
Z

با فعال کردن تریس هم خواهیم دید که در زمان استفاده از عملگر EXCEPT، اوراکل کماکان از عملگر MINUS استفاده می کند:

user_id=0 user_name=SYS module=sqlplus@oLinux7 (TNS V1-V3) action=
sql_id=3tkx1k2a2pphc plan_hash_value=1699042171(6545537b) problem_type=3 command_type=3
----- Current SQL Statement for this session (sql_id=3tkx1k2a2pphc) -----
select t1.c1 from t1
EXCEPT
select t2.c1 from t2
Final query after transformations:******* UNPARSED QUERY IS *******
 (SELECT "T1"."C1" "C1" FROM "SYS"."T1" "T1")MINUS (SELECT "T2"."C1" "C1" FROM "SYS"."T2" "T2")

در نسخه 21c، علاوه بر اضافه شدن دو عملگر EXCEPT و EXCEPT ALL، امکان استفاده از کلمه کلیدی ALL به همراه دو عملگر INTERSECT و MINUS هم فراهم شده تا از حذف رکوردهای تکراری در زمان نمایش خروجی جلوگیری شود. در ادامه با ارائه مثالی، بیشتر با این تغییرات آشنا خواهیم شد.

دو مجموعه زیر را در نظر بگیرید:

در صورت استفاده از شرط t2.c1 MINUS t1.c1، صرفا رکوردهایی از t2.c1 که در t1.c1 موجود نیستند نمایش داده خواهند شد البته بعد از محاسبه تفاوت این دو مجموعه، رکوردهای تکراری حذف خواهند شد.

برای مثال، دو رکورد از مجموعه t2.c1 شامل کارکتر F هستند اما هیچ یک از رکوردها در مجموعه t1.c1 شامل کارکتر F نمی باشند. در این شرایط، عملگر MINUS (یا EXCEPT) در زمان نمایش خروجی، رکوردهای تکرار را حذف می کند و کارکتر F را صرفا یکبار نمایش خواهد داد:

SQL> select t2.c1 from t2
MINUS
select t1.c1 from t1;
E
F

در این شرایط، اگر در نظر دارید از حذف رکوردهای تکراری جلوگیری کنید، می توانید از عبارت ALL به همراه عملگر MINUS استفاده کنید برای مثال، با تغییر عملگر MINUS به MINUS ALL، کارکتر F دو بار در خروجی نمایش داده می شود:

select t2.c1 from t2
MINUS ALL
select t1.c1 from t1;
E
F
F

این قائده برای INTERSECT و INTERSECT ALL هم صادق است که در جدول زیر مثالهایی را برای هر یک از این عملگرها مشاهده می کنید:

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

Comment (1)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *