0Pricing
SQL Interview Prep · درس

توافق عدد الأعمدة والأنواع

القواعد التي يجب أن تحققها مجموعات النتائج لدمجها، وأخطاء عدم التطابق الشائعة

توافق عدد الأعمدة والأنواع درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

قواعد التوافق التي يختبرها المحاورون

تتطلب كل عملية مجموعة (UNION وINTERSECT وEXCEPT) أن تكون مجموعتا النتائج متوافقتين مع UNION. يطرح المحاورون هذا السؤال لمعرفة ما إذا كنت تدرك الطرق غير الواضحة التي يمكن أن تفشل بها هذه الاستعلامات.

تحكم التوافقَ قاعدتان: تطابق عدد الأعمدة وتوافق أنواع البيانات بحسب الموضع. إذا أخطأت في أي منهما، فستحصل على خطأ أو نتيجة غير متوقعة.

القاعدة 1: العدد نفسه من الأعمدة

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

هذا هو الخطأ الأكثر شيوعًا في عمليات المجموعات أثناء المقابلات، خصوصًا بعد أن يعدّل أحدهم فرعًا وينسى تعديل الفرع الآخر.

SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columns

القاعدة 2: أنواع متوافقة بحسب الموضع

تُطابَق الأعمدة بحسب الموضع لا الاسم. يقترن العمود الأول من الاستعلام الأول بالعمود الأول من الاستعلام الثاني، وهكذا. ويجب أن تكون أنواع كل زوج متوافقة.

يعني التوافق عادةً إمكانية التحويل الضمني: فـ INT وBIGINT متوافقان، أما INT وDATE فغالبًا غير متوافقين.

SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OK

الموضع، لا الاسم، هو المهم

هناك فخ دقيق: يمكن أن تحمل الأعمدة أسماء مختلفة ومع ذلك تُدمج، ما دامت المواضع متطابقة من حيث النوع. وعلى العكس، فإن تطابق الأسماء مع ترتيب خاطئ سيؤدي إلى عدم محاذاة البيانات.

اقرأ عمليات المجموعات دائمًا عمودًا بحسب موضعه. يضع المحاورون أعمدة متبادلة لاختبار هذه النقطة.

SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong column

أسماء أعمدة المخرجات

تأخذ مجموعة النتائج أسماء أعمدتها من الاستعلام الأول. ويتم تجاهل تسميات الاستعلام الثاني. للتحكم في العناوين، استخدم أسماء مستعارة للأعمدة في الفرع الأول.

ولهذا السبب يجب أن تشير جملة ORDER BY اللاحقة إلى أسماء الاستعلام الأول أو تستخدم المواضع الترتيبية.

SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, location

تحويل الأنواع ضمنيًا

عندما تكون لعمودين مقترنين موضعيًا أنواع مختلفة لكنها متوافقة، يختار المحرك نوع نتيجة يتسع لاستيعابهما معًا. يؤدي دمج INT مع DECIMAL عادةً إلى الحصول على DECIMAL.

إن ذكر هذا التحويل في المقابلة يدل على عمق فهمك: فأنت تعرف أن العمود لا يسبب خطأ، بل يُرقّى إلى النوع الأوسع.

SELECT amount FROM int_table   -- INT
UNION ALL
SELECT amount FROM dec_table;  -- DECIMAL
-- result column is DECIMAL

ملء الأعمدة المفقودة باستخدام NULL

عندما يختلف شكل استعلامين بصورة طبيعية، يمكنك محاذاتهما بإضافة أعمدة نائبة. ومن الأساليب الشائعة تحديد NULL (بعد تحويله إلى نوع معين غالبًا) لملء خانة موجودة في الفرع الآخر.

يؤدي تحويل NULL إلى تجنب تخمين المحرك لنوعه ويحافظ على توافق الأعمدة.

SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;

مثال عملي على فشل عدم تطابق الأنواع

في هذه الحالة، يكون العمود الثاني تاريخًا في أحد الفرعين ونصًا في الفرع الآخر. ترفض المحركات الصارمة ذلك، بينما قد تجري المحركات المتساهلة تحويلًا غير متوقع. والحل الآمن هو استخدام CAST صريح حتى يتفق الطرفان.

في المقابلات، اقترح إجراء التحويل بدلًا من الاعتماد على التحويل الضمني.

SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatible

تنطبق هذه القواعد على جميع معاملات المجموعات

قواعد عدد الأعمدة وتوافق الأنواع متطابقة في UNION وUNION ALL وINTERSECT وEXCEPT. فجميعها تكدّس مجموعات النتائج رأسيًا، وتتطلب مدخلات متوافقة مع UNION.

لذلك تكفي قائمة تحقق ذهنية واحدة لكل عملية مجموعة: احسب الأعمدة، وتحقق من الأنواع بحسب الموضع، وتحكم في الأسماء من خلال الاستعلام الأول.

SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNION

قائمة التحقق قبل التنفيذ

قبل دمج مجموعات النتائج، تحقق مما يلي:

  • وجود العدد نفسه من الأعمدة في كل فرع.
  • توافق نوع كل زوج موضعي (أجرِ تحويلًا إذا لم تكن متأكدًا).
  • وجود الأعمدة بالترتيب المنطقي نفسه.
  • تعيين الأسماء المستعارة في الاستعلام الأول للحصول على أسماء مخرجات واضحة.

إن تلاوة قائمة التحقق هذه بصوت عالٍ في المقابلة تمنع أخطاء عدم المحاذاة غير الواضحة.

ربط المفاهيم معًا

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

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

تحقق سريع

كيف تحدد SQL الأعمدة المتناظرة بين فرعي UNION؟

مراجعة

أهم النقاط:

  • تحتاج جميع معاملات المجموعات إلى العدد نفسه من الأعمدة في كل فرع.
  • تُطابَق الأعمدة بحسب الموضع، ويجب أن يكون نوع كل زوج متوافقًا.
  • قد تُحوَّل الأنواع المتوافقة إلى نوع مشترك أوسع.
  • استخدم CAST(NULL AS type) لملء الأشكال المختلفة.
  • تأتي أسماء المخرجات من الاستعلام الأول.

الأسئلة الشائعة

هل درس «توافق عدد الأعمدة والأنواع» مجاني؟

نعم — نص درس «توافق عدد الأعمدة والأنواع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

ماذا ستتعلم في «توافق عدد الأعمدة والأنواع»؟

القواعد التي يجب أن تحققها مجموعات النتائج لدمجها، وأخطاء عدم التطابق الشائعة تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟

لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «توافق عدد الأعمدة والأنواع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟

نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. UNION مقابل UNION ALL
  2. توافق عدد الأعمدة والأنواع
  3. INTERSECT وEXCEPT للمقارنة
  4. محاكاة عمليات المجموعات باستخدام عمليات الربط
← العودة إلى SQL Interview Prep