الجزء
ال16: الأتحاد والأتحاد العام
Union & Union All
تستخدم هذه الفقرات (Union & Union All) لأسترجاع عدة جداول في مجموعة نتيجة واحدة اي جدول واحد, في هذا
الجزء سنتعرف على الفرق بينهما وبينهما وبين الربط join .
شروط استخدام الUnion & Union All :
·
ان تكون جميع الحقول نفس نوع البيانات (DATA TYPE) وفي نفس الترتيب.
الفرق بين الUnion & Union All :
·
من حيث سرعة تنفيذ جملة الأستعلام Query , نستطيع
القول ان الUnion All اسرع في التنفيذ من الUnion والسبب في
ذلك ان الUnion ينفذ
عملية الترتيب Sorting وبأستخدام distinct قبل استرجاع البيانات من عدة جداول, بينما الUnion All يسترجع
البيانات مباشرة بعد دمج عدة جداول مع بعضها.
·
الUnion يسترجع البيانات من عدة جداول في جدول واحد
ويحذف التكرار بتنفيذ عملية الترتيب وبأستخدام distinct, بينما في
الUnion All يسترجع كل البيانات المتشابهه والغير متشابهه في جدول واحد.
ملاحظة: استخدام الOrder by مع الUnion & Union All يجب ان يكون في اخر جملة الأستعلام.
الفرق بين الUnion & Union All مع الJoin:
·
طبعاً في الUnion
& Union All انت مقيد
بشرط ان تكون القيم المسترجعة من جدولين او اكثر من نفس نوع البيانات التي ستكون
في جدول واحد,بينما في الJoin يوجد علاقة منطقية تربط جدولين او اكثر
بأستخدام مفهوم الPK-FK, وتستطيع استرجاع البيانات من اي حقل من
الجدولين او اكثر وباي ترتيب ولا يوجد قيود ان تكون البيانات مرتبة حسب نوع
البيانات!
لتوضيح ماسبق ذكره لنأخذ المثال
التالي: ثلاث جداول للموظفين من امريكا, بريطانيا, العراق في كل جدول يحتوي على ID اي المعرف
لكل موظف, واسم الموظف Name والبريد الألكتروني Email كالأتي:
tblEmp_America
ID
|
Name
|
Email
|
1
|
John
|
john@private.com
|
2
|
Noah
|
Noah@private.com
|
3
|
Simon
|
Simon@private.com
|
tblEmp_Britain
ID
|
Name
|
Email
|
1
|
Sarah
|
Sarah@wd.com
|
2
|
Jamal
|
jamal@wd.com
|
3
|
Larry
|
Larry@wd.com
|
tblEmp_Iraq
ID
|
Name
|
Email
|
1
|
صفاء
|
safaa@it.com
|
2
|
هيثم
|
hytheem@it.com
|
3
|
مهند
|
mohanned@it.com
|
4
|
همام
|
humam@it.com
|
لأحظ ان الثلاث جداول لهم نفس
ترتيب الحقول ونفس نوع بيانات الحقل!!! وبهذا نستطيع ان نستخدم الUnion & Union All معهم.
في البدء لنقم بأنشاء الجداول
الثلاث بأستخدام جملة الأستعلام التالية:
USE [test]
Go
CREATE TABLE tblEmp_America
(
[ID] INT NOT NULL IDENTITY(1,1),
[Name] NVARCHAR(20) NOT NULL,
[Email] NVARCHAR(30) NOT NULL
)
CREATE TABLE tblEmp_Britain
(
[ID] INT NOT NULL IDENTITY(1,1),
[Name] NVARCHAR(20) NOT NULL,
[Email] NVARCHAR(30) NOT NULL
)
CREATE TABLE tblEmp_Iraq
(
[ID] INT NOT NULL IDENTITY(1,1),
[Name] NVARCHAR(20) NOT NULL,
[Email] NVARCHAR(30) NOT NULL
)
لاحظ في الصورة اعلاه للبيانات
عندما اردنا استرجاع البيانات من الثلاث جداول, النتيجة هي ثلاث مجموعة نتائجResult Sets ؟! ودرس
اليوم سيكون عن كيفية استرجاع الثلاث جداول في نتيجة واحدة 1-Result Set :
بأستخدام الUnion :
لاحظ النتيجة هي جدول واحد يحمل
قيم الجداول الثلاث, وكذلك مرتبة!
ملاحظة: هنا في كل الجداول لا يوجد تكرار للبيانات اذا كان
هناك تكرار في ID,Name,Email في سجلين او اكثر فأن هذا التكرار سيهمل اي
لم يتم اظهاره!
بينما اذا استخدمنا الUnion All: النتيجة في جدول واحد ايضاً ولكن تكون غير مرتبة!!!
وكذلك اذا كان هنالك تكرار للبيانات فأن هذا التكرار سيظهر ولا يتم اهماله:
تستطيع استخدام الOrder by عند نهاية
جملة الأستعلام فقط:
ملاحظة اخير: السرعة من حيث التنفيذ بين الUnion & Union All:
عند استخدام ال Union All: لا يوجد ترتيب للبيانات فقط اتحاد الجداول
الثلاث واسترجاعها:
وعند استخدام الUnion: عملية الSort تأخذ 52% من سرعة تنفيذ جملة
الأستعلام:
Comments
Post a Comment