SQL هي لغة التخاطب مع قواعد البيانات العلائقية، وهي من أكثر المهارات انتقالًا بين المجالات، فيحتاجها المطور والمحلل ومدير المنتج. وجمالها أنها قريبة من الجمل الإنجليزية. نمر هنا على أهم الاستعلامات بأمثلة تناسب متجرًا صغيرًا.

كيف تقرأ البيانات بالاستعلامات الأساسية؟
نفترض جدولين: customers للعملاء وفيه id وname وcity، وorders للطلبات وفيه id وcustomer_id وtotal وcreated_at. وأمثلتنا عليهما:
اختيار الأعمدة: الأمر SELECT يحدد ما تريد عرضه وFROM يحدد الجدول، مثل SELECT name, city FROM customers;. وتجنب علامة النجمة في الكود الدائم، فاذكر الأعمدة صراحة لوضوح الاستعلام وكفاءته.
التصفية: WHERE تقيّد الصفوف بشرط، مثل WHERE city = 'الرياض'. وتدعم عوامل المقارنة وAND وOR وNOT.
الشروط المتعددة: IN للقيم المتعددة، وBETWEEN للمجالات، وLIKE للأنماط النصية. وانتبه إلى أن البحث النصي الواسع قد يبطئ الاستعلام.
الترتيب: ORDER BY مع ASC أو DESC، مثل ترتيب الطلبات من الأحدث. ولا تفترض ترتيبًا بدونه.
تحديد العدد: LIMIT في كثير من الأنظمة (وصيغ أخرى في بعضها مثل TOP) لعرض عدد محدود، ويفيد في الترقيم مع OFFSET.
الأسماء المستعارة: AS تعطي عمودًا أو جدولًا اسمًا مختصرًا أو مفهومًا، وتفيد في الاستعلامات الطويلة.
القيم الفارغة: NULL ليست صفرًا ولا نصًا فارغًا، ولا تقارن بها بـ = بل بـ IS NULL. وهذا من أشهر أخطاء المبتدئين.
كيف تلخص البيانات بالتجميع؟
كثيرًا ما تريد إجابات مثل مجموع المبيعات أو عدد العملاء، لا سجلات مفردة. وهنا تأتي دوال التجميع:
الدوال الأساسية: COUNT للعد، وSUM للمجموع، وAVG للمتوسط، وMIN وMAX للأصغر والأكبر. مثل SELECT SUM(total) FROM orders;.
التجميع بمجموعات: GROUP BY يقسم الصفوف إلى مجموعات ثم يطبق الدالة على كل منها، مثل مجموع الطلبات لكل عميل.
القاعدة المهمة: كل عمود في SELECT يجب أن يكون في GROUP BY أو داخل دالة تجميع، وإلا فسيرفض أغلب الأنظمة الاستعلام أو يعطي نتائج مضللة.
التصفية بعد التجميع: WHERE تصفّي الصفوف قبل التجميع، وHAVING تصفي المجموعات بعده، مثل عملاء مجموع طلباتهم أكبر من حد معين.
العد المميز: COUNT(DISTINCT customer_id) يعد القيم الفريدة، مثل عدد العملاء الذين طلبوا فعلًا.
التجميع حسب الزمن: استعمل دوال التاريخ في نظامك لتجميع المبيعات بالشهر أو اليوم، وتختلف أسماء الدوال بين الأنظمة، فراجع توثيق نظامك.
انتبه للقيم الفارغة: أغلب دوال التجميع تتجاهل NULL، ما قد يغير نتيجتك دون أن تنتبه.
كيف تربط الجداول ببعضها؟
قوة النموذج العلائقي في الربط. فبدل تكرار بيانات العميل في كل طلب، تخزنها مرة وتربط:
INNER JOIN: يعيد الصفوف التي لها مقابل في الجدولين فقط. مثل الطلبات مع أسماء عملائها: FROM orders o JOIN customers c ON o.customer_id = c.id.
LEFT JOIN: يعيد كل صفوف الجدول الأيسر ومعها ما يقابلها من الأيمن أو NULL. ويفيد للسؤال: من العملاء الذين لم يطلبوا قط؟ بإضافة شرط IS NULL على جانب الطلبات.
RIGHT وFULL JOIN: أقل استعمالًا، وبعض الأنظمة لا تدعم الأخير. وغالبًا يمكن التعبير عنهما بـ LEFT مع تبديل الترتيب.
شرط الربط: حدده بدقة في ON، فنسيانه يحوّل الاستعلام إلى ضرب كل صف في كل صف (حاصل ديكارتي) ويعيد نتائج هائلة.
الربط المتعدد: يمكن ربط أكثر من جدولين بالتتابع، لكن تحقق من النتائج عند كل خطوة لئلا تتضاعف الصفوف بسبب علاقات متعدد لمتعدد.
الأسماء المستعارة للجداول: ضرورية حين يتشابه اسم عمود في جدولين، مثل id، فتكتب o.id وc.id.
اختبر بأمثلة صغيرة: قبل الاعتماد على نتيجة ربط، تحقق من عدد الصفوف يدويًا على بيانات قليلة.
كيف تكتب استعلامات أعقد وتبقيها مفهومة؟
حين تكبر الأسئلة، تحتاج أدوات تنظيم. وهذه تتفاوت دعمها بين الأنظمة، فراجع توثيقك:
الاستعلامات الفرعية: استعلام داخل استعلام، مثل اختيار الطلبات التي مجموعها أكبر من متوسط الطلبات. مفيدة لكن قد تصعب قراءتها.
التعبيرات الجدولية العامة (CTE): بصيغة WITH، تسمي نتيجة وسيطة وتستعملها بعد ذلك، فتقسم السؤال الكبير إلى خطوات مقروءة. وتفضل غالبًا على التداخل العميق.
عبارة CASE: منطق شرطي داخل الاستعلام، مثل تصنيف الطلبات إلى صغير ومتوسط وكبير بحسب المبلغ.
دوال النوافذ: تحسب قيمًا عبر مجموعة صفوف دون دمجها، كترتيب الطلبات داخل كل عميل أو المجموع التراكمي. وهي أقوى أدوات التحليل لكنها أصعب على المبتدئ.
UNION: يدمج نتائج استعلامين متوافقين في الأعمدة. وUNION ALL يحتفظ بالتكرار وأسرع.
التنسيق: رتّب الاستعلام على أسطر، وابدأ كل جزء بسطر، واستعمل أحرفًا كبيرة للكلمات المفتاحية وأسماء واضحة. فالاستعلام يُقرأ أكثر مما يُكتب.
علّق على المنطق غير الواضح: خاصة شروط العمل، لأن من يقرأ بعدك لن يعرف لماذا اخترت هذا الشرط.
كيف تعدل البيانات وتحمي نفسك من الأخطاء؟
الاستعلامات التي تغير البيانات تتطلب حذرًا مضاعفًا، فخطأ واحد قد يمسح بيانات حقيقية:
الإدراج: INSERT INTO customers (name, city) VALUES (...). وحدد الأعمدة دائمًا ولا تعتمد على ترتيبها الداخلي.
التحديث: UPDATE customers SET city = ... WHERE id = .... ونسيان WHERE يحدث كل الصفوف، وهو خطأ كلاسيكي مؤلم.
الحذف: DELETE FROM ... WHERE ... بنفس التحذير. ويفضل في كثير من التطبيقات الحذف المنطقي بوسم السجل محذوفًا بدل إزالته.
اختبر بـ SELECT أولًا: قبل أي تحديث أو حذف، نفذ SELECT بنفس شرط WHERE وتأكد من الصفوف التي ستتأثر.
استعمل المعاملات: ابدأ معاملة ونفذ التغييرات وتحقق، ثم أكمل أو تراجع. وهي شبكة أمان.
لا تجرب على بيانات الإنتاج: استعمل نسخة تجريبية أو بيانات وهمية للتعلم.
احذر حقن SQL: لا تبنِ الاستعلام بدمج نص المستخدم مباشرة. استعمل استعلامات مهيأة بمعاملات (Parameterized) في كودك، وهو درس أمني جوهري سنعود إليه.
صلاحيات محدودة: حساب التطبيق لا يحتاج إلى صلاحية حذف الجداول.
كيف تتدرب على SQL وتتحقق من أداء استعلاماتك؟
SQL تُتعلم بالتجريب. والبيئات المجانية كثيرة، وأبسطها SQLite على جهازك:
أنشئ قاعدة تجريبية: بجدول عملاء وطلبات ومنتجات وبيانات وهمية، وجرب كل ما سبق عليها.
حل أسئلة حقيقية: كأعلى خمسة عملاء مبيعًا وشهر الأعلى مبيعات والمنتجات التي لم تُطلب. فالسؤال يدفعك لتركيب الأدوات.
اعتمد منصات تدريب: مواقع تمارين SQL متدرجة، وانتبه لاختلاف لهجة النظام الذي تتدرب عليه.
افحص خطة التنفيذ: الأمر EXPLAIN في أغلب الأنظمة يوضح كيف ينفذ الاستعلام وهل يستعمل الفهارس. وهو الأداة الأولى لفهم البطء.
أضف فهرسًا للأعمدة المستعملة في WHERE وJOIN: بعد قياس الأثر، فالفهرس غير المفيد يثقل الكتابة.
تجنب جلب أكثر مما تحتاج: اختر الأعمدة اللازمة وحدد العدد، فنقل بيانات زائدة يبطئ التطبيق.
اقرأ استعلامات غيرك: وراجع تعليقات المراجعة، فهي مصدر تعلم عملي.
أسئلة شائعة عن SQL
هل SQL لغة برمجة؟
هي لغة استعلام تصريحية تصف ما تريد لا كيف تحصل عليه. تختلف عن لغات البرمجة العامة، لكنها مهارة أساسية بالقدر نفسه.
هل تختلف SQL بين PostgreSQL وMySQL وغيرهما؟
الأساسيات متشابهة، لكن هناك اختلافات في الدوال وصياغة بعض العمليات والأنواع. فراجع توثيق نظامك ولا تنسخ استعلامًا من نظام لآخر دون اختبار.
هل أحتاج ORM بدل كتابة SQL؟
الـ ORM يريح في الاستعمالات الشائعة، لكن فهم SQL يمكّنك من فهم ما يولده، ومن كتابة استعلامات معقدة عند الحاجة. تعلم الأساس أولًا.
0 تعليقات