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

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

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

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

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

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

التوثيق

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

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

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

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

قواعد تنسيق SQL

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

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

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

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

تبدأ كل عبارة رئيسية في سطر جديد عند الهامش الأيسر: SELECT وFROM وWHERE وGROUP BY وORDER BY وHAVING وLIMIT وOFFSET. ويبدأ JOIN (ومتغيراته مثل LEFT JOIN) أيضًا في سطر جديد. ويبدأ كل من CASE وWHEN وTHEN وELSE وEND في سطر جديد، ويُفصل UNION (أو UNION ALL مجتمعين في سطر واحد) بأسطر فارغة. وتبدأ كل فاصلة سطرًا جديدًا كذلك، فتنتهي قائمة الأعمدة في 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؟

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

  • علامات الاقتباس غير المغلقة. علامة اقتباس مفردة أو مزدوجة فُتحت ولم تُغلق.
  • أقواس غير متوازنة. يجب أن يتطابق عدد ( و) خارج السلاسل النصية والتعليقات.
  • الاستعلامات الفرعية بلا أقواس. استعلام SELECT متداخل داخل استعلام آخر بنمط SELECT ... FROM ... SELECT غير محاط بـ( ).
  • بدء WHERE بـ AND أو OR. أي وجود رابط في البداية من دون شيء يسبقه.
  • JOIN من دون شرط مطابق. يحتاج JOIN إلى عبارة ON أو USING. ويُستثنى من ذلك CROSS JOIN وNATURAL JOIN لأنهما لا يأخذان شرطًا.
  • GROUP BY أو ORDER BY فارغة. أي وجود الكلمة المفتاحية للعبارة من دون أعمدة بعدها في نهاية الاستعلام.
  • شرط WHERE غير مكتمل. مثل مقارنة معلّقة كـ WHERE status = من دون قيمة، أو WHERE منفردة من دون شيء بعدها في نهاية الاستعلام.
  • استعلام SELECT بلا FROM. لا يُبلَّغ عنه إلا إذا كانت قائمة الاختيار أسماء أعمدة صرفة؛ فالتعبير أو استدعاء الدالة أو القيمة الحرفية بعد SELECT صالح بذاته ولا يُبلَّغ عنه.
  • ترتيب العبارات. يوجد فحصان محددان: يجب ألا تأتي GROUP BY قبل WHERE، وألا تأتي ORDER BY قبل GROUP BY. ويُجرى هذان الفحصان في المستوى الأعلى من الاستعلام، مع تجاهل ما يوجد داخل الاستعلامات الفرعية.

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

لا يعرف المدقّق ما إذا كانت الجداول أو الأعمدة موجودة فعلًا، ولا ما إذا كانت الأعمدة المربوطة متوافقة الأنواع، ولا كيف سيكون أداء الاستعلام. كما أنه لا يبلّغ عن كل قاعدة تفرضها قاعدة بيانات حقيقية. ومثالان على ذلك: يُقبل استخدام HAVING دون GROUP BY، لأن وجود HAVING يحوّل الاستعلام إلى استعلام مجمّع حتى دون GROUP BY، ولذلك لا يُصدر المدقّق خطأً بشأنه. وكذلك لا يتحقق مما إذا كان كل عمود غير مجمّع في قائمة 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 صالح، لذلك لا يعدّه المدقّق خطأً.

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

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

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

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

المراجع

  1. PostgreSQL Global Development Group. Lexical Structure. postgresql.org — الكلمات المفتاحية لا تراعي حالة الأحرف.
  2. Oracle. MySQL 8.0 Reference Manual: Schema Object Names. dev.mysql.com — علامة الاقتباس المائلة هي محرف اقتباس المعرّفات في MySQL.
  3. Microsoft. Database Identifiers. learn.microsoft.com — تستخدم المعرّفات المحددة في SQL Server الأقواس المربعة أو علامات الاقتباس المزدوجة.
  4. PostgreSQL Global Development Group. SELECT. postgresql.org — يجعل HAVING الاستعلام مجمّعًا حتى دون GROUP BY.