SQL هي اللغة التي يجب أن يتقنها كل محلل بيانات. سواء كنت تعمل مع MySQL أو PostgreSQL أو SQL Server أو BigQuery — هذه الدوال العشر تظهر في العمل التحليلي الحقيقي كل يوم. أتقنها وستتعامل مع 90% من أسئلة بيانات الأعمال بثقة.
1. SELECT مع WHERE وORDER BY
أساس كل استعلام. SELECT يحدد الأعمدة، WHERE يفلتر الصفوف بالشرط، ORDER BY يرتب النتائج. فلتر دائماً في أقرب وقت ممكن — يقلل حجم البيانات ويسرّع التنفيذ. استخدم LIMIT أثناء التطوير لتجنب سحب ملايين الصفوف بالخطأ.
2. GROUP BY مع دوال التجميع
GROUP BY يطوي الصفوف في مجموعات ودوال التجميع تحسب إحصاءات ملخصة لكل مجموعة:
SUM() — إجمالي القيم
COUNT() — عدد الصفوف
AVG() — المتوسط
MAX() / MIN() — الأعلى والأدنى
مثال: SELECT region, SUM(revenue) FROM sales GROUP BY region ORDER BY 2 DESC
3. INNER JOIN
يدمج صفوفاً من جدولين حيث يتطابق مفتاح في كليهما. هذا أكثر الربط شيوعاً في الممارسة. حدد دائماً الجدول الذي ينتمي إليه كل عمود باستخدام الأسماء المستعارة لتجنب الغموض.
4. LEFT JOIN
يعيد جميع صفوف الجدول الأيسر والصفوف المطابقة من الأيمن. حين لا يوجد تطابق، تعيد الأعمدة الجانبية اليمنى NULL. لا يقدر بثمن لإيجاد العملاء بدون طلبات، أو المنتجات بدون مبيعات.
5. CASE WHEN
المنطق الشرطي في SQL، مكافئ لـ IF/ELSE. يُستخدم لإنشاء فئات مخصصة أو تسميات:
CASE WHEN revenue > 100000 THEN 'High' WHEN revenue > 50000 THEN 'Medium' ELSE 'Low' END AS tier
6. COALESCE
يعيد أول قيمة غير NULL من قائمة الوسيطات. ضروري لاستبدال NULLs بقيم افتراضية لمنع أخطاء الحساب: COALESCE(phone_number, 'Not provided')
7. HAVING
يفلتر المجموعات بعد التجميع — WHERE لا يمكنه تصفية نتائج التجميع. استخدم HAVING حين يتضمن شرطك SUM أو COUNT أو AVG.
8. الاستعلامات الفرعية
استعلام متداخل داخل استعلام آخر. استخدمها حين تحتاج التصفية على قيمة مجمّعة غير متاحة في الاستعلام الخارجي. للقراءة، فضّل CTEs على الاستعلامات الفرعية المتداخلة عميقاً.
9. CTEs (جملة WITH)
تتيح لك CTEs تعريف مجموعات نتائج مؤقتة مسماة والإشارة إليها لاحقاً في نفس الاستعلام. تجعل المنطق المعقد قابلاً للقراءة والصيانة — كتقسيم صيغة طويلة إلى خطوات وسيطة مسماة.
10. دوال النوافذ
أقوى ميزة في SQL يتعلمها معظم المحللين أخيراً. تحسب دوال النوافذ قيماً عبر الصفوف دون طي مجموعة النتائج:
ROW_NUMBER() — رقم تسلسلي فريد
RANK() — ترتيب مع فجوات للتعادلات
LAG() / LEAD() — الوصول لقيم الصف السابق/التالي
SUM() OVER (PARTITION BY ...) — الإجماليات التراكمية
كيف تتعلم هذه الدوال فعلاً
لا تكتفِ بالقراءة — مارس على بيانات حقيقية فوراً. استخدم Mode Analytics أو SQLZoo أو قسم SQL في LeetCode. حلّ 50 مسألة تغطي الدوال العشر. عند تلك النقطة، يتوقف SQL عن الشعور بأنه لغة تترجمها ويبدأ في الشعور بأنه تفكير.
