عملگرهای SET در SQL

در دستورات SQL عملگرهای SET سطرهای چندین دستور SELECT را ترکیب کرده و ترتیب نمایش آنها را مشخص می کند. در این متن انواع روش های استفاده از عملگرهای SET توضیح داده می شود.

دستوراتی که در آنها از عملگر SET استفاده می شوند COMPOUND QUERY نام دارند. اولویت اجرای تمام روش های عملگر SET یکسان است. اگر در یک دستور SQL از چند عملگر SET استفاده شود ترتیب اجرای آنها از سمت چپ به راست خواهد بود مگر اینکه از علامت پرانتز استفاده شده باشد.

در جدول زیر، هر یک از عملگرهای SET را مختصرا توضیح دادیم.

مثال: اتصال دو دستور SELECT با استفاده از یک عملگر SET.

SELECT supplier_id FROM suppliers UNION SELECT supplier_id FROM order_details;

 

نکاتی در مورد عملگرهای SET

1.باید دستورات قبل و بعد از عملگر SET از لحاظ تعداد ستون  و نوع داده ی آنها یکسان باشند.

2.نام ستون های متناظر در دو دستور SELECT می تواند متفاوت باشد.

3.در زمان نمایش اطلاعات، نام ستون ها برابر با نام ستون های انتخاب شده در دستور اول خواهد بود.

4.زمانی که از چند عملگر SET استفاده می شود می توان از علامت پرانتز برای تعیین ترتیب اجرای آنها استفاده نمود.

5.می توان فقط یکبار و آن هم در انتهای یک COMPOUND QUERY از عملگر ORDER BY استفاده کرد.

6.می توان از عملگرهای SET در SUBQUERY استفاده نمود.

7.در عملگرهای SET به غیر از UNION ALL به صورت پیش فرض خروجی به صورت صعودی نمایش می یابد.

8.سطرهای تکراری به صورت اتوماتیک حذف می شوند مگر اینکه از عملگر UNION ALL استفاده شود.

9.دیتابیس اوراکل برای دستورات SQL که از عملگرهای SET استفاده می کنند از روش تبدیل نوع داده ی ضمنی استفاده نمی کند. بنابراین اگر نوع داده های ستون های متناظر یکسان نباشد، خطای اوراکل دریافت می کنیم.

 

عملگر UNION

فرض کنید دو دستور SELECT داریم که هر کدام از آنها تعدادی از سطرهای جدول/جداول را انتخاب می کنند. اگر بین این دو دستور از عملگر UNION استفاده شود تمام سطرهایی که توسط آنها انتخاب شده اند با هم ترکیب شده و نمایش می یابند به غیر از سطرهایی از دو دستور که یکسان هستند.

+ توجه شود که عملگر UNION فقط برای ستون هایی که در دستورات SELECT انتخاب شده اند عمل می کند.

+ مقادیر NULL نیز در زمان بررسی یکسان بودن سطرها در نظر گرفته می شوند.

+ در مثال های این متن اگر کارمندان شرکت تغییر شغل داده باشند اطلاعات شغل قبلی آنها در جدول JOB_HISTORY ذخیره می شود.

مثال: اطلاعات مربوط به شغل قبلی و فعلی تمام کارمندان شرکت را نمایش دهید.

مثال: اگر به در دستورات مثال قبل ستون DEPARTMENT_ID را اضافه کنیم، اطلاعات کارمندانی که شغل قبلی و فعلی آنها یکسان است ولی قبلا  DEPARTMENT_ID متفاوت داشته اند نیز نمایش می یابد.

توجه: در مثال های قبلی نتایج بر اساس ستون اول مرتب شده اند.

 

عملگر UNION ALL

اگر بین دو دستور SELECT از عملگر UNION ALL استفاده شود تمام سطرهای دو دستور حتی آنهایی که یکسان هستند نمایش می یابند.

مثال: تمام اطلاعات کارمندان شرکت حتی اگر شغل متفاوت داشته اند نمایش یابد. در این مثال با استفاده از عملگر UNION ALL سطرهای تکراری نیز نمایش می یابند(سطرهای داخل کادر قرمز رنگ). همچنین در زمان نمایش اطلاعات هیچگونه عمل مرتب سازی انجام نشده است.

 

عملگر INTERSECT

این عملگر فقط سطرهایی که توسط هر دو دستور SELECT انتخاب شوند و یکسان باشند را برمی گرداند.

+ همانند عملگر های قبلی باید تعداد و نوع داده ی ستون ها یکسان باشد ولی لزومی ندارد نام آنها برابر باشد.

+ همانند عملگرهای قبلی مقدارهای NULL در زمان بررسی یکسان بودن سطرها در نظر گرفته می شوند.

+ زمانی که از عملگر INTERSECT استفاده می شود بهتر است از پرانتز استفاده گردد تا ترتیب اجرای دستورات به صورت صریح مشخص شود و برای این عملگر اولویت بیشتری درنظر گرفته شود.

مثال: نمایش اطلاعات کارمندانی که حوزه شغلی آنها در زمان گذشته با حال یکسان است. همانطور که مشخص است دو کارمند شماره 176 و 200 تغییر شغل نداشته اند.

مثال: اگر در مثال قبل فقط اطلاعات کارمندانی را بخواهیم که تغییر شغل و تغییر دپارتمان نداشته اند از دستور زیر استفاده می کنیم.

بنابراین با اضافه کردن ستون DEPARTMENT_ID کارمند شماره  200 در خروجی دستور قرار ندارد چون در زمان گذشته در دپارتمان دیگری فعالیت داشته است.

 

عملگر MINUS

این عملگر تمام سطرهایی که توسط دستور اول انتخاب می شوند ولی در دستور دوم قرار ندارند را برمی گرداند. در واقع عمل تفاضل بین دستور اول و دوم انجام می شود.

مثال: نمایش شماره پرسنلی کارمندانی که تغییر شغل نداشته اند.

یکسان کردن تعداد و نوع داده ستون ها

زمانی که از عملگرهای SET استفاده می شود ولی تعداد ستون های دستورات SELECT یکسان نیستند باید ستون معادل تعریف شود. همچنین اگر نوع داده ستون های متناظر، یکسان نبود باید از توابع تبدیل نوع داده استفاده شود.

مثال: سابقه اطلاعات شغلی کارمندان نمایش یابد. همانطور که مشخص است در هرکدام از دستوات SELECT یک ستون متناظر با نام دلخواه و نوع داده یکسان تعریف شده است.

مثال: نام کارمندان، حوزه فعالیت و درآمد آنها نمایش یابد. در این مثال در دستور دوم از مقدار LITERAL برابر با صفر استفاده شده است تا به عنوان یک ستون معادل برای ستون SALARY در دستور اول باشد. بنابراین مقدار ستون SALARY برای سطرهایی که از طریق دستور دوم انتخاب می شوند برابر با صفر خواهد بود(کادر قرمز رنگ).

استفاده از عبارت ORDER BY برای عملگرهای SET

می توان یک مرتبه و در انتهای دستورات عملگر SET از عبارت ORDER BY استفاده نمود. عبارت ORDER BY بر اساس ستون های دستور اول عمل می کند و می تواند نام مستعار یا نام ستون های دستور اول را بپذیرد.

مثال: مرتب سازی نتایج خروجی بر اساس ستون شماره دو در دستور اول(ستون JOB_ID)

 

Comment (1)

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

نشانی ایمیل شما منتشر نخواهد شد.