إتقان SQL للمقابلات

أساسيات SQL تحت الضغط

4 دقيقة للقراءة

في مقابلات علوم البيانات، ستكتب SQL على سبورة أو مستند مشترك أو IDE عبر الإنترنت. الأخطاء مكلفة. أتقن هذه الأساسيات حتى تصبح تلقائية.

ترتيب تنفيذ الاستعلام

ترتيب تنفيذ SQL يختلف عن طريقة كتابته:

-- ترتيب الكتابة
SELECT columns
FROM table
WHERE condition
GROUP BY column
HAVING aggregate_condition
ORDER BY column

-- ترتيب التنفيذ (احفظ هذا!)
1. FROM      -- أي جدول(جداول)؟
2. WHERE     -- فلترة الصفوف
3. GROUP BY  -- إنشاء المجموعات
4. HAVING    -- فلترة المجموعات
5. SELECT    -- اختيار الأعمدة
6. ORDER BY  -- ترتيب النتائج

لماذا هذا مهم: لا يمكنك استخدام اسم مستعار من SELECT في WHERE (لم يُنشأ بعد)، لكن يمكنك استخدامه في ORDER BY.

ورقة مرجعية لأنواع JOIN

نوع JOIN يُرجع استخدم عندما
INNER JOIN الصفوف المتطابقة فقط تحتاج بيانات من كلا الجدولين
LEFT JOIN كل اليسار + اليمين المتطابق الاحتفاظ بكل السجلات الأساسية
RIGHT JOIN كل اليمين + اليسار المتطابق نادراً (أعد كتابته كـ LEFT)
FULL OUTER كل الصفوف من كليهما تحتاج صورة كاملة
CROSS JOIN الجداء الديكارتي توليد التركيبات

نمط المقابلة: "احصل على كل المستخدمين وطلباتهم، بما في ذلك المستخدمين بدون طلبات"

-- صحيح: LEFT JOIN يحافظ على كل المستخدمين
SELECT u.user_id, u.name, o.order_id, o.amount
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id;

-- خطأ شائع: INNER JOIN يفقد المستخدمين بدون طلبات
SELECT u.user_id, u.name, o.order_id, o.amount
FROM users u
INNER JOIN orders o ON u.user_id = o.user_id;

GROUP BY و HAVING

GROUP BY ينشئ صفوفاً مجمّعة. HAVING يفلتر تلك المجموعات (WHERE يفلتر قبل التجميع).

-- جد العملاء الذين أنفقوا أكثر من $1000 إجمالاً
SELECT
    customer_id,
    COUNT(*) as order_count,
    SUM(amount) as total_spent
FROM orders
WHERE status = 'completed'    -- فلترة قبل التجميع
GROUP BY customer_id
HAVING SUM(amount) > 1000     -- فلترة بعد التجميع
ORDER BY total_spent DESC;

خطأ مقابلة شائع: استخدام WHERE بدلاً من HAVING لشروط التجميع.

التعامل مع NULL

NULLs ألغام في المقابلات. اعرف هذه القواعد:

العملية النتيجة
NULL = NULL NULL (ليس TRUE!)
NULL <> NULL NULL (ليس TRUE!)
NULL + 5 NULL
COALESCE(NULL, 0) 0
COUNT(*) يعد NULLs
COUNT(column) يتجاهل NULLs
SUM(column) يتجاهل NULLs
-- جد المستخدمين بدون طلبات (order_id هو NULL بعد LEFT JOIN)
SELECT u.user_id, u.name
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
WHERE o.order_id IS NULL;  -- استخدم IS NULL، ليس = NULL

فحوصات سريعة للمقابلة

قبل تقديم أي إجابة SQL:

  1. الأسماء المستعارة: هل كل أسماء الجداول والأعمدة المستعارة متسقة؟
  2. JOINs: هل استخدمت نوع JOIN الصحيح؟
  3. NULLs: هل يمكن أن تؤثر قيم NULL على نتائجك؟
  4. GROUP BY: هل يتضمن SELECT كل الأعمدة غير المجمّعة في GROUP BY؟
  5. حالات الحافة: ماذا يحدث مع جداول فارغة أو قيم صفرية؟

السرعة تأتي من ذاكرة العضلات. تدرب على هذه الأنماط حتى تصبح تلقائية، ثم يمكنك التركيز على المنطق الأصعب خلال المقابلات. :::

اختبار

الوحدة 2: إتقان SQL للمقابلات

خذ الاختبار