كيفية استخدام عمليات الدمج Union في لغة SQL


كيفية استخدام عمليات الدمج Union في لغة SQL

يا هلا! اليوم بنتكلم عن واحدة من أقوى أدوات دمج البيانات في SQL: عمليات UNION. ببساطة، UNION تسمح لك بدمج نتائج استعلامين أو أكثر في مجموعة نتائج واحدة. تخيل عندك بيانات في جدولين مختلفين وتبغى تشوفها كلها سوا، هنا يجي دور UNION.

القواعد الأساسية اللي لازم تعرفها

عشان UNION تشتغل صح، فيه كم شرط لازم تتحقق:

  • عدد الأعمدة: لازم يكون عدد الأعمدة في كل استعلام متساوي بالضبط.
  • أنواع البيانات: لازم تكون أنواع البيانات للأعمدة المتناظرة متوافقة (يعني لو العمود الأول في الاستعلام الأول INT، لازم يكون العمود الأول في الاستعلام الثاني INT أو نوع بيانات ممكن يتحول له بسهولة).
  • ترتيب الأعمدة: يفضل يكون ترتيب الأعمدة متطابق عشان النتائج تكون منطقية، لكن حتى لو الأسماء مختلفة، طالما الترتيب وأنواع البيانات متوافقة، بتشتغل.

UNION vs UNION ALL

هنا نقطة مهمة جداً:

  • UNION: تقوم بدمج النتائج وتزيل الصفوف المكررة. يعني لو فيه صف موجود في كلا الاستعلامين، بيظهر مرة واحدة بس في النتيجة النهائية.
  • UNION ALL: تقوم بدمج النتائج وتحتفظ بجميع الصفوف، حتى لو كانت مكررة. يعني لو فيه صف موجود في كلا الاستعلامين، بيظهر مرتين (أو أكثر حسب تكراره).

ملاحظة سريعة: UNION عادةً تكون أبطأ من UNION ALL لأنها تحتاج تبذل جهد إضافي عشان تبحث عن الصفوف المكررة وتحذفها. لو أنت متأكد إن ما فيه تكرار أو ما يهمك التكرار، استخدم UNION ALL عشان أداء أفضل.

مثال عملي: دمج بيانات الموظفين

تخيل عندنا جدولين: Employees_IT و Employees_HR. نبغى نشوف قائمة بأسماء كل الموظفين من القسمين.

جدول Employees_IT:

CREATE TABLE Employees_IT (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Department VARCHAR(50)
);

INSERT INTO Employees_IT (EmployeeID, FirstName, LastName, Department) VALUES
(1, 'أحمد', 'علي', 'IT'),
(2, 'فاطمة', 'محمد', 'IT'),
(3, 'خالد', 'سعيد', 'IT');

جدول Employees_HR:

CREATE TABLE Employees_HR (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Department VARCHAR(50)
);

INSERT INTO Employees_HR (EmployeeID, FirstName, LastName, Department) VALUES
(4, 'نورة', 'ناصر', 'HR'),
(5, 'سارة', 'فهد', 'HR'),
(2, 'فاطمة', 'محمد', 'IT'); -- هذا الصف مكرر قصداً عشان نشوف الفرق

استخدام UNION (لإزالة التكرار)

إذا استخدمنا UNION، الصف المكرر (فاطمة محمد) بيظهر مرة واحدة:

SELECT FirstName, LastName, Department
FROM Employees_IT
UNION
SELECT FirstName, LastName, Department
FROM Employees_HR;

النتيجة المتوقعة:

FirstName | LastName | Department
----------|----------|-----------
أحمد       | علي      | IT
فاطمة     | محمد     | IT
خالد      | سعيد     | IT
نورة      | ناصر     | HR
سارة      | فهد      | HR

استخدام UNION ALL (للاحتفاظ بالتكرار)

إذا استخدمنا UNION ALL، الصف المكرر (فاطمة محمد) بيظهر مرتين:

SELECT FirstName, LastName, Department
FROM Employees_IT
UNION ALL
SELECT FirstName, LastName, Department
FROM Employees_HR;

النتيجة المتوقعة:

FirstName | LastName | Department
----------|----------|-----------
أحمد       | علي      | IT
فاطمة     | محمد     | IT
خالد      | سعيد     | IT
نورة      | ناصر     | HR
سارة      | فهد      | HR
فاطمة     | محمد     | IT  -- هذا الصف مكرر

UNION مع أسماء أعمدة مختلفة

أحياناً تكون عندك أعمدة نفس النوع والترتيب لكن أسماؤها مختلفة. تقدر تستخدم ALIAS عشان تخلي النتيجة أوضح. الأهم هو ترتيب وأنواع البيانات للأعمدة، مش أسماؤها.

SELECT FirstName AS EmployeeName, Department
FROM Employees_IT
UNION
SELECT LastName AS EmployeeName, Department
FROM Employees_HR; -- هنا دمجنا الاسم الأول من الأول مع الاسم الأخير من الثاني

هنا النتيجة بتدمج الأسماء الأولى من Employees_IT مع الأسماء الأخيرة من Employees_HR، وتسمي العمود الناتج EmployeeName. طبعاً هذا مثال للتوضيح، وفي الواقع لازم تكون متأكد إن الدمج له معنى.

الترتيب مع UNION (ORDER BY)

إذا تبغى ترتب النتائج النهائية لعملية UNION، لازم تحط جملة ORDER BY في نهاية الاستعلام الأخير بس.

SELECT FirstName, LastName, Department
FROM Employees_IT
UNION ALL
SELECT FirstName, LastName, Department
FROM Employees_HR
ORDER BY FirstName ASC, Department DESC;

لاحظ إن ORDER BY تنطبق على مجموعة النتائج المدمجة كاملة.

خلاصة

عمليات UNION و UNION ALL أدوات قوية جداً لدمج البيانات من مصادر مختلفة. تذكر دائماً القواعد الأساسية (عدد الأعمدة وأنواع البيانات) واختار بين UNION و UNION ALL بناءً على حاجتك لإزالة التكرار وأداء الاستعلام. استغلها صح وبتوفر عليك وقت وجهد كبير في تجميع التقارير والبيانات.

وبس! أتمنى يكون الشرح واضح ومفيد.