UNION مقابل UNION ALL
الفرق في إزالة التكرارات والأداء، وسبب كون UNION ALL هو المقصود عادةً
UNION مقابل UNION ALL درس مجاني في Coding Interview Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Coding Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
لماذا يسأل المحاورون عن UNION
تضع عمليات المجموعات مجموعة نتائج فوق أخرى عموديًا. ويُعد UNION وUNION ALL أول مشغّلي مجموعات يلجأ إليهما المحاورون، لأن الفرق بينهما يمكن شرحه في سطر واحد، لكنه يكشف ما إذا كنت تفهم التكلفة.
تُصاغ المسألة غالبًا هكذا: «ما الفرق بين UNION وUNION ALL، وأيهما ينبغي أن تستخدم؟» تتضمن الإجابة القوية إزالة التكرارات، والترتيب، والأداء في شرح واحد.
ماذا يفعل UNION
يجمع UNION صفوف استعلامين في مجموعة نتائج واحدة، ثم يزيل الصفوف المكررة. ولا يُعد صفّان مكررين إلا إذا تطابقت جميع الأعمدة.
لإزالة التكرارات، يجب على المحرك ترتيب جميع الصفوف المجمعة أو إنشاء تجزئة لها، وهذا يتطلب عملًا فعليًا. يعيد UNION مجموعة بالمعنى الرياضي: من دون تكرارات.
SELECT city FROM customers
UNION
SELECT city FROM suppliers;ماذا يفعل UNION ALL
يصل UNION ALL مجموعتي النتائج معًا ويحتفظ بكل صف، بما في ذلك الصفوف المكررة. ولا ينفذ إزالة للتكرارات، ولذلك لا ينفذ ترتيبًا أو تجزئة لهذا الغرض.
بما أنه يتجاوز خطوة إزالة التكرارات، يكون UNION ALL أسرع في الغالب، وهو الخيار الصحيح عندما تعلم أن الصفوف لا يمكن أن تتداخل أو عندما تكون التكرارات مطلوبة فعلًا.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;الفرق في الأداء
الخلاصة التي تهم في المقابلة: UNION ALL أقل تكلفة لأنه لا يزيل التكرارات مطلقًا. أما UNION فيجب أن يقارن كل صف مجمع بالصفوف الأخرى لإسقاط التكرارات.
UNION= UNION ALL + خطوة DISTINCT ضمنية.- في مجموعات النتائج الكبيرة، قد تهيمن خطوة DISTINCT هذه على تكلفة الاستعلام.
إذا لم تكن بحاجة إلى إزالة التكرارات، فإن اختيار UNION يهدر وقت المعالج والذاكرة.
مثال تطبيقي يتضمن تكرارات
افترض أن كلا الاستعلامين قد يعيدان الصف 'Paris'. باستخدام UNION تحصل على Paris واحدة. وباستخدام UNION ALL تحصل على Paris مرتين.
يحب المحاورون أن يطلبوا منك توقّع عدد الصفوف. تصوّر دائمًا عملية الوصل الأولية، ثم اسأل: هل يزيل المشغّل التكرارات؟
-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION -> Paris, Lyon, Nice (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)تُحدَّد التكرارات عبر جميع الأعمدة
خطأ شائع: لا يُعد صفّان مكررين إلا إذا كانت كل الأعمدة المحددة متساوية. أضف عمودًا واحدًا مختلفًا، ولن يعود الصفان مكررين، ولذلك سيحتفظ UNION بكليهما.
لهذا السبب يعيد SELECT id, city غالبًا صفوفًا أكثر من SELECT city عند استخدام UNION، حتى مع الجداول نفسها.
SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removedترتيب النتيجة المجمعة
لا يمكنك وضع ORDER BY في الفروع الفردية؛ فهو ينطبق على النتيجة المجمعة بأكملها، ويجب أن يظهر مرة واحدة في النهاية تمامًا.
قد يسألك المحاور عن موضع ORDER BY. والإجابة هي: ORDER BY واحد بعد الاستعلام الأخير، يشير إلى أعمدة الإخراج بالاسم أو بالموضع.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;تأتي أسماء الأعمدة من الاستعلام الأول
عند الإشارة إلى الأعمدة في ORDER BY النهائي، استخدم الأسماء (أو الأسماء المستعارة) من جملة SELECT الأولى. يتم تجاهل أسماء أعمدة الاستعلام الثاني عند تسمية المخرجات.
يهم ذلك عندما تُسمّي الفروع أعمدتها بشكل مختلف. استخدم اسمًا مستعارًا للفرع الأول للتحكم في عنوان المخرجات.
SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;متى يكون UNION هو الخيار الصحيح
استخدم UNION فقط عندما يكون من الممكن فعلًا تكرار الصفوف وتريد ظهور كل صف مميز مرة واحدة. ومن أمثلة ذلك دمج قائمتَي جهات اتصال قد يظهر فيهما الشخص نفسه، أو إنشاء قائمة منزوعة التكرار للقيم المميزة من عدة مصادر.
إذا كان بإمكانك ضمان أن المصادر منفصلة ولا تتداخل، فإن UNION ALL يعطي النتيجة نفسها بسرعة أكبر.
SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across bothمتى يكون UNION ALL هو الخيار الصحيح
استخدم UNION ALL عندما يتعذر حدوث التكرارات، أو عندما تكون التكرارات ذات معنى، أو عندما ستجري عملية تجميع لاحقًا. ومن الأنماط الشائعة تكديس جداول الأقسام الشهرية التي لا تشترك في أي صفوف.
نصيحة للمقابلات: اذكر أن UNION ALL هو الخيار الافتراضي، ولا تنتقل إلى UNION إلا عندما تكون إزالة التكرار مطلوبة فعلًا.
SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;جمع المفاهيم معًا
يمكن أن تبدو إجابة المقابلة المتقنة هكذا: "يزيل UNION الصفوف المكررة، ما يفرض إجراء فرز أو استخدام تجزئة؛ أما UNION ALL فيحتفظ بكل شيء ويكون أسرع. يتطلب كلاهما تطابق عدد الأعمدة وتوافق أنواعها، كما يُكتب أي ORDER BY مرة واحدة في النهاية. أستخدم UNION ALL افتراضيًا ما لم تكن إزالة التكرار مطلوبة."
تُظهر هذه الجملة الواحدة فهمًا للصحة والأداء معًا.
تحقق سريع
اختبر مدى استيعابك للفرق بين UNION وUNION ALL.
مراجعة
أهم النقاط:
UNION= دمج الصفوف + إزالة الصفوف المكررة (أي DISTINCT ضمنيًا، مع تكلفة إضافية).UNION ALL= الدمج مع الاحتفاظ بكل شيء، وهو أسرع والخيار الافتراضي المنطقي.- تتطلب التكرارات تطابق جميع الأعمدة.
- تُكتب جملة
ORDER BYواحدة في النهاية تمامًا، وتستخدم أسماء أعمدة الاستعلام الأول.
استخدم UNION ALL افتراضيًا، ولا تنتقل إلى UNION إلا عندما تكون إزالة التكرار مطلوبة فعلًا.
الأسئلة الشائعة
هل درس «UNION مقابل UNION ALL» مجاني؟
نعم — نص درس «UNION مقابل UNION ALL» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Coding Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «UNION مقابل UNION ALL»؟
الفرق في إزالة التكرارات والأداء، وسبب كون UNION ALL هو المقصود عادةً تتمرن على Coding Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Coding Interview Prep؟
لا تُشترط خبرة سابقة. Coding Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «UNION مقابل UNION ALL»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Coding Interview Prep هذا؟
نعم. كل درس في Coding Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- UNION مقابل UNION ALL
- توافق عدد الأعمدة والأنواع
- INTERSECT وEXCEPT للمقارنة
- محاكاة عمليات المجموعات باستخدام عمليات الربط