TOP

SQL-الدرس 12. الاستعلامات المجمعة (UNION)

تستخدم معظم استعلامات SQL عبارة واحدة تقوم بإرجاع البيانات من جدول واحد أو أكثر. يتيح لك SQL أيضًا تشغيل استعلامات منفصلة متعددة في نفس الوقت وعرض النتيجة كمجموعة بيانات واحدة. عادةً ما تسمى هذه الاستعلامات المدمجة بالصلات أو الاستعلامات المعقدة.


1. استخدام عامل التشغيل UNION

يتم دمج استعلامات SQL باستخدام عامل التشغيل UNION. للقيام بذلك، تحتاج إلى تحديد كل طلب SELECT ووضع الكلمة الأساسية UNION بينهما. لا يوجد حد لعدد استخدامات عامل التشغيل UNION في استعلام عام واحد. في القسم السابق، لاحظنا أن MS Access ليس لديه القدرة على إنشاء اتحاد خارجي كامل، والآن سنرى كيف يمكن تحقيق ذلك من خلال عامل التشغيل UNION.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

نرى أن الاستعلام عرض كل الأعمدة من الجدول الأول ومن الجدول الثاني، بغض النظر عما إذا كانت كافة السجلات لها نظيرات في جدول آخر.

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

من الضروري أيضًا اتباع قواعد معينة عند كتابة الاستعلامات المجمعة:

  • يجب أن يتضمن طلب UNION اثنين أو أكثر من عوامل تشغيل SELECT مفصولة بالكلمة الأساسية UNION (أي، إذا تم استخدام أربعة عوامل تشغيل SELECT في الطلب، فيجب أن يكون هناك ثلاث كلمات أساسية UNION)؛
  • يجب أن يحتوي كل استعلام في عامل التشغيل UNION على نفس الأعمدة أو التعبيرات أو الوظائف الإحصائية، والتي يجب أيضًا إدراجها بنفس الترتيب؛
  • يجب أن تكون أنواع بيانات الأعمدة متوافقة. ليس من الضروري أن تكون من نفس النوع، ولكن يجب أن يكون لها نوع مماثل حتى يتمكن نظام إدارة قواعد البيانات (DBMS) من تحويلها بشكل لا لبس فيه (على سبيل المثال، يمكن أن تكون أنواع بيانات رقمية مختلفة أو أنواع تاريخ مختلفة).
  • 2. تضمين أو استبعاد الخطوط المتكررة

    يقوم الاستعلام الذي يحتوي على UNION تلقائيًا بإزالة كافة الصفوف المكررة من مجموعة نتائج الاستعلام (بمعنى آخر، يتصرف مثل جملة WHERE مع شروط متعددة في عبارة SELECT واحدة). هذا هو السلوك الافتراضي لعامل التشغيل UNION، ولكن يمكننا تغييره إذا أردنا ذلك. ولهذا يجب علينا استخدام عامل التشغيل UNION ALL بدلاً من UNION.

    3. فرز نتائج الاستعلامات المجمعة

    يتم فرز نتائج عبارة SELECT باستخدام عبارة ORDER BY. عند دمج الاستعلامات باستخدام UNION، يمكن استخدام جملة ORDER BY واحدة فقط، ويجب وضعها في عبارة SELECT الأخيرة. في الواقع، من الناحية العملية، ليس من المنطقي فرز جزء من النتائج بترتيب واحد، والجزء الآخر بترتيب آخر. لذلك، لا يُسمح باستخدام جمل متعددة ORDER BY.