SQL – شرح اﻷوامر UNION و UNION ALL و INTERSECT و EXCEPT

SQL: شرح اﻷوامر UNION و UNION ALL و INTERSECT و EXCEPT

بعض اﻷحيان حين استخراج البيانات نحتاج إلى دمج مجموعة من النتائج من جداول مختلفة ومتعددة في نتيجة واحدة يعني كما لو كانت تلك البيانات موجودة في جدول واحد فقط, سواء كنا سنقوم بعرض تلك النتائج أو معالجتها مرة أخرى, أيضا هناك احتمالية كبيرة أن تكون تلك البيانات متطابقة رغما أنها من جداول مختلفة, كاﻹسم الشخصي والعائلي مثلا 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 يحتوي على هذه البيانات:

UNION

اﻷن سنقوم بدمج تلك النتائج في نتيجة واحدة وذالك من خلال الكود التالي:

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 ستكون النتيجة كما التالي:

EXCEPT

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

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا انك انت العليم الحكيم .. اكتب بما فيه فائدة للآخرين هنا .. سواءاً عن التقنية أو التجارب الشخصية أو مواضيع متنوعة .. اكتب وأدون تجاربي واشارككم بعض اللحظات والمواضيع المفيدة ..