الخميس، 3 يوليو 2014

Union and Union All

Union and Union All

استعلام Union  استعلام يستخدم عامل UNION لجمع نتائج استعلامين محددين أو أكثر. تقوم  Union  بإنشاء استعلام  يقوم بدمج نتائج اثنين أو أكثر من الجداول أو الاستعلامات المستقلة.

شكل جملة Union:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

شكل جملة Union All:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

المثال التالي يوضح استخدام Union All:


جدول tblCashCustomer:


جدول  tblInstallmentCustomer:



أمر Union All Command:
SELECT * FROM tblCashCustomer
UNION ALL
SELECT * FROM tblInstallmentCustomer


الأمر  Union All Command يقوم بإرجاع كافة السجلات Records من الجداول حتى بتواجد بها تكرار ويقوم بدمجها مع بعض ولكن هناك بعض القيود التي يجب الالتزام بها يجب ان تكون عدد ال fields  المستعلم عنها متساوي, استخدم الأسماء المستعارة Alias فقط في جملة SELECT الأخيرة لأنه يتم تجاهلها في أي جمل أخرى, وايضا في جملة ORDER BY يتم الاشارة إلى ال fields  باستخدام أسمائها في جملة SELECT  الأخيرة.



أمر Union Command:
SELECT  *FROM    tblCashCustomer
UNION
SELECT  * FROM    tblInstallmentCustomer


الأمر  Union Command يقوم بإرجاع كافة السجلات Records من الجداول دون تكرار بالبيانات ويقوم بدمجها مع بعض مع نفس القيود مثل Union All  المذكورة سابقاً.

نلاحظ في جملة Union  السابقة تم حذف التكرار في السجلات Sara لوجود تكرار بها نفس رقم ال ID والاسم Name و الايميل Email.


الفرق بين Union  و Union All
الأمر Union يقوم بحذف التكرار من السجلات Rows ... ولكن Union All  لا يقوم بذلك.
الأمر Union يستخدم الآمر Distinct لحذف التكرارات لذلك فهو ابطئ من Union All.






الجمل التالية خطأ:


* خطأ عدد ال fields.
SELECT  ID,Name FROM tblCashCustomer
UNION All
SELECT  ID,Name,Email FROM tblInstallmentCustomer


هنا عدد ال fields المختارة لا يتطابق في الجملة الأولى بها عدد field 2 , والجملة الثانية بها عدد fields3.

Msg 205, Level 16, State 1, Line 1
All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.



* خطأ تطابق  الحقول fields مع بعضها.
SELECT Email,NAME,ID FROM tblCashCustomer
UNION All
SELECT ID,Name,Email FROM tblInstallmentCustomer

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value 'sara@gmail.com' to data type int.



* خطأ في الترتيب.
SELECT  ID,Name,Email FROM tblCashCustomer
ORDER BY Name
UNION
SELECT  ID,Name,Email FROM tblInstallmentCustomer


هنا تم استخدام الجملة ORDER BY بعد جملة ال SELECT الأولى.

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'UNION'.






ليست هناك تعليقات:

إرسال تعليق

يسعدني إرسال تعليقاتكم وأسئلتكم واقتراحاتكم