SQL (Structured Query Language) वह सामान्य भाषा है जो ग्रह पर लगभग हर गंभीर रिलेशनल डेटाबेस द्वारा बोली जाती है— PostgreSQL, MySQL, और SQLite से SQL Server और Oracle जैसे वाणिज्यिक सिस्टम तक। यह आपको डेटा संरचनाओं को परिभाषित करने, डेटा संग्रहीत करने, इसे कुशलतापूर्वक क्वेरी करने और उस डेटा के व्यवहार के बारे में नियम लागू करने की अनुमति देता है।
नीचे SQL का एक गहरा, लगभग 2,500 शब्दों का दौरा है: यह क्या है, यह कैसे काम करता है, और वास्तविक सिस्टम में इसे अच्छी तरह से कैसे उपयोग करें।
SQL एक घोषणात्मक भाषा है: आप क्या डेटा चाहते हैं, यह वर्णन करते हैं, और डेटाबेस कैसे इसे प्राप्त करना है, यह तय करता है। W3Schools पर SQL गाइड और W3Schools.in SQL श्रृंखला जैसे ट्यूटोरियल SQL को कई डेटाबेस इंजन में डेटा संग्रहीत करने, हेरफेर करने और पुनर्प्राप्त करने के लिए एक मानक भाषा के रूप में पेश करते हैं।
क्योंकि SQL मानकीकृत और व्यापक रूप से समर्थित है, आप एक ही मानसिक मॉडल का उपयोग कर सकते हैं:
अधिकांश दैनिक व्यावसायिक डेटा—ऑर्डर, उपयोगकर्ता, भुगतान, लॉग, विश्लेषण—अंततः तालिकाओं में संग्रहीत होते हैं जिन्हें आप SQL के साथ क्वेरी कर सकते हैं।
SQL ISO/IEC 9075 मानक परिवार द्वारा मानकीकृत है, जो मूल भाषा और कई वैकल्पिक एक्सटेंशन को परिभाषित करता है। मानक SQL-86, SQL-92, SQL:1999, SQL:2003, और SQL:2023 तक के संस्करणों के माध्यम से विकसित हुआ है। SQL मानक ISO/IEC 9075:2023 पर ANSI के अवलोकन जैसे लेख समझाते हैं कि ANSI और ISO मानक समय के साथ कैसे संरेखित होते हैं।
मानक स्वयं कई भागों में विभाजित है, जैसे:
आप SQL के लिए ISO कैटलॉग पेज और Modern SQL का मानक भागों का विभाजन जैसे संसाधनों पर पूरी सूची देख सकते हैं।
व्यवहार में, प्रत्येक डेटाबेस अपनी स्वयं की बोली लागू करता है:
मूल अवधारणाएँ—तालिकाएँ, पंक्तियाँ, स्तंभ, जॉइन, एग्रीगेट—पोर्टेबल हैं, लेकिन कोई भी गैर-तुच्छ सिस्टम एक विशिष्ट बोली की विशेषताओं और सुविधाओं को सीखने से जुड़ा होगा।
अपने मूल में, SQL रिलेशनल मॉडल के आसपा स डिज़ाइन किया गया है: डेटा तालिकाओं (संबंधों) में रहता है, जहाँ प्रत्येक पंक्ति एक तथ्य का प्रतिनिधित्व करती है और प्रत्येक स्तंभ एक विशेषता का वर्णन करता है।
सामान्य तत्वों में शामिल हैं:
customers, ordersid, name, order_date, total_amountid)orders.customer_id → customers.id)सामान्यीकरण गाइड—जैसे DigitalOcean का सामान्यीकरण ट्यूटोरियल या freeCodeCamp का 1NF, 2NF, 3NF पर स्पष्टीकरण—अच्छे रिलेशनल डिज़ाइन को अतिरेक को कम करने और डेटा को अच्छी तरह से संरचित ताल िकाओं में विभाजित करके और उन्हें कुंजियों के साथ जोड़कर अद्यतन विसंगतियों को रोकने के रूप में फ्रेम करते हैं।
जब आप SQL के साथ क्वेरी करते हैं, तो आप अनिवार्य रूप से डेटाबेस से पूछ रहे हैं: "इन तालिकाओं से, इन शर्तों के तहत, मुझे कौन सी पंक्तियाँ और स्तंभ देखने चाहिए?"
SELECT स्टेटमेंट SQL का कार्यशील घोड़ा है और शायद इसका सबसे जटिल कमांड है। SQLite SELECT संदर्भ इसे "SQL भाषा में सबसे जटिल कमांड" कहता है, और MySQL का SELECT दस्तावेज़ीकरण और SQLite Tutorial का SELECT गाइड जैसे ट्यूटोरियल इसके कई विकल्पों से गुजरते हैं।
SELECT id, name
FROM customers;मुख्य भाग:
SELECT स्तंभों को सूचीबद्ध करता है (या सभी स्तंभों के लिए *, हालाँकि स्पष्ट होना आमतौर पर बेहतर होता ह ै)।FROM एक या अधिक तालिकाएँ चुनता है।WHERE पंक्तियों को फ़िल्टर करता है।ORDER BY परिणामों को क्रमबद्ध करता है।LIMIT आप कितनी पंक्तियाँ देखते हैं, इसे सीमित करता है।SELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;परिचयात्मक ट्यूटोरियल जैसे W3Schools SQL ट्यूटोरियल और W3Schools MySQL सामान्य कमांड का अवलोकन SELECT का उपयोग यह दिखाने के लिए करते हैं कि आप एक एकल, पठनीय अभिव्यक्ति में तालिकाओं से डेटा कैसे निकालते हैं।
SQL तब चमकता है जब आप क्वेरी में सीधे फ़िल्टरिंग और अभिव्यक्तियों को जोड़ते हैं:
SELECT
id,
total_amount,
total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
AND total_amount >= 100
ORDER BY total_amount DESC;WHERE क्लॉज़ तुलना ऑपरेटरों (=, <>, >, <), तार्किक ऑपरे टरों (AND, OR, NOT), पैटर्न मिलान (LIKE, ILIKE), और अधिक का उपयोग कर सकता है। MySQL जैसे डेटाबेस अंतर्निहित फ़ंक्शन और ऑपरेटर का एक समृद्ध सेट संख्यात्मक, स्ट्रिंग, दिनांक/समय, JSON, और अन्य संचालन के लिए दस्तावेज़ करते हैं।
आप यह भी कर सकते हैं:
IN का उपयोग करें: WHERE status IN ('paid', 'refunded')BETWEEN का उपयोग करें: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'IS NULL / IS NOT NULL का उपयोग करेंअच्छे ट्यूटोरियल और मैनुअल इस बात पर जोर देते हैं कि अभिव्यक्तियाँ कई क्लॉज़ में दिखाई देती हैं—WHERE, ORDER BY, HAVING, और यहाँ तक कि SELECT स्वयं भी। MySQL डॉक्स फ़ंक्शन और ऑपरेटर अध्याय के भीतर अभिव्यक्ति मूल्यांकन पर अपने अनुभाग में इसे हाइलाइट क रता है।
वास्तविक डेटाबेस शायद ही कभी सब कुछ एक ही तालिका में रखते हैं। इसके बजाय, आप डेटा को कई तालिकाओं में सामान्यीकृत करते हैं और जब आप क्वेरी करते हैं तो उन्हें जोड़ते हैं। जॉइन SQL जॉइन पर W3Schools पेज, GeeksforGeeks का जॉइन ट्यूटोरियल, TutorialsPoint का जॉइन अवलोकन, और SQL Practice Online पर SQL जॉइन ट्यूटोरियल जैसे संसाधनों में व्यापक रूप से कवर किए गए हैं।
SELECT
o.id,
c.name,
o.order_date,
o.total_amount
FROM orders AS o
JOIN customers AS c
ON c.id = o.customer_id;सामान्य जॉइन प्रकार:
दृश्य और कोड-भारी स्पष्टीकरण, जैसे DbSchema का "SQL joins explained" लेख या LearnSQL.com के जॉइन उदाहरण, जॉइन कैसे व्यवहार करते हैं, इसके बारे में मजबूत अंतर्ज्ञान बनाने के लिए शानदार तरीके हैं।
डेटा को सारांशित करने के लिए—कुल, औसत, गिनती—आप एग्रीगेट फ़ंक्शन (COUNT, SUM, AVG, MIN, MAX) GROUP BY के साथ उपयोग करते हैं:
SELECT
customer_id,
COUNT(*) AS order_count,
SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;संदर्भ जैसे MySQL फ़ंक्शन और ऑपरेटर अध्याय और PostgreSQL एग्रीगेट और विंडो फ़ंक्शन पर दस्तावेज़ीकरण इन अभिव्यक्तियों में आप उपयोग कर सकने वाले अंतर्निहित फ़ंक्शनों को सूचीबद्ध करते हैं।
आधुनिक SQL विंडो फ़ंक्शन का भी समर्थन करता है, जो आपको पंक्तियों की स्लाइडिंग "विंडो" पर एग्रीगेट की गणना करने की अनुमति देता है जबकि अभी भी व्यक्तिगत पंक्तियाँ लौटाता है—जैसे, चल रहे कुल या रैंकिंग। विंडो फ़ंक्शन SQL:1999 में संशोधनों के माध्यम से SQL में प्रवेश किए, बाद में SQL:2003 में एकीकृत हुए, जैसा कि SQL:1999 और SQL:2003 मानक पर नोट्स में संक्षेप में बताया गया है।
SELECT
customer_id,
order_date,
total_amount,
SUM(total_amount) OVER (
PARTITION BY customer_id
ORDER BY order_date
) AS running_total
FROM orders;इस प्रकार की क्वेरी डेटाबेस में सीधे विश्लेषण के लिए अत्यंत शक्तिशाली है।
SQL केवल क्वेरी करने के लिए नहीं है; यह Data Definition Language (DDL) स्टेटमेंट के माध्यम से आपके डेटा के आकार को भी परिभाषित करता है, जो PostgreSQL के Data Definition गाइड और MySQL के SQL स्टेटमेंट अध्याय जैसे अनुभागों में अच्छी तरह से दस्तावेज़ीकृत है।
सामान्य DDL कमांड:
CREATE DATABASE my_app; – एक डेटाबेस बनाएँCREATE TABLE customers (...); – एक तालिका परिभाषित करेंALTER TABLE customers ADD COLUMN phone TEXT; – तालिका संरचना बदलेंDROP TABLE customers; – एक तालिका हटाएँCREATE TABLE customers (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
active BOOLEAN NOT NULL DEFAULT TRUE
);ध्यान देने योग्य बातें:
PRIMARY KEY, UNIQUE, NOT NULL, CHECK अभिव्यक्तियाँप्रत्येक प्रमुख RDBMS मैनुअल—PostgreSQL का SQL भाषा अनुभाग, MySQL का संदर्भ मैनुअल, और SQLite का भाषा संदर्भ—DDL के बारे में सावधानी से सोचने पर जोर देता है, क्योंकि स्कीमा निर्णय बाद में बदलना मुश्किल होता है।
SQL डेटाबेस आमतौर पर ACID गुणों को लागू करते हैं—Atomicity, Consistency, Isolation, Durability—लेनदेन के माध्यम से:
BEGIN;
UPDATE accounts
SET balance = balance - 200
WHERE id = 1;
UPDATE accounts
SET balance = balance + 200
WHERE id = 2;
COMMIT;यदि BEGIN और COMMIT के बीच कुछ विफल हो जाता है, तो लेनदेन को रोलबैक किया जा सकता है ताकि मध्यवर्ती परिवर्तन डेटाबेस में लीक न हों।
MySQL का लेनदेन और लॉकिंग स्टेटमेंट अनुभाग START TRANSACTION, COMMIT, ROLLBACK, और सेवपॉइंट को कवर करता है, जबकि PostgreSQL के सम वर्तीता नियंत्रण और लेनदेन प्रबंधन अध्याय समझाते हैं कि अलगाव स्तर और MVCC हुड के नीचे कैसे काम करते हैं।
बाधाएँ—जैसे विदेशी कुंजी या चेक बाधाएँ—डेटाबेस का व्यावसायिक नियमों को लागू करने का तरीका है:
ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);अच्छी तरह से उपयोग किए जाने पर, वे आपके डेटाबेस को अपरिवर्तनीयता के संरक्षक में बदल देते हैं, केवल एप्लिकेशन लॉजिक पर निर्भर रहने के बजाय स्रोत पर अमान्य डेटा को रोकते हैं।
स्कीमा को सही करना अक्सर चतुर क्वेरी से अधिक मायने रखता है। सामान्यीकरण अतिरेक को कम करने और स्थिरता में सुधार करने के लिए तालिकाओं को संरचित करने की प्रक्रिया है। ट्यूटोरियल जैसे:
सामान्य प्रगति:
अति-सामान्यीकरण प्रदर्शन को नुकसान पहुँचा सकता है और क्वेरी को जटिल बना सकता है; व्यावहारिक टीमें अक्सर 3NF तक सामान्यीकृत करती हैं और फिर डिनॉर्मलाइज़ करती हैं चुनिंदा रूप से (उदाहरण के लिए, एग्रीगेट कैशिंग) जहाँ प्रदर्शन की आवश्यकता होती है।
इंडेक्स SQL क्वेरी को तेज़ बनाने के लिए प्राथमिक उपकरण हैं। वे सहायक डेटा संरचनाएँ हैं जो डेटाबेस को संपूर्ण तालिकाओं को स्कैन करने के बजाय सीधे प्रासंगिक पंक्तियों पर कूदने की अनुमति देती हैं।
इंडेक्सिंग पर एक अत्यधिक सम्मानित संसाधन Markus Winand का Use The Index, Luke! है, एक मुफ्त ऑनलाइन पुस्तक जो पूरी तरह से SQL प्रदर्शन और इंडेक्सिंग रणनीति पर केंद्रित है। साइट का मुख्य पेज, UseTheIndexLuke.com, और "Indexing LIKE filters" और "More indexes, slower INSERT" जैसे लेख समझाते हैं कि इंडेक्स कब मदद करते हैं और कब नुकसान पहुँचाते हैं।
मुख्य विचार:
WHERE email = ..., WHERE created_at >= ...)।(customer_id, created_at) WHERE customer_id = ? AND created_at >= ? के लिए अच्छी तरह से काम करता है।SELECT, UPDATE, और DELETE में मदद करते हैं, लेकिन इन्सर्ट को धीमा करते हैं क्योंकि प्रत्येक इन्सर्ट को सभी प्रासंगिक इंडेक्स को अपडेट करना होगा।गाइड जैसे MSSQLTips का SQL Server इंडेक्स डिज़ाइन करने पर लेख प्रदर्शित करता है कि एक इंडेक्स में स्तंभ चुनाव और क्रम वास्तविक क्वेरी को कैसे प्रभावित करता है।
व्यावहारिक नियम:
EXPLAIN ANALYZE का उपयोग करें कि क्वेरी कैसे निष्पादित होती हैं।जबकि मूल सिद्धांत स्थिर रहे हैं, आधुनिक SQL ने काफी वृद्धि की है:
WITH के माध्यम से Common Table Expressions (CTE) अधिक पठनीय, मॉड्यूलर क्वेरी की अनुमति देते हैं:WITH recent_orders AS (
SELECT *
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT customer_id, COUNT(*)
FROM recent_orders
GROUP BY customer_id;SQL मानक ने स्वयं XML, बहुआयामी सरणियाँ, और प्रॉपर्टी ग्राफ क्वेरी के लिए भाग जोड़े हैं, जैसा कि ISO SQL मानक कैटलॉग और SQL के विकास पर लेखों में जैसे ANSI SQL मानक लेख में दस्तावेज़ीकृत है।
आधुनिक SQL इतना शक्तिशाली है कि कई एप्लिकेशन जटिल लॉजिक—पदानुक्रम, विश्लेषण, इवेंट प्रसंस्करण—को डेटाबेस परत में धकेल सकते हैं।
क्योंकि SQL डेटा कार्य के लिए मौलिक बना हुआ है, सीखने के संसाधनों का एक समृद्ध पारिस्थितिकी तंत्र है:
एक व्यावहारिक सीखने की रणनीति:
WHERE, ORDER BY, और LIMIT जोड़ें।GROUP BY के साथ "प्रति माह राजस्व" या "शीर्ष 10 ग्राहक" जैसे प्रश्नों का उत्तर देना सीखें।EXPLAIN के साथ क्वेरी प्रोफ़ाइल करें।यदि आप SQL को आराम से पढ़ और लिख सकते हैं, तो आप प्रोडक्शन में सीधे डेटा का निरीक्षण कर सकते हैं, स्प्रेडशीट में निर्यात किए बिना रिपोर्ट बना सकते हैं, अंतर्निहित तालिकाओं में झाँककर एप्लिकेशन लॉजिक को डीबग कर सकते हैं, और इंजीनियरों और विश्लेषकों के साथ अधिक प्रभावी ढंग से सहयोग कर सकते हैं।
SQL एक अनूठे चौराहे पर बैठता है: यह 40 से अधिक वर्ष पुराना है, लेकिन आज के क्लाउड-नेटिव, विश्लेषण-भारी सिस्टम में गहराई से प्रासंगिक है। ISO/IEC 9075 मानक और इसके कई भाग विकसित होना जारी रखते हैं, जबकि PostgreSQL, MySQL, और SQLite जैसे ओपन-सोर्स डेटाबेस व्यावहारिक सुविधाएँ और प्रदर्शन सुधार को आगे बढ़ाते हैं।
यदि आप डेटा के साथ काम करते हैं—डेवलपर, विश्लेषक, डेटा वैज्ञानिक, या उत्पाद प्रबंधक—SQL वह साझा भाषा है जो आपको डेटाबेस से सीधे प्रश्न पूछने की अनुमति देती है। इसे एक बार सीखना इसके लायक है, और यह आपके बाकी करियर के लिए भुगतान करता है।
SQL फॉर्मेटिंग उचित इंडेंटेशन, लाइन ब्रेक और कीवर्ड केसिंग के साथ SQL क्वेरी को व्यवस्थित करने की प्रक्रिया है जो पठनीयता और रखरखाव में सुधार करती है।
हमारा फॉर्मेटर MySQL, PostgreSQL, SQL Server, SQLite, Oracle और कई अन्य सहित कई SQL बोलियों का समर्थन करता है।
हाँ! सभी SQL फॉर्मेटिंग पूरी तरह से आपके ब्राउज़र में होती है। आपकी क्वेरी कभी भी आपके कंप्यूटर को नहीं छोड़ती है, पूर्ण गोपनीयता और सुरक्षा सुनिश्चित करती है।
हाँ, आप एक बार में कई SQL स्टेटमेंट फॉर्मेट कर सकते हैं। फॉर्मेटर चयनित बोली के आधार पर प्रत्येक स्टेटमेंट को उचित रूप से संभालेगा।
फॉर्मेटर आपके SQL को फॉर्मेट करने का प्रयास करेगा भले ही इसमें सिंटैक्स त्रुटियाँ हों। हालाँकि, आप अमान्य SQL के लिए त्रुटि संदेश देख सकते हैं जिसे पार्स नहीं किया जा सकता। हमेशा अपने डेटाबेस सिस्टम के साथ अपने SQL को मान्य करें।