عمليات المجموعات (SQL)
تُعد عمليات المجموعات في لغة SQL نوعًا من العمليات التي تسمح بدمج نتائج استعلامات متعددة في مجموعة نتائج واحدة . [ 1 ]
تتضمن عوامل المجموعة في لغة SQL UNION، و INTERSECT، و EXCEPT، والتي تتوافق رياضياً مع مفاهيم الاتحاد والتقاطع وفرق المجموعة .
عامل في نقابة عمالية
في لغة SQL، تجمع عبارة ` UNION-----` نتائج استعلامين SQL في جدول واحد يحتوي على جميع الصفوف المتطابقة . يجب أن ينتج عن الاستعلامين نفس عدد الأعمدة وأنواع البيانات المتوافقة لكي يتم دمجهما. تُحذف أي سجلات مكررة تلقائيًا ما لم UNION ALLيتم استخدام `-----`.
UNIONقد يكون ذلك مفيدًا في تطبيقات مستودعات البيانات حيث لا تكون الجداول مُنظَّمة بشكل كامل . [ 2 ] مثال بسيط على ذلك قاعدة بيانات تحتوي على جداول sales2005ذات sales2006هياكل متطابقة ولكنها منفصلة لاعتبارات الأداء. UNIONيمكن للاستعلام دمج النتائج من كلا الجدولين.
لاحظ أن هذا UNION ALLلا يضمن ترتيب الصفوف. قد تظهر صفوف المعامل الثاني قبل صفوف المعامل الأول أو بعدها أو مختلطة معها. في الحالات التي يُراد فيها ترتيب محدد، ORDER BYيجب استخدام .
لاحظ أن ذلك UNION ALLقد يكون أسرع بكثير من العادي UNION.
أمثلة
بالنظر إلى هذين الجدولين:
| شخص | كمية |
|---|---|
| جو | 1000 |
| أليكس | 2000 |
| بوب | 5000 |
| شخص | كمية |
|---|---|
| جو | 2000 |
| أليكس | 2000 |
| زاك | 35000 |
تنفيذ هذا البيان:
حدد * من جدول المبيعات 2005 وادمجه مع تحديد * من جدول المبيعات 2006 ؛ينتج عن ذلك مجموعة النتائج هذه، على الرغم من أن ترتيب الصفوف قد يختلف لأنه لم ORDER BYيتم توفير أي شرط:
| شخص | كمية |
|---|---|
| جو | 1000 |
| أليكس | 2000 |
| بوب | 5000 |
| جو | 2000 |
| زاك | 35000 |
لاحظ وجود صفين لجو لأن هذين الصفين مختلفان في عموديهما. أما أليكس، فيوجد صف واحد فقط لأن هذين الصفين ليسا مختلفين في كلا العمودين.
UNION ALLيُعطي نتائج مختلفة، لأنه لا يُزيل البيانات المُكررة. تنفيذ هذه العبارة:
حدد * من جدول المبيعات 2005 مع دمج جميع النتائج، ثم حدد * من جدول المبيعات 2006 .سيؤدي ذلك إلى هذه النتائج، مع السماح مرة أخرى بالتفاوت بسبب عدم وجود ORDER BYبيان:
| شخص | كمية |
|---|---|
| جو | 1000 |
| جو | 2000 |
| أليكس | 2000 |
| أليكس | 2000 |
| بوب | 5000 |
| زاك | 35000 |
يتضمن النقاش حول عمليات الربط الخارجي الكاملة أيضًا مثالًا يستخدم UNION.
عامل التقاطع
يأخذ عامل SQL INTERSECTنتائج استعلامين ويعيد فقط الصفوف التي تظهر في كلتا مجموعتي النتائج. ولأغراض إزالة التكرارات، INTERSECTلا يُميّز العامل بينهما NULLs. INTERSECTيزيل العامل الصفوف المكررة من مجموعة النتائج النهائية. INTERSECT ALLلا يزيل العامل الصفوف المكررة من مجموعة النتائج النهائية، ولكن إذا ظهر صف ما X مرة في الاستعلام الأول وY مرة في الاستعلام الثاني، فسيظهرمرات في مجموعة النتائج.
مثال
يُرجع الاستعلام التالي INTERSECTجميع الصفوف من جدول الطلبات حيث تكون الكمية بين 50 و 100.
حدد * من جدول الطلبات حيث تكون الكمية بين 1 و 100تتقاطعSELECT * FROM Orders WHERE Quantity BETWEEN 50 AND 200 ;باستثناء المشغل
يأخذ عامل SQL EXCEPTالصفوف المميزة من استعلام واحد ويعيد الصفوف التي لا تظهر في مجموعة نتائج ثانية. ولأغراض حذف الصفوف وإزالة التكرارات، EXCEPTلا يُميّز العامل بين الاستعلامات NULLs. فهو EXCEPT ALLلا يُزيل التكرارات، ولكن إذا ظهر صف ما X مرة في الاستعلام الأول وY مرة في الاستعلام الثاني، فسيظهر في الاستعلام الثاني.مرات في مجموعة النتائج.
ومن الجدير بالذكر أن منصة أوراكل توفر MINUSعامل تشغيل مكافئ وظيفيًا لعامل التشغيل القياسي في لغة SQLEXCEPT DISTINCT . [ 3 ]
مثال
يُرجع الاستعلام التالي EXCEPTجميع الصفوف من جدول الطلبات حيث تكون الكمية بين 1 و 49، وتلك التي تكون الكمية فيها بين 76 و 100.
وبصيغة أخرى؛ يُرجع الاستعلام جميع الصفوف التي تكون فيها الكمية بين 1 و 100، باستثناء الصفوف التي تكون فيها الكمية بين 50 و 75.
حدد * من جدول الطلبات حيث تكون الكمية بين 1 و 100يستثنيحدد * من جدول الطلبات حيث الكمية بين 50 و 75 ؛مثال
المثال التالي مكافئ للمثال أعلاه ولكن بدون استخدام EXCEPTعامل التشغيل.
استعلم عن جميع البيانات من جدول الطلبات ( Orders ) حيث تكون الكمية بين 1 و 100 ، ثم قم بربط جدول الطلبات ( Orders ) حيث تكون الكمية بين 50 و 75 ، وذلك بربط جدول الطلبات (Orders ) بجدول الطلبات (Orders) حيث تكون الكمية بين 50 و75 ، وذلك بناءً على تطابق معرفات جدول الطلبات (Orders ) حيث يكون معرف جدول الطلبات (Orders ) فارغًا .انظر أيضاً
مراجع
- ↑ "عوامل الاتحاد [ الكل ] ، والتقاطع، والطرح" . أوراكل . تم الاطلاع عليه بتاريخ 14 يوليو 2016 .
- ↑ " تقنية عرض
UNION ALLلإدارة الصيانة والأداء في بيئة مستودع البيانات الضخمة...UNION ALLلقد أنقذت هذه التقنية العديد من عملائي من مشاكل تتعلق بتصميمات قواعد البيانات الحساسة للوقت. عادةً ما تتميز هذه القواعد بتقلبات شديدة في الإطار الزمني الحالي، سواءً كان شهرًا أو يومًا، ونادرًا ما يتم تحديث البيانات القديمة. باستخدام تخصيصات مختلفة لحاويات DASD، ومساحات الجداول، والجداول، وتعريفات الفهارس، يمكن ضبط الإعدادات وفقًا لاعتبارات الأداء المحددة لمستويات التقلب المختلفة وحالات تكرار التحديث. " خيارات تصميم جداول مستودع البيانات تيرابايت - الجزء 2 (تم الاطلاع عليه في 25 يوليو 2006) - ↑ "E071-03،
EXCEPT DISTINCTعامل الجدول: استخدمMINUSبدلاً منEXCEPT DISTINCT" "Oracle Compliance To Core SQL:2003" . Docs.oracle.com . تم الاطلاع عليه في 7 يوليو 2022 .
روابط خارجية
- وثائق MSDN حول استخدام UNION في لغة Transact-SQL لخادم SQL
- تسمية عناصر قائمة الاختيار في عمليات المجموعة
- استخدام UNION في MySQL مع أمثلة
- الاتحاد في MySQL
- عبارة UNION في PostgreSQL
- SQL UNION و UNION ALL
- ترتيب الفرز داخل بيان الاتحاد
- تصميم تدفق بيانات يقوم بتحميل جدول مستودع البيانات
- وثائق أوراكل 11g الخاصة بـ UNION (ALL) و INTERSECT و MINUS
- عوامل مجموعة SQL
- كلمات SQL الرئيسية
