2018-06-24

ما الفرق بين UNION و UNION ALL فى SQL SERVER

  1. UNION تزيل اي صفوف مكررة فى  انتيجة النهائية للكويري
  2. بينما UNION ALL تحافظ على نتيجة تنفيذ الكويري كما هي بدون إزالة لأى  صفوف متكررة
لنزي مثال على ذلك


الكود التالي يقوم بانشاء جدولين table1 و table2  و ادخال بعض البيانات فيهم
-- انشاء جدولين و ادخال البيانات فيهم للتجربة
CREATE TAble table1 (id int, name varchar(50))
CREATE TAble table2 (id int, name varchar(50))


insert into table1 (id, name)
values ( 1 , 'Mohamed')
insert into table1 (id, name)
values ( 2 , 'Yasser')
insert into table1 (id, name)
values ( 3 , 'Ibrahem')


insert into table2 (id, name)
values ( 2 , 'Yasser')
insert into table2 (id, name)
values ( 4 , 'Ahmed')
insert into table2 (id, name)
values ( 5 , 'Mahmoud')
ثم نقوم بتنفيذ الكويري التالى لعرض محتويات الجدولين
Select id,name from table1
Select id,name from table2
 نلاحظ فى النتائج ان النتيجة الأولى بها Id=2 , name=Yasser  و نفس الصف موجود فى  النتيجة الثانية من الجدول الثاني

 لنري الان عند عمل Union , Union ALL  بين الجملتين كيف ستكون النتيجة


Select id,name from table1
UNION
Select id,name from table2
Select id,name from table1
UNION ALL
Select id,name from table2

 نلاحظ انه عند استعمال UNION ALL  ظهر Id=2 , name = Yasser  مرتين في صف رقم 2 و صف رقم 4  حيث واحدة من نتيجة الكويري الأول و الثانية من نتيجة الكويري الثاني. و لكن عند استعمال UNION ظهر Id=2, name= Yasser  مرة واحدة فى الصف رقم 2 و لم تظهر مرة أخري و هذا بسبب ان UNION تزيل اي صفوف مكررة

ملحوظة هامة

UNION تزيل اي صفوف مكررة حتى لو كان التكرار فى موجود فى الأصل فى النتيجة الخاصة بالكويري الأول
فمثلا لو ان الجدول الأول يحتوي على صفين كلمنها فيه ID=2 , Name= Yasser  فسيقوم بحف هذا التكرار.
اى لا يشترط لحذف التكرار ان يكون التكرار ناتج عن وجود نفس البيانات فى نتيجة الكويري الاخر المعمول له UNION

نقوم بحذف البيانات من الجدولين ثم ادخال بيانات جديدة لنقوم بتجربة UNION مرة أخري

delete from table1
delete from table2

/* ادخال البيانات مرة اخري للتجربة*/


insert into table1 (id, name)
values ( 1 , 'Mohamed')
insert into table1 (id, name)
values ( 2 , 'Yasser')
insert into table1 (id, name)
values ( 3 , 'Ibrahem')
insert into table1 (id, name)
values ( 2 , 'Yasser')


insert into table2 (id, name)
values ( 5 , 'Mahmoud')



Select id, name from table1
select id, name from table2
يظهر فى نتيجة الكويري بالصورة السابقه ان الجدول الأول table1 يحتوي على صفين بهما نفس البيانات و هما الصف الثاني و الرابع
عند تنفيذ UNION بيانات نتائج الصف الأول وا لثاني يختفي التكرار الموجود فى الجدول الأول يجب الانتباه لهذه النقطه لأنه احيانا لا يكون من المرغوب إزالة التكرار لو كان التكرار موجود كنتجية لتكرار فعلى في بيانات احد الجداول و يؤدي ذلك إلى نتائج غير متوقعه

لتحميل ملف السكويل الخاص بالأكود اضغط هنا


و فى النهاية في انتظار ارائكم و تعليقاتكم

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

إرسال تعليق

الموضوع المميز

تاثير استعمال Like على Performance الكويري في SQL Server

  نفترض كويري كما بالأسفل Select Id, FirstName, LastName,  JobDescription  From Employee where FristName Like '%hm%'

أكثر المواضيع زيارة