أغلب استعلامات SQL الحقيقية تُكتب مرة واحدة وتُقرأ عشرات المرات. وإذا كانت مكتوبة في سطر واحد، فكل مراجعة لاحق是对ها مهمة. التنسيق الجيد لا يجعل الاستعلام أجمل — يجعل أخطاءه مرئية قبل أن تلمس بيانات حقيقية.
لماذا التنسيق أداة مراجعة
الخطأ الذي يغفله目がك في سطر واحد يظهر فوراً في أسطر منفصلة:
SELECT u.id,u.name,COUNT(o.id) FROM users u JOIN orders o ON o.user_id=u.id WHERE u.active=1 GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY COUNT(o.id) DESC LIMIT 10;SELECT
u.id,
u.name,
COUNT(o.id) AS order_count
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE u.active = 1
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC
LIMIT 10;ترتيب القراءة المعياري
إذا تعلّمت ترتيباً واحداً والتزمت به، يصبح كل استعلام قابلاً للقراءة ذهنياً دون شرح:
- SELECT — ما الذي تريده بالضبط، مع أسماء أعمدة واضحة.
- FROM — الجداول الأساسية.
- JOIN — ما الذي تُضيفه،条件和 الربط.
- WHERE — تصفية الصفوف قبل التجميع.
- GROUP BY — تجميع الصفوف.
- HAVING — تصفية المجموعات بعد التجميع.
- ORDER BY — الترتيب النهائي.
- LIMIT — كم صفاً تريد.
SELECT
o.id, -- المفتاح
o.total, -- المبلغ
c.name AS customer_name -- اسم العميل (اسم مستعار)
FROM orders o
INNER JOIN customers c
ON c.id = o.customer_id -- شرط الربط
WHERE o.status = 'paid' -- قبل التجميع
AND o.created_at >= '2026-01-01'
GROUP BY o.id, o.total, c.name
ORDER BY o.total DESC;أخطاء منطقية شائعة
| الخطأ | السبب | الحل |
|---|---|---|
| SELECT * | يكسر عند تغيّر الجدول وبطيء | اذكر الحقول صراحة |
| WHERE بدل HAVING | يصفّي قبل التجميع | استخدم HAVING بعده |
| LEFT JOIN ثم WHERE على اليمين | يلغي الـ LEFT JOIN | ضع شرط JOIN في ON |
| LIKE '%نص%' | يمنع استخدام الفهرس | إن أمكن ابدأ بالنص بدون % |
| NOT IN مع NULL | يُرجع نتائج خاطئة | استخدم NOT EXISTS |
-- خطأ: إذا احتوى العمود على NULL، لا يُرجع أي صف
SELECT name FROM users
WHERE id NOT IN (SELECT user_id FROM orders);
-- صحيح: يتعامل مع NULL بأمان
SELECT name FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);لماذا لا تُنفّذ الأداة استعلامك
أداة التنسيق الجيدة تقرأ النص وتعيد كتابته، ولا تتصل أبداً بقاعدة بياناتك ولا تُنفّذ أي شيء. الفرق:
| ما تفعله الأداة الآمنة | ما لا تفعله أبداً |
|---|---|
| تقرأ النص | لا تتصل بالخادم |
| تعيد تنسيقه | لا تُنفّذ SELECT أو DELETE |
| تعرضه للنسخ | لا ترسله لأي طرف |
| تعمل في المتصفح | لا تحتاج صلاحيات وصول |
متى تستعمل أداة التنسيق
- مراجعة استعلام قديم قبل تعديله.
- توثيق استعلامات معقّدة في ويكي أو تعليق كود.
- مشاركة استعلام في سؤال على Stack Overflow.
- فحص استعلام قبل وضعه في تقرير أداء (EXPLAIN).
-- 1. نسّق النص في الأداة
-- 2. راجع الأسماء والمنطق
-- 3. افحص الخطة قبل التنفيذ
EXPLAIN ANALYZE SELECT ... ;
-- 4. جرّب على بيانات محدودة
SELECT ... LIMIT 100;
-- 5. نفّذ