SQL ফরম্যাটার
নতুনকীওয়ার্ড কেসিং ও clause ব্রেক সহ SQL কোয়েরি সুন্দর ও মিনিফাই করুন।
Runs entirely in your browser. Nothing is uploaded.
একটি ফ্রি অনলাইন SQL ফরম্যাটার যা আপনার ব্রাউজারেই চলে
এই SQL ফরম্যাটারটি ঘন এবং পড়তে কষ্টকর কোয়েরিগুলোকে এক ক্লিকে পরিষ্কার, সঠিকভাবে ইনডেন্ট করা SQL-এ রূপান্তর করে। একটি কোয়েরি পেস্ট করুন, আপনার স্টাইল বেছে নিন, আর সাজানো ফলাফলটি সাথে সাথেই পড়ুন — কিছু ইনস্টল করার দরকার নেই, কোনো অ্যাকাউন্ট তৈরিরও দরকার নেই। প্রতিটি কোয়েরি আপনার ব্রাউজারেই স্থানীয়ভাবে প্রসেস হয়, তাই আপনার পেস্ট করা SQL কখনো আপলোড হয় না — এটি গুরুত্বপূর্ণ যখন কোয়েরিতে আসল টেবিলের নাম, স্কিমার বিবরণ, বা নমুনা ডেটা থাকে।
একটি SQL beautifier এবং pretty printer হিসেবে, এটি প্রতিটি ক্লজকে তার নিজস্ব লাইনে বসায়, কলাম ও শর্তগুলো ইনডেন্ট করে, এবং আপনার জয়েনগুলো সাজিয়ে দেয় — ঠিক সেই পড়ার উপযোগী লেআউট যা আপনি IDE প্লাগইন থেকে পেতেন, কিন্তু যেকোনো জায়গায়, যেকোনো ডিভাইসে, এমনকি আপনার ফোনেও উপলব্ধ।
সাজান বা মিনিফাই করুন — প্রতিটি প্রধান ডায়ালেক্টের জন্য
দুটি মোডের মধ্যে পরিবর্তন করুন। Beautify একটি কোয়েরিকে পরিষ্কার মাল্টি-লাইন লেআউটে প্রসারিত করে; Minify এটিকে আবার এক লাইনে সংকুচিত করে এবং কমেন্ট মুছে দেয়, যা কোডে বা কনফিগ ফাইলে একটি কোয়েরি এমবেড করার জন্য উপযুক্ত। SQL মিনিফাই করতে আপনি শুধু মোড পরিবর্তন করে কপি করলেই হবে।
সাধারণ ফরম্যাটারের থেকে ভিন্ন, এটি ডায়ালেক্ট-সচেতন। MySQL, PostgreSQL, SQL Server (T-SQL), Oracle, SQLite, BigQuery, Snowflake, বা Standard SQL বেছে নিন আর এটি সেই ইঞ্জিনের সাথে মানিয়ে নেয় — MySQL-এর ব্যাকটিক আইডেন্টিফায়ার এবং # কমেন্ট, অথবা T-SQL-এর ব্র্যাকেটেড আইডেন্টিফায়ার যেমন [Order Details] চিনতে পারে — তাই একটি postgresql ফরম্যাটার, একটি t-sql ফরম্যাটার, এবং একটি oracle sql ফরম্যাটার সবই এক জায়গায় থাকে।
কীওয়ার্ড কেস, ইনডেন্টেশন এবং কমার স্টাইল — আপনার নিজের মতো করে
ফরম্যাটিং স্টাইল ব্যক্তিগত পছন্দ, তাই এই টুলটি আপনাকে সেইসব নিয়ন্ত্রণ দেয় যা জনপ্রিয় ফরম্যাটারগুলো টাকা নিয়ে দেয়। কীওয়ার্ড কেস সেট করুন UPPERCASE (ক্লাসিক কনভেনশন যাতে SELECT এবং FROM চোখে পড়ে), lowercase, Capitalized, অথবা Keep as-is যাতে আপনি ঠিক যা টাইপ করেছেন তা অপরিবর্তিত থাকে।
আপনার SQL ইনডেন্টেশনের প্রস্থ বেছে নিন — ২ স্পেস, ৪ স্পেস, বা একটি ট্যাব — এবং SELECT তালিকার জন্য শেষে বা শুরুতে কমা বেছে নিন। সাবকোয়েরি স্বয়ংক্রিয়ভাবে এক স্তর গভীরে ইনডেন্ট হয়, এবং স্ট্রিং লিটারেল ও কমেন্ট সবসময় অস্পৃশ্য রাখা হয় যাতে আপনার কোয়েরির ভেতরে কিছু নষ্ট না হয়ে যায়।
কেন SQL ফরম্যাট করবেন?
পড়ার উপযোগী SQL ডিবাগ করা সহজ, রিভিউ করা সহজ, এবং ভার্সন কন্ট্রোলে পরিষ্কার ডিফ তৈরি করে। যখন প্রতিটি টিমমেট একইভাবে ফরম্যাট করে, কোড রিভিউ হোয়াইটস্পেস গোলমালের বদলে আসল লজিক পরিবর্তনগুলো তুলে ধরে। একটি সামঞ্জস্যপূর্ণ লেআউট একটি দীর্ঘ কোয়েরিতে একটি অনুপস্থিত জয়েন শর্ত বা ভুল জায়গায় বসানো বন্ধনী দ্রুত দেখার সুযোগও তৈরি করে।
আপনি যদি লগ থেকে SQL কপি করে থাকেন, একটি এক-লাইনের ORM কোয়েরির উত্তরাধিকারী হয়ে থাকেন, বা কমিট করার আগে আপনার কাজ পরিষ্কার করতে চান, একটি SQL query formatter-এর মধ্য দিয়ে চালানো এক সেকেন্ডেরও কম সময় নেয় এবং পরবর্তী পাঠকের মিনিট বাঁচায়।
sqlformat.org, poorsql.com এবং IDE ফরম্যাটারের সাথে তুলনা
সবচেয়ে বেশি লিঙ্ক করা দুটি ফ্রি অনলাইন SQL ফরম্যাটার হলো sqlformat.org এবং poorsql.com। দুটোই প্রসেসিংয়ের জন্য আপনার কোয়েরি সার্ভারে আপলোড করে, যা সমস্যা হয়ে দাঁড়ায় যদি SQL-এ আসল টেবিলের নাম, সংবেদনশীল কলামের নাম, বা নমুনা ডেটার সারি থাকে। sqlformat.org অনেক বছর ধরে আছে কিন্তু এর ডায়ালেক্ট সাপোর্ট সীমিত, কোনো মিনিফাই মোড নেই, এবং কমার অবস্থান স্থির। poorsql.com — যা ঐতিহাসিকভাবে 'Poor Man's SQL Formatter' নামে পরিচিত — আরও ন্যূনতম: একটিমাত্র ইনডেন্ট স্টাইল, কোনো কীওয়ার্ড-কেস টগল নেই, কোনো ডাউনলোড নেই।
Redgate SQL Prompt-এর মতো ডেস্কটপ ফরম্যাটার পরিশীলিত কিন্তু ইনস্টলেশন প্রয়োজন এবং শুধুমাত্র SQL Server Management Studio বা Visual Studio-এর ভেতরে কাজ করে। SQLFluff CI পাইপলাইনের জন্য চমৎকার কিন্তু Python এবং কমান্ড লাইন প্রয়োজন। Prettier একটি প্লাগইনের মাধ্যমে SQL ফরম্যাট করতে পারে কিন্তু Node.js প্রয়োজন। এই টুলের এসবের কিছুই দরকার নেই: এটি যেকোনো ব্রাউজারে তাৎক্ষণিকভাবে চলে, মোবাইলে কাজ করে, সবকিছু স্থানীয়ভাবে প্রসেস করে, এবং কনফিগারযোগ্য ডায়ালেক্ট সাপোর্ট, মিনিফিকেশন, এবং ডাউনলোড যোগ করে — 'একটি সাধারণ ওয়েব ফর্মে পেস্ট করা' এবং 'একটি টুলচেইন সেটআপ করা'-র মধ্যেকার ফাঁকটি পূরণ করে।
DDL, DML এবং তার মাঝের সবকিছুর জন্য কাজ করে
এই ফরম্যাটারটি শুধু SELECT স্টেটমেন্ট নয়, পুরো ভাষাটিই বোঝে। এটি DML (SELECT, INSERT, UPDATE, DELETE) পরিষ্কার করে, CREATE TABLE স্টেটমেন্টে DDL কলাম সংজ্ঞা একটি করে লাইনে সাজায়, এবং CTE (WITH …), উইন্ডো ফাংশন, UNION, CASE এক্সপ্রেশন, ও নেস্টেড সাবকোয়েরি সামলায়।
এটি একটি পূর্ণাঙ্গ কোয়েরি প্ল্যানার নয়, বরং একটি বাস্তবসম্মত SQL pretty printer — এটি আপনার টেক্সট চালনা বা যাচাই না করেই পুনরায় ফরম্যাট করে — তাই এটি দ্রুত, প্রাইভেট, এবং আপনার কোয়েরি পাঁচ লাইন হোক বা পাঁচশ লাইন, একইভাবে কাজ করে।
প্রাইভেট, তাৎক্ষণিক এবং ফ্রি — যেকোনো ডিভাইসে কাজ করে
সাইন আপ করার কিছু নেই, টাকা দেওয়ার কিছু নেই। প্রতিটি ফরম্যাট এবং মিনিফাই জাভাস্ক্রিপ্ট ব্যবহার করে আপনার ব্রাউজারেই ঘটে, তাই আপনার SQL কখনো আপনার ডিভাইস ছেড়ে যায় না, এবং পেজ লোড হয়ে যাওয়ার পর এটি অফলাইনেও কাজ চালিয়ে যায়। এই SQL beautifier-টি বুকমার্ক করে রাখুন এবং যখনই একটি কোয়েরি ফরম্যাট, ইনডেন্ট বা মিনিফাই করার দরকার হয় তখনই ব্যবহার করুন।
এই টুলটি আইফোন এবং অ্যান্ড্রয়েডে ডেস্কটপের মতোই ভালোভাবে কাজ করে। ফোনে চ্যাট বা টিকিট থেকে একটি কোয়েরি পেস্ট করুন, সাথে সাথেই ফরম্যাট করুন, এবং ফলাফলটি আবার কপি করুন — কোনো অ্যাপ ইনস্টল করার দরকার নেই, কোনো অ্যাকাউন্টে লগ ইন করার দরকার নেই। এটি দ্রুত লোড হয়, তাৎক্ষণিকভাবে সাড়া দেয়, এবং আপনার কাজে বাধা দেয় না।
SQL ডায়ালেক্ট এবং কেন একই কোয়েরি প্রতিটি জায়গায় ভিন্ন দেখায়
ANSI SQL (১৯৮৬ সালে মানসম্মত হয় এবং SQL-92, SQL:1999, SQL:2003, SQL:2011, ও SQL:2016-এর মাধ্যমে সংশোধিত হয়) একটি পোর্টেবল কোর সংজ্ঞায়িত করে, কিন্তু প্রতিটি ডেটাবেস ভেন্ডর মালিকানাধীন এক্সটেনশন যোগ করে যা বাস্তবে দ্রুত ভিন্ন হয়ে যায়। দুটি স্ট্রিং জোড়া লাগানোর মতো সহজ কাজও প্রতিটি ইঞ্জিনে ভিন্ন: PostgreSQL, SQLite, এবং Oracle || অপারেটর ব্যবহার করে, SQL Server + ব্যবহার করে, আর MySQL CONCAT() ফাংশন ব্যবহার করে। ডেট ফাংশনও একইভাবে বিভক্ত — MySQL-এ NOW(), SQL Server-এ GETDATE(), Oracle-এ SYSDATE, এবং স্ট্যান্ডার্ড SQL-এ CURRENT_TIMESTAMP — সবগুলোই বর্তমান সময় ফেরত দেয় কিন্তু একে অপরের সাথে বিনিময়যোগ্য নয়।
স্বয়ংক্রিয়ভাবে বাড়তে থাকা প্রাইমারি কী ঘর্ষণের আরেকটি উৎস। PostgreSQL SERIAL সিউডো-টাইপ (বা নতুন GENERATED ALWAYS AS IDENTITY) ব্যবহার করে, MySQL AUTO_INCREMENT ব্যবহার করে, SQL Server IDENTITY(1,1) ব্যবহার করে, আর Oracle একটি ট্রিগারসহ সিকোয়েন্স ব্যবহার করে। ফলাফল পেজিংও একইভাবে ডায়ালেক্ট-নির্দিষ্ট: MySQL এবং PostgreSQL LIMIT n OFFSET m ব্যবহার করে, SQL Server TOP n বা নতুন FETCH FIRST n ROWS ONLY ব্যবহার করে, আর পুরনো Oracle ROWNUM-এর ওপর নির্ভর করে। যে ফরম্যাটার এই ডায়ালেক্টগুলো বোঝে তা সঠিক কীওয়ার্ড সেটের বিপরীতে আপনার কোয়েরি টোকেনাইজ করে, তাই এটি কখনো একটি ডায়ালেক্ট-নির্দিষ্ট ফাংশনকে একটি সাধারণ আইডেন্টিফায়ার হিসেবে ভুল চেনে না এবং টার্গেট ইঞ্জিনের জন্য আপনার কোড সঠিকভাবে ফরম্যাট করে।
বুলিয়ান লিটারেলও একই বিভাজন দেখায়: স্ট্যান্ডার্ড SQL এবং PostgreSQL TRUE এবং FALSE গ্রহণ করে; পুরনো MySQL এবং SQLite 1 এবং 0 ব্যবহার করে; SQL Server-এর কোনো BOOLEAN টাইপই নেই এবং এর বদলে BIT ডেটাটাইপ ব্যবহার করে। উইন্ডো ফাংশন — SQL:2003-এ প্রবর্তিত — এখন PostgreSQL, SQL Server, Oracle, এবং MySQL 8+ জুড়ে ব্যাপকভাবে সাপোর্টেড, কিন্তু ফ্রেম বাউন্ডারি এবং GROUPS মোডের সঠিক সিনট্যাক্স এখনও ভিন্ন। ফরম্যাট করার আগে আপনি কোন ডায়ালেক্ট টার্গেট করছেন তা জানা থাকলে ফরম্যাটার ভেন্ডর কীওয়ার্ডের কেস ভুল করা বা ডায়ালেক্ট-নির্দিষ্ট সিনট্যাক্স ভেঙে দেওয়া থেকে বিরত থাকে যা অন্যথায় একটি সাধারণ পার্সারকে বিভ্রান্ত করত।
পর্দার আড়ালে SQL পার্সার এবং ফরম্যাটার কীভাবে কাজ করে
একটি SQL ফরম্যাটার একটি বিশেষায়িত কম্পাইলার ফ্রন্ট-এন্ড যা কোড জেনারেশনের ঠিক আগে থেমে যায়। প্রথম ধাপ হলো লেক্সিং (টোকেনাইজেশন): অক্ষরে অক্ষরে কাঁচা SQL স্ট্রিং স্ক্যান করে টাইপযুক্ত টোকেনের একটি স্ট্রিম তৈরি করা — SELECT এবং JOIN-এর মতো কীওয়ার্ড, আইডেন্টিফায়ার (টেবিল ও কলামের নাম), স্ট্রিং ও নিউমেরিক লিটারেল, অপারেটর, বন্ধনী, এবং হোয়াইটস্পেস। হোয়াইটস্পেস টোকেন সাধারণত লেক্সার বাদ দিয়ে দেয়, কিন্তু একটি ফরম্যাটার এগুলো একটি সাইড চ্যানেলে রেখে দেয় কারণ কমেন্টের অবস্থান ঠিক রাখতে হলে জানতে হয় প্রতিটি কমেন্ট আশেপাশের কোডের তুলনায় ঠিক কোথায় ছিল।
দ্বিতীয় ধাপ হলো পার্সিং: টোকেন স্ট্রিম গ্রহণ করে একটি Abstract Syntax Tree (AST) তৈরি করা। একটি রিকার্সিভ-ডিসেন্ট পার্সার স্বাভাবিকভাবেই SQL-এর নেস্টেড স্ট্রাকচার সামলায় — একটি SELECT স্টেটমেন্টে FROM ক্লজে একটি সাবকোয়েরি থাকতে পারে, যার নিজস্ব WHERE ক্লজে আবার একটি করিলেটেড সাবকোয়েরি থাকতে পারে, এভাবে যেকোনো গভীরতা পর্যন্ত। AST স্ট্রাকচারটি স্পষ্ট করে দেয়: রুট নোড একটি স্টেটমেন্ট, তার সন্তানরা ক্লজ, প্রতিটি ক্লজের সন্তানরা এক্সপ্রেশন, এবং প্রতিটি এক্সপ্রেশনের সাব-এক্সপ্রেশন থাকতে পারে। CTE (WITH ব্লক), CASE এক্সপ্রেশন, এবং সেট অপারেশন (UNION, INTERSECT) সবই সেই ট্রিতে প্রথম-শ্রেণীর নোড হিসেবে দেখা যায়।
শেষ ধাপ হলো প্রিটি-প্রিন্টিং: AST ট্রাভার্স করে ফরম্যাট করা SQL তৈরি করা। প্রতিটি নোডে, প্রিন্টার সিদ্ধান্ত নেয় ইনলাইনে (সবকিছু এক লাইনে) নাকি প্রসারিতভাবে (প্রতিটি সন্তান তার নিজস্ব ইনডেন্ট করা লাইনে) দেখাবে, যা লাইন-দৈর্ঘ্যের সীমা এবং ক্লজ-স্তরের নিয়ম দ্বারা পরিচালিত হয়। এই কারণেই রেগেক্স-ভিত্তিক ফরম্যাটার জটিল SQL-এ ব্যর্থ হয়: একটি রেগুলার এক্সপ্রেশন যথেচ্ছভাবে নেস্টেড বন্ধনী মেলাতে পারে না, একটি স্ট্রিং লিটারেলের ভেতরের কীওয়ার্ডকে একটি আসল কীওয়ার্ড থেকে আলাদা করতে পারে না, এবং রিকার্সিভ স্ট্রাকচার জুড়ে ইনডেন্টেশনের গভীরতা ট্র্যাক করতে পারে না। একটি সঠিক AST-ভিত্তিক ফরম্যাটার এসব সামলায় — নেস্টেড সাবকোয়েরি সঠিকভাবে ইনডেন্ট হয়, 'স্ট্রিং লিটারেলের' ভেতরের কীওয়ার্ড কখনো আপারকেস হয় না, এবং মাল্টিলাইন কমেন্ট রিফরম্যাটিংয়ের পর সঠিক স্টেটমেন্ট নোডের সাথে আবার সংযুক্ত হয়ে যায়।
CTE, উইন্ডো ফাংশন এবং আধুনিক SQL প্যাটার্ন
Common Table Expression (CTE), যা WITH কীওয়ার্ড দিয়ে লেখা হয়, আপনাকে মধ্যবর্তী ফলাফল সেটের নাম দিতে এবং একই কোয়েরিতে পরে সেগুলো রেফারেন্স করতে দেয়, যা গভীরভাবে নেস্টেড সাবকোয়েরির জঞ্জালকে নাম দেওয়া ধাপের একটি পড়ার উপযোগী ক্রমে রূপান্তরিত করে। একটি ফিল্টার করা গ্রাহক তালিকা তৈরি করে, তা অর্ডারের সাথে জয়েন করে, তারপর অঞ্চল অনুযায়ী অ্যাগ্রিগেট করা একটি কোয়েরি তিনটি বন্ধনীর স্তরের বদলে তিনটি স্পষ্টভাবে লেবেল করা ব্লকে পরিণত হয়। রিকার্সিভ CTE এটিকে আরও এগিয়ে নেয়: CTE-এর ভেতরে একটি UNION ALL সেলফ-রেফারেন্স যোগ করে আপনি হায়ারার্কিক্যাল ডেটা — অর্গানাইজেশনাল চার্ট, বিল-অফ-ম্যাটেরিয়ালস ট্রি, থ্রেডেড কমেন্ট — কোনো প্রসিডিউরাল কোড ছাড়াই ট্র্যাভার্স করতে পারেন। একটি ভালো ফরম্যাটার অ্যাংকর এবং রিকার্সিভ সদস্যদের সামঞ্জস্যপূর্ণভাবে ইনডেন্ট করে, যা রিকার্সনের সীমানাকে তাৎক্ষণিকভাবে দৃশ্যমান করে তোলে।
উইন্ডো ফাংশন (SQL:2003-এ প্রবর্তিত এবং এখন PostgreSQL, SQL Server, Oracle, MySQL 8+, SQLite 3.25+, BigQuery, এবং Snowflake-এ সাপোর্টেড) ফলাফলকে একটি গ্রুপ প্রতি এক সারিতে সংকুচিত না করেই বর্তমান সারির সাথে সম্পর্কিত সারিগুলোর একটি সেট জুড়ে হিসাব করে। OVER (PARTITION BY dept ORDER BY salary DESC) ক্লজ উইন্ডোটি সংজ্ঞায়িত করে; ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD(), এবং SUM()-এর মতো ফাংশন এর ভেতরে কাজ করে। একটি চলমান মোট, একটি পার্সেন্টাইল র্যাংক, প্রতিটি বিক্রির সাথে আগের মাসের বিক্রির তুলনা — সবই একটি সেলফ-জয়েন ছাড়াই এক পাসে অর্জন করা যায়। সঠিকভাবে ফরম্যাট করলে, PARTITION BY এবং ORDER BY সাব-ক্লজগুলো তাদের নিজস্ব ইনডেন্ট করা লাইনে দেখা যায়, যা উইন্ডো সংজ্ঞাকে এক নজরে স্ক্যান করার উপযোগী করে তোলে।
জানা দরকার এমন আরও দুটি আধুনিক প্যাটার্ন: LATERAL জয়েন (PostgreSQL, MySQL 8+, BigQuery) FROM ক্লজের একটি সাবকোয়েরিকে আগের টেবিল রেফারেন্স থেকে কলাম রেফারেন্স করতে দেয় — কার্যকরভাবে এটি প্রতি-সারির একটি সাবকোয়েরি যা SELECT তালিকায় দীর্ঘ করিলেটেড সাবকোয়েরির বদলে ব্যবহৃত হয়। অ্যাগ্রিগেটে FILTER ক্লজ (SUM(salary) FILTER (WHERE dept = 'engineering'), PostgreSQL, SQLite, এবং DuckDB-এ সাপোর্টেড) প্রতিটি অ্যাগ্রিগেটের ভেতরে একটি CASE WHEN মোড়ানোর চেয়ে বেশি পরিষ্কার বিকল্প। সঠিক ইনডেন্টেশনসহ ফরম্যাট করলে দুটো প্যাটার্নই বেশি পড়ার উপযোগী SQL তৈরি করে, আর একটি ডায়ালেক্ট-সচেতন ফরম্যাটার এগুলোকে পার্সিং এরর হিসেবে চিহ্নিত করার বদলে বৈধ সিনট্যাক্স হিসেবে চেনে।
SQL ইনজেকশন — সবচেয়ে বিপজ্জনক SQL ফরম্যাটিং ভুল
SQL ইনজেকশন তখন ঘটে যখন ব্যবহারকারীর দেওয়া ইনপুটকে আলাদা প্যারামিটার হিসেবে পাস না করে সরাসরি একটি SQL স্ট্রিংয়ে জোড়া লাগানো হয়। ক্লাসিক উদাহরণটি হলো একটি লগইন চেক যা এভাবে লেখা হয় "SELECT * FROM users WHERE name = '" + username + "'"। যদি একজন আক্রমণকারী ইউজারনেম হিসেবে ' OR 1=1; DROP TABLE users; -- লেখে, তাহলে তৈরি হওয়া স্ট্রিংটি দুটি স্টেটমেন্টে পরিণত হয়: একটি SELECT যা সব সারি ফেরত দেয় (কারণ 1=1 সবসময় সত্য), এবং একটি DROP যা টেবিলটি ধ্বংস করে দেয়। ডবল-ড্যাশ কমেন্ট সিনট্যাক্স তারপর এর পরে যা আসে তা নিঃশব্দ করে দেয়। এটিই xkcd #327-এর ('Bobby Tables') পেছনের রসিকতা, এবং এটি সব আকারের কোম্পানিতে প্রকৃত ডেটা লঙ্ঘনের কারণ হয়েছে।
সমাধানটি হলো প্যারামিটারাইজড কোয়েরি (যাকে prepared statement-ও বলা হয়): WHERE name = ? (বা PostgreSQL-এ $1) লিখুন এবং ব্যবহারকারীর মানটি একটি আলাদা আর্গুমেন্ট হিসেবে পাস করুন। ডেটাবেস ড্রাইভার SQL স্ট্রাকচার এবং প্যারামিটারের মান স্বাধীনভাবে সার্ভারে পাঠায় — সার্ভার মানটি দেখার আগেই কোয়েরি প্ল্যান কম্পাইল করে ফেলে, তাই প্যারামিটারটিকে SQL সিনট্যাক্স হিসেবে ব্যাখ্যা করা স্ট্রাকচারালভাবে অসম্ভব। ORM এবং কোয়েরি বিল্ডার ডিফল্টভাবে অভ্যন্তরীণভাবে প্যারামিটারাইজেশন ব্যবহার করে; বিপদ তৈরি হয় যখন ডেভেলপাররা সুবিধার জন্য বা গতিশীল ORDER BY কলাম তৈরি করতে কাঁচা স্ট্রিং কনক্যাটেনেশন দিয়ে এগুলো এড়িয়ে যায়। এমনকি গতিশীলভাবে ব্যবহৃত কলাম ও টেবিলের নামও একটি অ্যালাউলিস্টের বিপরীতে যাচাই করতে হবে — এগুলো প্যারামিটারাইজ করা যায় না তাই এগুলো কখনো ব্যবহারকারীর ইনপুট থেকে কাঁচা অবস্থায় নেওয়া উচিত নয়।
SQL ইনজেকশন ২০০৩ সালে তালিকাটি শুরু হওয়ার পর থেকে প্রতি বছর OWASP Top 10-এ স্থান পেয়েছে এবং ওয়েব অ্যাপ্লিকেশন দুর্বলতার মধ্যে ধারাবাহিকভাবে প্রথম বা দ্বিতীয় স্থানে থাকে। একটি দ্বিতীয় ঝুঁকি হলো এরর মেসেজে SQL-এর প্রকাশ: একটি অসামলানো ডেটাবেস এক্সেপশন যা ব্রাউজারে একটি স্ট্যাক ট্রেস ফাঁস করে দেয় তা একজন আক্রমণকারীকে আপনার টেবিলের নাম, কলামের নাম, এবং ডেটাবেস ইঞ্জিনের ভার্সন জানিয়ে দেয় — যেকোনো টার্গেটেড ইনজেকশন আক্রমণের রিকনেসান্স ধাপ। একটি ভালোভাবে ফরম্যাট করা এবং সুগঠিত কোয়েরি ইনজেকশন ঝুঁকির জন্য অডিট করা সহজ, প্যারামিটার ব্যবহার করতে রিফ্যাক্টর করা সহজ, এবং একজন কোড রিভিউয়ারের জন্য কাঁচা ইন্টারপোলেশন কোথায় ঢুকে পড়েছে তা দেখা সহজ। আপনার SQL ফরম্যাট করা নিজে থেকে একটি নিরাপত্তা নিয়ন্ত্রণ নয়, কিন্তু পড়ার উপযোগী SQL হলো অডিটযোগ্য SQL।
Frequently asked questions
একটি SQL কোয়েরি কীভাবে ফরম্যাট (সাজানো) করব?
আপনার SQL ইনপুট বক্সে পেস্ট করুন আর ফরম্যাট করা ভার্সনটি ডানদিকে সাথে সাথেই দেখা যাবে। ফরম্যাটার প্রতিটি প্রধান ক্লজ (SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY) তার নিজস্ব লাইনে বসায়, তার নিচে কলাম ও শর্তগুলো ইনডেন্ট করে, এবং কীওয়ার্ড আপারকেস করতে পারে। উদাহরণস্বরূপ, 'select id,name from users where active=1'-এর মতো একটি সংকুচিত এক-লাইনার একটি পরিষ্কার মাল্টি-লাইন লেআউটে পরিণত হয় যা এক ক্লিকে কপি বা ডাউনলোড করা যায়।
SQL ফরম্যাটার / beautifier কী?
একটি SQL ফরম্যাটার — যাকে SQL beautifier বা pretty printer-ও বলা হয় — মিনিফাইড বা অসামঞ্জস্যপূর্ণভাবে স্পেস দেওয়া SQL নিয়ে হোয়াইটস্পেস, ইনডেন্টেশন এবং কীওয়ার্ড কেস পুনর্লিখন করে একটি সামঞ্জস্যপূর্ণ, পড়ার উপযোগী লেআউটে রূপান্তর করে, কোয়েরিটি আসলে কী করে তা পরিবর্তন না করেই। এটি শুধু ফরম্যাটিং স্পর্শ করে: লাইন ব্রেক, ইনডেন্টেশন এবং ক্যাপিটালাইজেশন। লজিক, টেবিল, কলাম, এবং মান আপনি যেভাবে লিখেছেন ঠিক সেভাবেই থাকে।
অনলাইনে SQL কীভাবে beautify করব?
এই পেজটি খুলুন, আপনার কোয়েরি পেস্ট করুন, তারপর আপনার অপশন বেছে নিন — ডায়ালেক্ট, কীওয়ার্ড কেস (UPPERCASE, lowercase, বা Capitalize), ইনডেন্ট প্রস্থ (২ স্পেস, ৪ স্পেস, বা একটি ট্যাব), এবং কমার অবস্থান (শেষে বা শুরুতে)। আপনি টাইপ করার সাথে সাথে beautify করা SQL আপডেট হয় এবং কপি করা বা .sql ফাইল হিসেবে ডাউনলোড করার জন্য প্রস্তুত। সবকিছু স্থানীয়ভাবে চলার কারণে, এটি প্রাইভেট বা প্রোডাকশন কোয়েরির জন্যও নিরাপদ।
SQL কীওয়ার্ড কি আপারকেসে থাকা উচিত?
reserved কীওয়ার্ড — SELECT, FROM, WHERE, JOIN — UPPERCASE-এ লেখার একটি দীর্ঘদিনের কনভেনশন আছে যাতে সেগুলো আপনার টেবিল ও কলামের নাম থেকে আলাদা দেখা যায়। কিন্তু SQL কীওয়ার্ড কেস-অসংবেদনশীল, তাই এটি সম্পূর্ণভাবে একটি স্টাইলের পছন্দ এবং কখনো ফলাফলকে প্রভাবিত করে না। এই টুল আপনাকে বেছে নিতে দেয়: UPPERCASE, lowercase, Capitalized (Select, From), বা Keep as-is যাতে আপনার আসল কেসিং অপরিবর্তিত থাকে।
একটি SQL কোয়েরি কীভাবে মিনিফাই করব?
মোডটি Minify-তে পরিবর্তন করুন। ফরম্যাটার আপনার SQL-কে এক লাইনে সংকুচিত করে, কমেন্ট মুছে দেয়, এবং অপ্রয়োজনীয় হোয়াইটস্পেস সরিয়ে দেয়, তাই 'SELECT *', 'FROM users', এবং 'WHERE id = 1'-এ ছড়িয়ে থাকা একটি মাল্টি-লাইন কোয়েরি একক লাইন 'SELECT * FROM users WHERE id = 1'-এ পরিণত হয়। মিনিফাইড SQL অ্যাপ্লিকেশন কোড, একটি JSON কনফিগ, বা একটি লগ লাইনে একটি কোয়েরি এমবেড করার জন্য উপযোগী।
কোন কোন SQL ডায়ালেক্ট সাপোর্টেড?
Standard SQL, MySQL, PostgreSQL, SQL Server (T-SQL), Oracle, SQLite, BigQuery, এবং Snowflake থেকে বেছে নিন। ডায়ালেক্ট সেটিং কীওয়ার্ড রিকগনিশন এবং কোটিং সমন্বয় করে — যেমন MySQL-এর ব্যাকটিক আইডেন্টিফায়ার এবং # কমেন্ট, অথবা T-SQL-এর ব্র্যাকেটেড আইডেন্টিফায়ার যেমন [Order Details] — তাই আপনার কোড আপনার ডেটাবেস ইঞ্জিনের জন্য সঠিকভাবে ফরম্যাট হয়।
অনলাইনে SQL পেস্ট করা কি নিরাপদ?
এই টুলের ক্ষেত্রে, হ্যাঁ। প্রতিটি কোয়েরি সম্পূর্ণভাবে আপনার ব্রাউজারে জাভাস্ক্রিপ্ট দিয়ে ফরম্যাট হয় এবং কখনো কোনো সার্ভারে পাঠানো, লগ করা, বা সংরক্ষণ করা হয় না। এটি গুরুত্বপূর্ণ যখন একটি কোয়েরিতে আসল টেবিলের নাম, স্কিমার বিবরণ, বা নমুনা ডেটা থাকে। সবচেয়ে বেশি লিঙ্ক করা দুটি বিকল্প — sqlformat.org এবং poorsql.com — দুটোই আপনার কোয়েরি সার্ভার-সাইডে প্রসেস করে, যা খেলনা উদাহরণের জন্য ঠিক আছে কিন্তু প্রোডাকশন SQL-এর জন্য ভিন্ন গল্প। এখানে, কোনো কিছুই আপনার ডিভাইস ছেড়ে যায় না।
SQL কীভাবে সঠিকভাবে ইনডেন্ট করব?
ভালো SQL ইনডেন্টেশন প্রতিটি ক্লজকে বাম মার্জিনে রাখে এবং তার নিচের আইটেমগুলো ইনডেন্ট করে — SELECT-এর নিচে কলাম, WHERE-এর নিচে শর্ত, FROM-এর নিচে জয়েন করা টেবিল, এবং নেস্টেড সাবকোয়েরি এক স্তর গভীরে। এই টুলটি এটি স্বয়ংক্রিয়ভাবে করে; আপনি শুধু ইনডেন্ট প্রস্থ বেছে নিন — ২ স্পেস, ৪ স্পেস, বা একটি ট্যাব — আর এটি পুরো স্টেটমেন্ট জুড়ে সামঞ্জস্যপূর্ণভাবে প্রয়োগ হয়।
একটি SQL কোয়েরি কীভাবে সাজাব?
একটি পড়ার উপযোগী কোয়েরি যৌক্তিক ক্রম SELECT → FROM → JOIN → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT অনুসরণ করে, প্রতি লাইনে একটি ক্লজ এবং WHERE-এর নিচে প্রতিটি AND/OR শর্ত ইনডেন্ট করা থাকে। এখানে আপনার SQL ফরম্যাট করা এই স্ট্রাকচারটি আপনার জন্য প্রয়োগ করে, যা দীর্ঘ কোয়েরিগুলোকে একটি পুল রিকোয়েস্টে স্ক্যান করা, ডিবাগ করা, এবং রিভিউ করা অনেক সহজ করে তোলে।
SQL কোয়েরি ফরম্যাট করার টুল কোনটি?
এই পেজটিই সেই টুল — একটি ফ্রি, ব্রাউজার-ভিত্তিক SQL ফরম্যাটার যাতে কোনো ইনস্টল বা সাইনআপের দরকার নেই: পেস্ট করুন, ফরম্যাট করুন, কপি করুন। এটি VS Code, DataGrip, DBeaver, বা Oracle SQL Developer-এর এডিটর ফরম্যাটারের পরিপূরক, কিন্তু ফোনসহ যেকোনো ডিভাইসে তাৎক্ষণিকভাবে কাজ করে, যা একটি টিকিট, ইমেইল, বা চ্যাট মেসেজের ভেতরে একটি কোয়েরি রিভিউ করার সময় আদর্শ।
এটি sqlformat.org বা poorsql.com-এর সাথে কীভাবে তুলনীয়?
মূল পার্থক্যটি হলো প্রসেসিংটি কোথায় ঘটে। sqlformat.org এবং poorsql.com দুটোই তাদের সার্ভারে আপনার কোয়েরি পাঠায় — খেলনা কোয়েরির জন্য ঠিক আছে, কিন্তু SQL যদি প্রোডাকশন টেবিল স্পর্শ করে বা আসল স্কিমার নাম অন্তর্ভুক্ত করে তাহলে এটি একটি উদ্বেগের বিষয়। UtiloKit-এর ফরম্যাটার সম্পূর্ণভাবে আপনার ব্রাউজারে চলে, তাই কোথাও কিছু ট্রান্সমিট হয় না। ফিচারের দিক থেকে, sqlformat.org-এ কোনো মিনিফাই মোড এবং BigQuery বা Snowflake-এর মতো ডায়ালেক্ট-নির্দিষ্ট অপশন নেই। poorsql.com-এর একটি মাত্র ইনডেন্ট স্টাইল এবং কোনো কীওয়ার্ড-কেস নিয়ন্ত্রণ নেই। UtiloKit আপনাকে আটটি ডায়ালেক্ট, চারটি কীওয়ার্ড-কেস অপশন, শেষে বা শুরুতে কমা, এবং ডাউনলোডযোগ্য .sql ফাইল দেয় — সবকিছুই সাইনআপ ছাড়া।
VS Code বা SQL Developer-এ SQL কীভাবে ফরম্যাট করব?
VS Code-এ আপনি একটি SQL ফরম্যাটার এক্সটেনশন ইনস্টল করেন এবং Shift+Alt+F চাপেন; Oracle SQL Developer-এ শর্টকাটটি Ctrl+F7; SSMS-এ আপনাকে একটি থার্ড-পার্টি অ্যাড-ইন যোগ করতে হবে। সবগুলোরই অ্যাপ এবং কিছু কনফিগারেশন প্রয়োজন। এই টুলটি ব্রাউজারে একই সাজানো ফলাফল দেয় কিছু সেটআপ ছাড়াই — কোয়েরি পেস্ট করুন, আপনার স্টাইল বেছে নিন, এবং এটি আবার কপি করুন।
ফরম্যাটিং কি আমার কোয়েরির আচরণ পরিবর্তন করে?
না। Beautify শুধু হোয়াইটস্পেস, লাইন ব্রেক, এবং (ঐচ্ছিকভাবে) কীওয়ার্ড কেস পরিবর্তন করে — এটি কখনো ক্লজের ক্রম বদলায় না, কিছুর নাম পরিবর্তন করে না, বা মান পরিবর্তন করে না। SQL টোকেনের মধ্যেকার অতিরিক্ত হোয়াইটস্পেস উপেক্ষা করে এবং কীওয়ার্ডকে কেস-অসংবেদনশীলভাবে বিবেচনা করে, তাই ফরম্যাট করা কোয়েরি ঠিক একই ফলাফল ফেরত দেয়। স্ট্রিং লিটারেল (কোটেশনের ভেতরে) এবং কমেন্ট অস্পৃশ্য অবস্থায় সংরক্ষিত থাকে।
DDL, DML, DCL, এবং TCL কমান্ড কী?
এগুলো SQL-এর চারটি সাব-ভাষা। DDL (Data Definition Language) স্ট্রাকচার সংজ্ঞায়িত করে — CREATE, ALTER, DROP, TRUNCATE। DML (Data Manipulation Language) সারির সাথে কাজ করে — SELECT, INSERT, UPDATE, DELETE। DCL (Data Control Language) অনুমতি পরিচালনা করে — GRANT, REVOKE। TCL (Transaction Control Language) ট্রানজেকশন পরিচালনা করে — COMMIT, ROLLBACK, SAVEPOINT। এই ফরম্যাটার চারটি থেকেই স্টেটমেন্ট পরিষ্কার করে।
SQL ফরম্যাটার কি অফলাইনে কাজ করে?
হ্যাঁ। সব ফরম্যাটিং এবং মিনিফাইং স্থানীয়ভাবে আপনার ব্রাউজারে চলার কারণে, একবার পেজ লোড হয়ে গেলে আপনি কোনো নেটওয়ার্ক সংযোগ ছাড়াই SQL ফরম্যাট করতে পারবেন — এবং আপনার কোয়েরি কখনো আপনার ডিভাইস ছেড়ে যায় না, যা এটিকে দ্রুত এবং সম্পূর্ণভাবে প্রাইভেট দুটোই করে তোলে।
Related tools
সব টুল দেখুনCSV ভিউয়ার
CSV বা TSV ফাইল পরিচ্ছন্ন টেবিল হিসেবে দেখুন, সাজান ও খুঁজুন — আপনার ব্রাউজারে।
Statistics Calculator
Calculate mean, median, mode, standard deviation, variance and more from a data set.
Matrix Calculator
Add, subtract, multiply matrices and compute determinant, inverse and transpose for 2×2–4×4 matrices.
JSON ⇄ CSV কনভার্টার
JSON অ্যারেকে CSV-তে এবং CSV-কে আবার JSON-এ রূপান্তর করুন — সঠিক কোটিং সহ।
XML ফরম্যাটার
আপনার ব্রাউজারেই XML সুন্দর করুন, মিনিফাই ও যাচাই করুন।
JSON থেকে TypeScript
একটি JSON নমুনা থেকে নেস্টেড টাইপ সহ TypeScript ইন্টারফেস তৈরি করুন।