بعض اﻷحيان حين استخراج البيانات نحتاج إلى دمج مجموعة من النتائج من جداول مختلفة ومتعددة في نتيجة واحدة يعني كما لو كانت تلك البيانات موجودة في جدول واحد فقط, سواء كنا سنقوم بعرض تلك النتائج أو معالجتها مرة أخرى, أيضا هناك احتمالية كبيرة أن تكون تلك البيانات متطابقة رغما أنها من جداول مختلفة, كاﻹسم الشخصي والعائلي مثلا first_name
, last_name
, لهذا نظام SQL
لديه بعض اﻷوامر الخاصة التي تساعدنا في التعامل مع مثل هذه الحالة, و لهذا في هذه المقالة سوف نتعمق و نفهم ماذا تعني UNION
و UNION ALL
و INTERSECT
و EXCEPT
في نظام إدارة قواعد البيانات SQL
, مع وصف استخداماتهما العديدة جنبا إلى جنبا مع اﻷمثلة وأيضا سنرى اﻹختلاف بينهما.
هناك أربعة أوامر أساسية تستخدم في دمج النتائج في نظام SQL وهي:
- UNION
- UNION ALL
- INTERSECT
- EXCEPT
اﻷمر UNION:
يستخدم اﻷمر UNION
في دمج النتائج من جداول مختلفة و متشابهة, يقوم بجمع تلك النتائج في نتيجة واحدة مع حذف البيانات المتكررة.
مثال:
لدينا الجدول tbl_1
يحتوي على هذه البيانات:

و لدينا الجدول tbl_2
يحتوي على هذه البيانات:

اﻷن سنقوم بدمج تلك النتائج في نتيجة واحدة وذالك من خلال الكود التالي:
select name, age from tbl_1
union
select name, age from tbl_2;
بعد تنفيذ الكود السابق ستكون النتيجة كما التالي:

كما نرى لقد تم حدف اﻹسم karim
وطباعته مرة واحدة فقط ﻷنه مكرر في الجدول tbl_1
والجدول tbl_2
.
اﻷمر UNION ALL:
اﻷمر UNION ALL
مثله مثلا اﻷمر UNION
فقط يوجد فرق واحد وهو أن اﻷمر UNION ALL
لا يقم بحذف البيانات المكررة عكس اﻷمر UNION
الذي يقوم بحذفهم.
يقوم اﻷمر UNION ALL
بدمج النتائج من جداول مختلفة و متشابهة, يقوم بجمع تلك النتائج في نتيجة واحدة, ويحافظ على البيانات المتكررة في كلا الجداول.
مثال:
لدينا الجدول tbl_1
يحتوي على هذه البيانات:

و لدينا الجدول tbl_2
يحتوي على هذه البيانات:

اﻷن سنقوم بدمج تلك النتائج في نتيجة واحدة وذالك من خلال الكود التالي:
select name, age from tbl_1
union all
select name, age from tbl_2;
بعد تنفيذ الكود السابق ستكون النتيجة كما التالي:

كما نرى لقد تم جمع تلك الجداول في جدول واحد فقط و لم يتم حذف اﻹسم karim
رغما أنه مكرر في الجدول tbl_1
والجدول tbl_2
.
اﻷمر INTERSECT:
اﻷمر INTERSECT
يستخرج لنا فقط البيانات المكررة فقط ويقوم بحذف البيانات الغير مكررة عكس اﻷمر UNION
.
مثال:
ملاحظة:في هذا الجزء سوف نستعمل الجداول السابقة tbl_1
و tbl_2
.
اﻷن سنقوم بتنفيذ الكود التالي:
select name, age from tbl_1
INTERSECT
select name, age from tbl_2;
بعد تنفيذ الكود السابق على الجدول tbl_1
والجدول tbl_2
ستكون النتيجة كما التالي:

كما نرى لقد تم حذف جميع البيانات واﻹحتفاظ باﻹسم karim
فقط, ﻷنه تم تكراره في الجدول tbl_1
والجدول tbl_2
.
اﻷمر EXCEPT:
اﻷمر EXCEPT مختلف تماما فهو يستخرج لنا جميع البيانات الموجودة على الجدول اﻷول فقط tbl_1
مع حذف البيانات المتكررة تماما, عكس اﻷوامر السابقة التي تقوم بدمج كلا الجداول مع بعض.
مثال:
ملاحظة:في هذا الجزء سوف نستعمل الجداول السابقة tbl_1
و tbl_2
.
اﻷن سنقوم بتنفيذ الكود التالي:
select name, age from tbl_1
EXCEPT
select name, age from tbl_2;
بعد تنفيذ الكود السابق على الجدول tbl_1
والجدول tbl_2
ستكون النتيجة كما التالي:

كما نرى لقد تم استخراج جميع البيانات الموجودة على الجدول اﻷول tbl_1
باستثناء اﻹسم karim
ﻷنه تم تكراره في كلا الجداول.