SQL क्या है, और डायलेक्ट क्यों मायने रखता है?
SQL रिलेशनल डेटाबेस की क्वेरी भाषा है, जो रूपरेखा में मानकीकृत है पर PostgreSQL, MySQL, SQLite, SQL Server और Oracle में डायलेक्ट अंतरों — क्वोटिंग नियम, फ़ंक्शन, LIMIT बनाम TOP, डेट लिटरल — के साथ लागू है। फ़ॉर्मेटर कीवर्ड, इंडेंटेशन और लाइन ब्रेक को सामान्य करता है ताकि लंबी क्वेरी पढ़ी और रिव्यू की जा सके; वैलिडेटर स्टेटमेंट को पार्स करके डेटाबेस तक पहुँचने से पहले सिंटैक्स एरर ढूँढता है।
सुरक्षा नोट: जनरेट किए गए INSERT या IN-क्लॉज़ स्टेटमेंट फ़िक्सचर और माइग्रेशन के लिए हैं। एप्लिकेशन कोड में वैल्यू पैरामीटराइज़्ड क्वेरी से गुज़रनी चाहिए — यूज़र इनपुट से स्ट्रिंग जोड़कर SQL बनाना ही SQL इंजेक्शन का रास्ता है।
SQL फ़ॉर्मेटर कैसे इस्तेमाल करें
- एक या ज़्यादा SQL स्टेटमेंट पेस्ट करें।
- अपने डेटाबेस से मेल खाता डायलेक्ट चुनें और मनपसंद कीवर्ड केस, इंडेंटेशन व कॉमा स्टाइल तय करें।
- फ़ॉर्मेट किया SQL लाइव अपडेट होता है; उसे कॉपी करें या .sql फ़ाइल के रूप में डाउनलोड करें।
SQL फ़ॉर्मेटर की खूबियाँ
- पाँच डायलेक्ट: MySQL/MariaDB, PostgreSQL, SQL Server, Oracle, SQLite
- कीवर्ड केसिंग अपरकेस, लोअरकेस या जस की तस (फ़ंक्शन भी)
- हर clause अलग लाइन पर, इंडेंट की गई SELECT सूची, JOIN और AND/OR शर्तों के साथ
- सबक्वेरी, CTE (WITH … AS), CASE एक्सप्रेशन और VALUES सूचियाँ ब्लॉक की तरह इंडेंट होती हैं
- ट्रेलिंग या लीडिंग कॉमा स्टाइल; 2/4 स्पेस या टैब इंडेंटेशन
- कमेंट, स्ट्रिंग लिटरल, कोट किए identifier और पैरामीटर हूबहू सुरक्षित रहते हैं
- कई स्टेटमेंट अलग-अलग फ़ॉर्मेट होते हैं, बीच में एक खाली लाइन के साथ
SQL फ़ॉर्मेटर का उदाहरण
एक लाइन की क्वेरी को फ़ॉर्मेट करना
इनपुट:
select id, name from users where active = 1 and role in ('admin','editor') order by name limit 10आउटपुट:
SELECT
id,
name
FROM
users
WHERE
active = 1
AND role IN ('admin', 'editor')
ORDER BY
name
LIMIT 10SQL फ़ॉर्मेटर के बारे में अक्सर पूछे जाने वाले सवाल
कौन-कौन से SQL डायलेक्ट समर्थित हैं?
MySQL/MariaDB, PostgreSQL, SQL Server (T-SQL), Oracle और SQLite। डायलेक्ट तय करता है कि स्ट्रिंग, कोट किए identifier, कमेंट और पैरामीटर कैसे टोकनाइज़ होंगे — जैसे MySQL में backtick, SQL Server में [bracket] और PostgreSQL में $$ डॉलर कोट।
क्या फ़ॉर्मेटिंग से क्वेरी का काम बदल जाएगा?
नहीं। सिर्फ़ व्हाइटस्पेस और कीवर्ड केसिंग बदलती है; identifier, स्ट्रिंग लिटरल, संख्याएँ और कमेंट बिल्कुल वैसे ही रहते हैं।
क्या मैं एक साथ कई स्टेटमेंट फ़ॉर्मेट कर सकता हूँ?
हाँ। सेमीकोलन से अलग किए गए स्टेटमेंट अलग-अलग फ़ॉर्मेट होते हैं और उनके बीच एक खाली लाइन रहती है।
सबक्वेरी और CTE कैसे संभाले जाते हैं?
कोष्ठक में लिखी सबक्वेरी अपने अलग इंडेंट किए ब्लॉक में जाती हैं, और WITH … AS (…) clause भी इसी तरह फ़ॉर्मेट होते हैं ताकि मुख्य क्वेरी पढ़ने योग्य बनी रहे।
क्या यह stored procedure या PL/SQL ब्लॉक पर काम करता है?
प्रोसीजरल कोड (BEGIN … END ब्लॉक, IF/LOOP) यथासंभव फ़ॉर्मेट होता है; सादे DML और DDL स्टेटमेंट पर नतीजे सबसे अच्छे आते हैं।
तकनीकी नोट्स
फ़ॉर्मेटर इनपुट को डायलेक्ट-अवेयर lexer से टोकनाइज़ करता है ('' या बैकस्लैश एस्केप वाली स्ट्रिंग, "quoted", `backtick` और [bracket] identifier, $$ डॉलर कोट, -- / # / ब्लॉक कमेंट, ?, :name, @name और $1 पैरामीटर) और फिर एक छोटा लेआउट इंजन लगाता है: टॉप-लेवल clause कीवर्ड नई लाइन शुरू करते हैं और अपने कंटेंट को इंडेंट करते हैं, JOIN/AND/OR नई लाइन से शुरू होते हैं, स्टेटमेंट वाले कोष्ठक इंडेंट किए ब्लॉक बन जाते हैं और इनलाइन कोष्ठक कॉम्पैक्ट रहते हैं।
कई शब्दों वाले कीवर्ड (GROUP BY, LEFT OUTER JOIN, IS NOT NULL, ON DUPLICATE KEY UPDATE …) एक ही वाक्यांश के रूप में पहचाने जाते हैं, इसलिए केसिंग और लाइन ब्रेक एकसमान रूप से लागू होते हैं।
संदर्भ
- PostgreSQL Documentation: SQL SyntaxPostgreSQL में SQL की लेक्सिकल संरचना: आइडेंटिफ़ायर, क्वोटिंग, स्ट्रिंग कॉन्स्टेंट और एस्केपिंग।
- SQL As Understood By SQLiteSQLite द्वारा स्वीकृत SQL व्याकरण, स्टेटमेंट दर स्टेटमेंट, सिंटैक्स डायग्राम के साथ।
- SQL InjectionSQL इंजेक्शन कैसे काम करता है और स्ट्रिंग जोड़ने के बजाय पैरामीटराइज़्ड क्वेरी ही बचाव क्यों हैं।