UNION مقابل UNION ALL
جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy — الدرس 16 من 27.
لقد تعرفت على UNION في الأساسيات: فهي تقوم بتكديس مجموعتي نتائج فوق بعضهما البعض. بشكل افتراضي، تقوم أيضًا بـ إزالة التكرارات، مما يتطلب عملية فرز إضافية.
SELECT name FROM authors
UNION
SELECT name FROM editorsتقوم UNION ALL بنفس عملية التكديس ولكنها تحتفظ بالتكرارات. إنها أسرع وهي ما تريده دائمًا تقريبًا عندما تعلم أن الجانبين لا يمكنهما إنتاج نفس الصف، أو عندما تريد فعليًا حساب كل تكرار.
SELECT name FROM authors
UNION ALL
SELECT name FROM editorsيجب أن يعيد كلا الجانبين نفس عدد الأعمدة، وبنفس الترتيب، وبأنواع متوافقة.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>online_orders</strong>:<strong>order_no</strong>,<strong>amount</strong><strong>retail_orders</strong>:<strong>ticket_no</strong>,<strong>total</strong>
يتتبع الجدولان الطلبات من قنوات مختلفة بأسماء أعمدة مختلفة. قم بإرجاع قائمة واحدة مجمعة لكل طلب مع الأعمدة التالية:
channel:'online'أو'retail'order_id:order_noمن online، وticket_noمن retailamount: إجمالي الطلب (منamountأوtotal)
احتفظ بكل صف (بدون إزالة التكرار). قم بالترتيب حسب amount تنازلياً.
ورقة مرجعية
تقوم UNION بتكديس مجموعتي نتائج وتزيل التكرارات (أبطأ). تقوم UNION ALL بالتكديس وتحتفظ بالتكرارات (أسرع):
SELECT name FROM authors
UNION ALL
SELECT name FROM editorsيجب أن يحتوي كلا الجانبين على نفس عدد الأعمدة، وبنفس الترتيب، وبأنواع متوافقة. تأتي أسماء الأعمدة من جملة SELECT الأولى.
جرّب بنفسك
-- جملتا SELECT تمت محاذاتهما لنفس الأعمدة الـ 3، وتم الربط بينهما بواسطة UNION ALL
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.