💻
⌨️
🖱️
🖥️
💾
← डैशबोर्ड पर वापस जाएँ
Font Size:

1. परिचय

MySQL में डेटा पुनर्प्राप्त करने के लिए SELECT कथन सबसे महत्वपूर्ण क्वेरी है। इसके साथ WHERE (शर्त), ORDER BY (क्रमबद्धता), GROUP BY (समूहीकरण), LIKE (पैटर्न मिलान) और विभिन्न एकत्रीकरण फ़ंक्शन (Aggregate Functions) का उपयोग होता है। इस अध्याय में हम इन सभी क्वेरी तकनीकों का विस्तृत अध्ययन करेंगे। एक उदाहरण तालिका पर सभी क्वेरी को समझेंगे।

उदाहरण तालिका: student

CREATE TABLE student (
    roll_no INT PRIMARY KEY,
    name VARCHAR(50),
    class VARCHAR(5),
    marks FLOAT,
    city VARCHAR(30)
);

नमूना डेटा:

INSERT INTO student VALUES
(101, 'राहुल', '11A', 85.5, 'दिल्ली'),
(102, 'सीमा', '11B', 92.0, 'मुंबई'),
(103, 'अमित', '11A', 78.0, 'दिल्ली'),
(104, 'नेहा', '11B', 88.5, 'कोलकाता'),
(105, 'रवि', '11A', 65.0, 'मुंबई');

2. SELECT कथन के विभिन्न रूप

सभी रिकॉर्ड और सभी स्तंभ

SELECT * FROM student;

चयनित स्तंभ

SELECT name, marks FROM student;

डुप्लीकेट हटाकर अद्वितीय मान

SELECT DISTINCT city FROM student;

DISTINCT केवल अद्वितीय (Unique) मान लौटाता है। यहाँ शहर: दिल्ली, मुंबई, कोलकाता।

कॉलम एलियास (Alias)

SELECT name AS नाम, marks AS अंक FROM student;

AS से स्तंभ का वैकल्पिक नाम दिया जाता है।

3. WHERE शर्त के साथ SELECT

कुछ रिकॉर्ड केवल तभी लाने के लिए WHERE शर्त उपयोग होती है।

SELECT * FROM student WHERE marks > 80;
SELECT * FROM student WHERE class = '11A';
SELECT * FROM student WHERE city = 'दिल्ली';

तुलनात्मक ऑपरेटर

=, != (या <>), >, <, >=, <= तुलनात्मक ऑपरेटर हैं।

SELECT * FROM student WHERE marks >= 85;
SELECT * FROM student WHERE roll_no != 101;

तार्किक ऑपरेटर

AND, OR, NOT से अनेक शर्तें जोड़ी जाती हैं।

SELECT * FROM student WHERE class = '11A' AND marks > 80;
SELECT * FROM student WHERE city = 'दिल्ली' OR city = 'मुंबई';
SELECT * FROM student WHERE NOT city = 'दिल्ली';

BETWEEN और IN

SELECT * FROM student WHERE marks BETWEEN 70 AND 90;
SELECT * FROM student WHERE city IN ('दिल्ली', 'मुंबई');

4. ORDER BY - क्रमबद्धता

परिणामों को क्रमबद्ध करने के लिए ORDER BY का उपयोग होता है। डिफ़ॉल्ट क्रम ASC (आरोही) है।

SELECT * FROM student ORDER BY marks;
SELECT * FROM student ORDER BY marks DESC;
SELECT * FROM student ORDER BY class, marks DESC;

5. LIKE - पैटर्न मिलान

LIKE का उपयोग वाइल्डकार्ड से पैटर्न मिलान के लिए होता है।

SELECT * FROM student WHERE name LIKE 'र%';
SELECT * FROM student WHERE name LIKE '%ह';
SELECT * FROM student WHERE name LIKE '_त%';
SELECT * FROM student WHERE name NOT LIKE 'र%';

6. एकत्रीकरण फ़ंक्शन (Aggregate Functions)

एकत्रीकरण फ़ंक्शन एक स्तंभ के अनेक मानों पर कार्य करके एक मान देते हैं।

फ़ंक्शन कार्य
COUNT() पंक्तियों की संख्या
SUM() मानों का योग
AVG() मानों का औसत
MAX() सबसे बड़ा मान
MIN() सबसे छोटा मान
SELECT COUNT(*) FROM student;
SELECT COUNT(city) FROM student;
SELECT SUM(marks) FROM student;
SELECT AVG(marks) FROM student;
SELECT MAX(marks) FROM student;
SELECT MIN(marks) FROM student;

7. GROUP BY - समूहीकरण

GROUP BY समान मानों वाली पंक्तियों को समूह में एकत्रित करता है।

SELECT city, COUNT(*) FROM student GROUP BY city;
SELECT class, AVG(marks) FROM student GROUP BY class;
SELECT city, MAX(marks) FROM student GROUP BY city;

HAVING क्लॉज

HAVING का उपयोग समूहों पर शर्त लगाने के लिए होता है (WHERE समूहों पर नहीं लगती)।

SELECT city, COUNT(*) FROM student
GROUP BY city
HAVING COUNT(*) >= 2;

8. क्वेरी में गणितीय और स्ट्रिंग फ़ंक्शन

गणितीय फ़ंक्शन

SELECT ROUND(marks, 1) FROM student;
SELECT MOD(roll_no, 2) FROM student;

स्ट्रिंग फ़ंक्शन

SELECT UPPER(name) FROM student;
SELECT LENGTH(name) FROM student;

9. अद्यतन और हटाने की क्वेरी

अद्यतन (UPDATE) कथन से किसी रिकॉर्ड के मान को बदला जाता है। इसका सामान्य रूप है: UPDATE तालिका SET स्तंभ = मान WHERE शर्त। SET के बाद एक या अनेक स्तंभों के नए मान लिखे जाते हैं, और WHERE शर्त यह निर्धारित करती है कि किन पंक्तियों को अद्यतन करना है। यदि WHERE नहीं लिखा जाता, तो तालिका की सभी पंक्तियाँ बदल जाती हैं, जो अधिकांश स्थितियों में अनचाहा परिणाम देती है। उदाहरण के लिए, यदि किसी विद्यार्थी के अंक सुधर गए हैं और हम केवल उसी रिकॉर्ड को बदलना चाहते हैं, तो roll_no के आधार पर शर्त लगाना आवश्यक है। इसी प्रकार, DELETE कथन से रिकॉर्ड हटाए जाते हैं; DELETE FROM तालिका WHERE शर्त के साथ। यहाँ भी WHERE अनिवार्य है, अन्यथा तालिका के सभी रिकॉर्ड हट जाते हैं। ध्यान रखें कि DELETE केवल रिकॉर्ड हटाता है, जबकि DROP TABLE पूरी टेबल की संरचना को ही समाप्त कर देता है। इन दोनों कमांड के बीच का अंतर परीक्षा में अक्सर पूछा जाता है। संचालन के दौरान यदि गलती हो जाए तो TRANSACTION कमांड (COMMIT/ROLLBACK) से पुनर्प्राप्ति संभव है, परंतु MySQL में डिफ़ॉल्ट रूप से परिवर्तन स्वतः स्थायी (auto-commit) हो जाते हैं। इसलिए महत्वपूर्ण डेटा पर संचालन करने से पहले उसका बैकअप ले लेना एक अच्छी प्रथा है। इसके अलावा, क्वेरी लिखते समय तालिका और स्तंभ के नाम की वर्तनी का ध्यान रखना आवश्यक है, क्योंकि MySQL स्तंभ के नाम की वर्तनी में भिन्नता को त्रुटि मानता है। कुंजीयुक्त (Key) स्तंभों पर शर्त लगाने से क्वेरी अधिक तेज़ी से चलती है, इसलिए WHERE में सामान्यतः प्राथमिक कुंजी का उपयोग किया जाता है।

10. स्ट्रिंग और गणितीय फ़ंक्शनों का विस्तार

MySQL में स्ट्रिंग और गणितीय संचालन के लिए अनेक फ़ंक्शन उपलब्ध हैं। स्ट्रिंग फ़ंक्शनों में CONCAT() दो या अधिक स्ट्रिंगों को जोड़ता है, UPPER() और LOWER() अक्षरों का केस बदलते हैं, LENGTH() या CHAR_LENGTH() स्ट्रिंग की लंबाई देते हैं, SUBSTRING() स्ट्रिंग का भाग निकालता है, TRIM() सिरे से स्थान हटाता है, और REPLACE() किसी भाग को बदलता है। उदाहरण के लिए, CONCAT(name, ' का शहर ', city) से स्तंभों को मिलाकर एक वाक्य बनाया जा सकता है। गणितीय फ़ंक्शनों में ROUND() दशमलव का पूर्णांकन करता है, MOD() शेषफल देता है, POWER() घातांक निकालता है, SQRT() वर्गमूल देता है, ABS() पूर्ण मान देता है और CEIL/FLOOR ऊपर/नीचे पूर्णांकन करते हैं। इन फ़ंक्शनों का उपयोग SELECT के भीतर स्तंभों पर किया जाता है। इनके साथ ALIAS (AS) का उपयोग करके परिणाम स्तंभ को अर्थपूर्ण नाम दिया जा सकता है, जिससे आउटपुट सुपाठ्य बनता है। फ़ंक्शनों का संयोजन करके जटिल गणनाएँ भी की जा सकती हैं, जैसे ROUND(AVG(marks), 1) से औसत अंक को एक दशमलव स्थान तक प्रदर्शित करना। इसी प्रकार CONCAT में UPPER का उपयोग करके नाम को बड़े अक्षरों में दिखाया जा सकता है। परीक्षा में इन फ़ंक्शनों के नाम, उनके कार्य और छोटे उदाहरण पूछे जाते हैं। अतः प्रत्येक फ़ंक्शन के साथ एक-एक उदाहरण स्मरण रखना लाभदायक है। स्ट्रिंग फ़ंक्शन स्ट्रिंग पर और गणितीय फ़ंक्शन संख्याओं पर कार्य करते हैं, इसलिए उपयुक्त प्रकार का फ़ंक्शन चुनना आवश्यक है। इन फ़ंक्शनों के अभ्यास से डेटा का प्रदर्शन अधिक सार्थक और प्रस्तुतीकरण-योग्य बनता है, क्योंकि हम डेटा को उसके मूल रूप में नहीं, बल्कि आवश्यक रूपांतरण के बाद दिखा सकते हैं।

11. LIMIT क्लॉज

परिणामों की संख्या सीमित करने के लिए:

SELECT * FROM student LIMIT 3;
SELECT * FROM student ORDER BY marks DESC LIMIT 1;

दूसरी क्वेरी सर्वोच्च अंक वाले विद्यार्थी को देती है।

हल किए गए उदाहरण

किसी भी क्वेरी प्रश्न को हल करने की विधि को उदाहरण से समझते हैं। मान लीजिए प्रश्न है: 'उन विद्यार्थियों के नाम और अंक ज्ञात करो जो दिल्ली से हैं और जिनके अंक 75 से अधिक हैं, और परिणाम को अंकों के अवरोही क्रम में दिखाओ।' पहले तालिका की पहचान करते हैं, जो student है। हमें केवल name और marks स्तंभ चाहिए, अतः ये SELECT के बाद लिखते हैं। दो शर्तें एक साथ लागू होती हैं: शहर दिल्ली होना चाहिए तथा अंक 75 से अधिक होने चाहिए, अतः दोनों को AND से जोड़कर WHERE में रखते हैं। अंत में सर्वोच्च अंक पहले दिखाने के लिए ORDER BY marks DESC लिखते हैं। पूरी क्वेरी इस प्रकार बनती है: SELECT name, marks FROM student WHERE city = 'दिल्ली' AND marks > 75 ORDER BY marks DESC। इस प्रकार प्रश्न को पढ़कर, प्रत्येक भाग को क्लॉज में बदलकर, फिर क्वेरी को जोड़ना ही वह विश्वसनीय विधि है जो लगभग हर प्रश्न पर काम करती है। परीक्षा में समय बचाने के लिए इसी विधि का बार-बार अभ्यास करना चाहिए, ताकि क्वेरी लिखने में झिझक न हो।

एक अन्य उदाहरण GROUP BY की शक्ति दिखाता है। प्रत्येक शहर के विद्यार्थियों के औसत अंक ज्ञात करने के लिए हम SELECT city, AVG(marks) FROM student GROUP BY city लिखते हैं। MySQL पहले पंक्तियों को city स्तंभ के भिन्न मानों के अनुसार अलग-अलग समूहों में बाँटता है, फिर प्रत्येक समूह के भीतर AVG(marks) की गणना अलग-अलग करता है, अतः प्रत्येक शहर अपने औसत के साथ केवल एक बार आता है। यदि हम केवल उन्हीं शहरों को रखना चाहते हैं जिनका औसत 80 से अधिक है, तो हम HAVING AVG(marks) > 80 जोड़ते हैं। यहाँ WHERE का प्रयोग गलत होगा, क्योंकि WHERE समूह बनने से पहले पंक्तियों पर लागू होता है और समूहों के औसत को नहीं देख सकता, जबकि HAVING समूहों के बनने के बाद उन पर शर्त लगाता है। पंक्ति-स्तरीय और समूह-स्तरीय फ़िल्टरिंग का यही अंतर अनेक अंकों का आधार है और यही कारण है कि समूहीकृत क्वेरी में SELECT के साथ केवल समूह स्तंभ और एकत्रीकरण फ़ंक्शन ही रखे जा सकते हैं।

LIMIT क्लॉज उपर्युक्त क्वेरी के साथ मिलकर और अधिक उपयोगी बनता है। उदाहरण के लिए, पूरी तालिका को क्रमबद्ध किए बिना केवल शीर्ष तीन अंक प्राप्त करने के लिए SELECT * FROM student ORDER BY marks DESC LIMIT 3 लिखते हैं। यह क्वेरी पहले सभी पंक्तियों को अंकों के अवरोही क्रम में लगाती है और फिर केवल पहली तीन पंक्तियाँ दिखाती है। इसी प्रकार दूसरे सर्वोच्च अंक वाले विद्यार्थी के लिए LIMIT 1 OFFSET 1 का प्रयोग किया जा सकता है। LIMIT और OFFSET का यह संयोजन रिपोर्ट बनाने के लिए अत्यंत सहायक है, जिसमें परिणाम को पृष्ठों में बाँटना पड़ता है। इस प्रकार SELECT, WHERE, GROUP BY, HAVING, ORDER BY और LIMIT के समुचित संयोजन से किसी भी प्रकार का डेटा विश्लेषण संभव है।

11. क्वेरी का संयोजन (क्रम)

SQL क्वेरी का सामान्य क्रम:

SELECT स्तंभ
FROM तालिका
WHERE शर्त
GROUP BY स्तंभ
HAVING समूह शर्त
ORDER BY स्तंभ;
graph TD A["SELECT क्वेरी"] --> B["WHERE - शर्त"] A --> C["ORDER BY - क्रम"] A --> D["GROUP BY - समूह"] A --> E["एकत्रीकरण फ़ंक्शन"] A --> F["LIKE - पैटर्न"] B --> B1["=, >, <, BETWEEN, IN"] C --> C1["ASC, DESC"] D --> D1["HAVING शर्त"] E --> E1["COUNT, SUM, AVG, MAX, MIN"] F --> F1["% शून्य या अधिक, _ एक वर्ण"]

त्वरित पुनरावृत्ति तालिकाएँ

फ़ंक्शन कार्य उदाहरण
COUNT(*) पंक्तियों की संख्या COUNT(*)
SUM(marks) मानों का योग SUM(marks)
AVG(marks) औसत AVG(marks)
MAX(marks) अधिकतम MAX(marks)
MIN(marks) न्यूनतम MIN(marks)
क्लॉज कार्य
WHERE पंक्तियों पर शर्त
GROUP BY समूहीकरण
HAVING समूहों पर शर्त
ORDER BY क्रमबद्धता (ASC/DESC)
LIMIT पंक्तियों की सीमा
DISTINCT अद्वितीय मान
वाइल्डकार्ड अर्थ
% शून्य या अधिक वर्ण
_ केवल एक वर्ण
LIKE 'र%' 'र' से प्रारंभ
LIKE '%ह' 'ह' पर समाप्त
NOT LIKE पैटर्न से भिन्न

माइंड मैप

flowchart TD A["MySQL क्वेरीज़"] --> B["SELECT"] A --> C["WHERE"] A --> D["ORDER BY"] A --> E["GROUP BY + HAVING"] A --> F["एकत्रीकरण फ़ंक्शन"] A --> G["LIKE"] B --> H["*, स्तंभ, DISTINCT"] C --> I["तुलना, AND/OR, BETWEEN, IN"] D --> J["ASC, DESC"] F --> K["COUNT, SUM, AVG, MAX, MIN"] G --> L["% और _ वाइल्डकार्ड"]

महत्वपूर्ण आरेख (SVG)

SELECT क्वेरी का प्रवाह SELECT name, marks FROM student WHERE marks > 80 SELECT स्तंभ चुनना FROM तालिका चुनना WHERE marks > 80 शर्त लगाना ORDER BY / GROUP BY क्रम/समूह (वैकल्पिक) स्वर्ण नियम (Golden Rule) WHERE से पहले GROUP BY, HAVING उसके बाद, ORDER BY सबसे अंत में।
एकत्रीकरण फ़ंक्शन COUNT() - गिनती SUM() - योग AVG() - औसत MAX() - अधिकतम MIN() - न्यूनतम ROUND() - पूर्णांकन ये फ़ंक्शन अनेक मानों पर कार्य कर एक मान देते हैं AVG(marks) = (85.5+92+78+88.5+65)/5 = 81.8 स्वर्ण नियम (Golden Rule) एकत्रीकरण फ़ंक्शन अनेक पंक्तियों से एक मान बनाते हैं।

सामान्य गलतियाँ

  1. WHERE के स्थान पर HAVING का उपयोग: WHERE पंक्तियों पर, HAVING केवल GROUP BY के बाद समूहों पर लागू होता है।
  2. SELECT में स्तंभ का गलत नाम: जो स्तंभ तालिका में नहीं है, उसे चुनने पर त्रुटि आती है।
  3. LIKE में वाइल्डकार्ड का भ्रम: % शून्य या अधिक वर्ण, _ केवल एक वर्ण को दर्शाता है।
  4. ORDER BY में ASC/DESC न देना: डिफ़ॉल्ट ASC होता है; DESC के लिए स्पष्ट रूप से लिखना चाहिए।
  5. GROUP BY के साथ गलत फ़ंक्शन: समूहीकृत क्वेरी में SELECT के साथ केवल समूह स्तंभ और एकत्रीकरण फ़ंक्शन ही आने चाहिए।
  6. UPDATE/DELETE में WHERE भूलना: सभी रिकॉर्ड प्रभावित हो जाते हैं।
  7. DISTINCT के स्थान पर * लिखना: अद्वितीय मानों के लिए DISTINCT आवश्यक है।

परीक्षा युक्तियाँ

  1. COUNT, SUM, AVG, MAX, MIN का सही उपयोग और परिणाम की गणना करने का अभ्यास करें।
  2. WHERE और HAVING का अंतर स्पष्ट लिखें - WHERE पंक्तियों पर, HAVING समूहों पर।
  3. LIKE वाइल्डकार्ड के चार रूप ('र%', '%ह', '_त%', NOT LIKE) समझें।
  4. BETWEEN, IN, AND, OR के प्रश्नों में शर्त को ध्यान से पढ़कर उत्तर दें।
  5. ORDER BY में अनेक स्तंभों के क्रम का अभ्यास करें।
  6. SQL क्वेरी का सही क्रम याद रखें: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY।
  7. DISTINCT का उपयोग अद्वितीय मानों के लिए करें - अक्सर परीक्षा में पूछा जाता है।

निष्कर्ष

MySQL क्वेरीज़ डेटाबेस से अर्थपूर्ण सूचना प्राप्त करने का माध्यम हैं। SELECT के साथ WHERE, ORDER BY, GROUP BY, HAVING और एकत्रीकरण फ़ंक्शनों का संयोजन डेटा विश्लेषण की शक्तिशाली क्षमता प्रदान करता है। LIKE से पैटर्न मिलान और DISTINCT से अद्वितीय मान प्राप्त होते हैं। इन क्वेरी का अभ्यास करने से छात्र किसी भी डेटाबेस से आवश्यक सूचना निकालने में सक्षम होंगे। अगले अध्याय (प्रैक्टिकल) में हम पाइथन और MySQL के व्यावहारिक प्रश्नों और प्रोग्रामों का अध्ययन करेंगे। याद रखें, SQL का सर्वोत्तम अभ्यास वास्तविक डेटाबेस पर क्वेरी चलाकर ही होता है, इसलिए अधिक से अधिक क्वेरी लिखें और उनके परिणाम जाँचें।