تخطي إلى المحتوى

منسق ومتحقق من SQL - تنسيق استعلامات SQL عبر الإنترنت مجانًا

منسق ومتحقق من SQL مجاني. تنسيق تلقائي لـ SQL مع المسافات البادئة والأحرف الكبيرة المناسبة. تحقق من أخطاء التركيب الفوري. يعمل مع MySQL وPostgreSQL وSQL Server وOracle.

منسق ومتحقق من SQL

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

أدخل استعلام SQL لرؤية النتيجة المنسقة.
حاسبة التحميل...
📚

التوثيق

ما هو منسّق SQL ومدقّقه؟

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

كيفية تنسيق استعلام SQL

  1. الصق استعلام SQL أو اكتبه في مربع الإدخال.
  2. تظهر النسخة المنسّقة تلقائيًا على اليمين، من دون الحاجة إلى الضغط على زر.
  3. تظهر أي أخطاء في التحقق في قائمة أسفل الناتج.
  4. يرسل زر النسخ الاستعلام المنسّق إلى الحافظة.

قواعد تنسيق SQL

كتابة الكلمات المفتاحية بأحرف كبيرة

يحوّل المنسّق قائمة ثابتة من الكلمات المفتاحية في SQL إلى أحرف كبيرة أينما ظهرت خارج سلسلة نصية أو معرّف موضوع بين علامتي اقتباس. وتشمل القائمة العبارات الرئيسية (SELECT، FROM، WHERE، GROUP BY، ORDER BY، HAVING، LIMIT، OFFSET)، وكلمات الربط (JOIN، LEFT، RIGHT، INNER، OUTER، FULL، CROSS، NATURAL، ON، USING)، ومعاملات المجموعات (UNION، INTERSECT، EXCEPT)، وأنواع العبارات (INSERT، UPDATE، DELETE، CREATE، ALTER، DROP)، والمعاملات والروابط الشائعة (AND، OR، NOT، IN، BETWEEN، LIKE، AS، CASE، WHEN، THEN، ELSE، END، ALL، DISTINCT، VALUES، SET، وغيرها قليلًا).

تُترك بعض الكلمات التي تبدو كأنها كلمات مفتاحية كما كُتبت. فالدوال التجميعية مثل COUNT وSUM وAVG ليست ضمن القائمة، لذلك تبقى count(*) بأحرف صغيرة إذا كُتبت كذلك. كما تُترك كلمات اتجاه الفرز ASC وDESC، والقيمتان TRUE وFALSE والقيمة NULL إذا ظهرت منفردة، من دون تغيير. ولا يتغير النص داخل قيمة سلسلة نصية ('...')، أو معرّف موضوع بين علامتي اقتباس ("..." أو `...` أو [...])، أو تعليق، مهما كان محتواه.

فواصل الأسطر والمسافات البادئة

تبدأ كل عبارة رئيسية في سطر جديد عند الهامش الأيسر: SELECT وFROM وWHERE وGROUP BY وORDER BY وHAVING وLIMIT وOFFSET. ويبدأ الربط في سطر جديد كوحدة واحدة، لذلك تبقى LEFT JOIN وFULL OUTER JOIN وCROSS JOIN معًا بدل تقسيمها على سطرين. وتُضاف سطور فارغة فوق UNION وUNION ALL وتحتهما، للفصل بين الاستعلامات التي تجمعها. ويبدأ كل من CASE وEND في سطر جديد، بينما تبدأ WHEN وTHEN وELSE في سطر ذي مسافة بادئة. كما تبدأ كل فاصلة سطرًا جديدًا، لذلك تنتهي قائمة الأعمدة في SELECT أو GROUP BY بعمود واحد في كل سطر.

تظهر المسافات البادئة داخل الأقواس فقط. ويُزاح المحتوى داخل استعلام فرعي أو تعبير مجمّع مسافتين لكل مستوى من مستويات التداخل. أما الاستعلام الذي لا يحتوي على أقواس، وهو معظم الاستعلامات اليومية، فيُنسّق بحيث تلامس كل عبارة الهامش الأيسر من دون أي مسافة بادئة.

مثال: قبل التنسيق وبعده

قبل:

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

بعد:

1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9

تكون كل كلمة مفتاحية بأحرف كبيرة، وتظهر كل عبارة وكل عمود في سطر مستقل. ولأن الاستعلام لا يحتوي على أقواس، فلا يوجد أي سطر ذي مسافة بادئة.

تغيّر الأقواس ذلك. فعند تنسيق (select count(*) from employees e where e.department_id = d.id) كجزء من استعلام أكبر، تُزاح العبارات الداخلية SELECT وFROM وWHERE مسافتين، وتبقى count بأحرف صغيرة لأنها اسم دالة وليست كلمة مفتاحية مدرجة.

ما الذي يتحقق منه مدقّق SQL؟

يبحث المدقّق عن مشكلات بنيوية من دون الاتصال بقاعدة بيانات:

  • علامات الاقتباس والأقواس والتعليقات غير المغلقة. علامة اقتباس مفردة (')، أو مزدوجة (")، أو علامة backtick (`)، أو قوس مربع ([)، أو تعليق كتلي (/*) فُتح ولم يُغلق.
  • أقواس غير متوازنة. يجب أن يتطابق عدد ( و) خارج السلاسل النصية والتعليقات.
  • استعلامات فرعية من دون أقواس. وجود SELECT ثانٍ خارج أي أقواس، مثل SELECT * FROM SELECT id FROM t. ولا تُعلَّم الاستعلامات المرتبطة بمعامل مجموعة (UNION أو UNION ALL أو INTERSECT أو EXCEPT)، لأن هذه المعاملات لا تحتاج إلى أقواس. وينطبق الأمر نفسه على عبارتين تفصل بينهما فاصلة منقوطة.
  • بدء WHERE بـ AND أو OR. أي وجود رابط في البداية من دون شيء يسبقه.
  • JOIN من دون شرط مطابق. يحتاج JOIN إلى عبارة ON أو USING. ويُستثنى من ذلك CROSS JOIN وNATURAL JOIN لأنهما لا يأخذان شرطًا.
  • GROUP BY أو ORDER BY فارغة. أي وجود الكلمة المفتاحية للعبارة من دون أعمدة بعدها في نهاية الاستعلام.
  • شرط WHERE غير مكتمل. مثل مقارنة معلّقة كـ WHERE status = من دون قيمة، أو WHERE منفردة من دون شيء بعدها في نهاية الاستعلام.
  • عبارة SELECT من دون FROM. لا تُعلَّم إلا عندما تكون قائمة الاختيار أسماء أعمدة بسيطة. أما التعبير أو استدعاء الدالة أو القيمة أو دالة قيمة مكتوبة من دون أقواس مثل CURRENT_DATE، فهي صالحة بمفردها؛ لذلك لا تُعلَّم SELECT 1 + 1 ولا SELECT CURRENT_DATE.
  • ترتيب العبارات. يوجد فحصان محددان: يجب ألا تأتي GROUP BY قبل WHERE، وألا تأتي ORDER BY قبل GROUP BY. ويُجرى هذان الفحصان في المستوى الأعلى من الاستعلام، مع تجاهل ما يوجد داخل الاستعلامات الفرعية.

ما الذي لا يتحقق منه؟

لا يعرف المدقّق ما إذا كانت الجداول أو الأعمدة موجودة فعلًا، أو ما إذا كانت أنواع الأعمدة المرتبطة متوافقة، أو كيف سيكون أداء الاستعلام. كما أنه لا يعلّم كل قاعدة تفرضها قاعدة بيانات حقيقية. مثالان على ذلك: يُقبل استخدام HAVING من دون GROUP BY، لأن تجميع النتيجة كلها في مجموعة ضمنية واحدة أمر مسموح به في SQL، ولذلك لا يُصدر المدقّق خطأً بشأنه. وبالمثل، لا يتحقق من ظهور كل عمود غير تجميعي في قائمة SELECT أيضًا في GROUP BY؛ فهذه القاعدة موجودة في معظم قواعد البيانات، لكن هذه الأداة لا تختبرها. ولا تُعلَّم الفاصلة المنقوطة النهائية المفقودة، لأنها فاصل بين العبارات وليست جزءًا من استعلام واحد.

مثال: الأخطاء التي يلتقطها المدقّق

1SELECT id FROM orders
2JOIN users
3WHERE status =
4

ينتج عن هذا الاستعلام خطآن:

  1. "يفتقد واحد أو أكثر من عبارات JOIN شرط ON." لا يحتوي JOIN users على عبارة ON أو USING.
  2. "شرط WHERE غير مكتمل." لا توجد قيمة بعد علامة المساواة في status =.

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

هل تعمل هذه الأداة مع MySQL وPostgreSQL وSQL Server وOracle؟

تتعامل الأداة مع بنية SQL الأساسية المشتركة بين قواعد البيانات هذه: SELECT وJOIN وWHERE وGROUP BY والعبارات المشابهة. أما البنية الخاصة بقاعدة بيانات معينة، مثل القيم الحرفية للمصفوفات في PostgreSQL أو الكتل الإجرائية في T-SQL، فلن تعطل المنسّق، لكنها قد لا تتلقى معالجة خاصة.

هل يُرسل استعلام SQL إلى خادم؟

لا. يعمل كل من التنسيق والتحقق في المتصفح. ولا يُنقل نص الاستعلام إلى أي مكان.

هل يحوّل أسماء الدوال مثل COUNT وSUM وAVG إلى أحرف كبيرة؟

لا. تُحوَّل إلى أحرف كبيرة كلمات العبارات وكلمات الربط وقائمة ثابتة من المعاملات فقط. وتُترك أسماء الدوال مثل count وsum وavg، والكلمات asc وdesc وtrue وfalse وnull، تمامًا كما كُتبت.

هل يعلّم المدقّق استخدام HAVING من دون GROUP BY؟

لا. تؤدي عبارة HAVING من دون GROUP BY إلى تجميع النتيجة بأكملها في مجموعة واحدة، وهذا صالح في SQL وفق معيار ISO/IEC 9075، لذلك لا يعتبره المدقّق خطأً.

هل يستطيع المدقّق اكتشاف كل أخطاء SQL؟

لا. فهو يتحقق من البنية، مثل الأقواس وعلامات الاقتباس وبعض قواعد ترتيب العبارات، ومن بعض الثغرات المنطقية الشائعة مثل JOIN من دون شرط. لكنه لا يتحقق من أسماء الجداول أو الأعمدة أو أنواع البيانات أو أداء الاستعلام. ولا يزال الاتصال بقاعدة بيانات حقيقية ضروريًا للتأكد من تنفيذ الاستعلام على نحو صحيح.

هل يغيّر التنسيق طريقة تنفيذ الاستعلام؟

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

المراجع