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, 'मुंबई');
SELECT * FROM student;
SELECT name, marks FROM student;
SELECT DISTINCT city FROM student;
DISTINCT केवल अद्वितीय (Unique) मान लौटाता है। यहाँ शहर: दिल्ली, मुंबई, कोलकाता।
SELECT name AS नाम, marks AS अंक FROM student;
AS से स्तंभ का वैकल्पिक नाम दिया जाता है।
कुछ रिकॉर्ड केवल तभी लाने के लिए 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 a AND b - मानों की सीमा।IN (...) - सूची में से कोई मान।SELECT * FROM student WHERE marks BETWEEN 70 AND 90;
SELECT * FROM student WHERE city IN ('दिल्ली', 'मुंबई');
परिणामों को क्रमबद्ध करने के लिए ORDER BY का उपयोग होता है। डिफ़ॉल्ट क्रम ASC (आरोही) है।
SELECT * FROM student ORDER BY marks;
SELECT * FROM student ORDER BY marks DESC;
SELECT * FROM student ORDER BY class, marks DESC;
ASC - आरोही (छोटे से बड़े)DESC - अवरोही (बड़े से छोटे)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 'र%';
'र%' - जो नाम 'र' से प्रारंभ होते हैं।'%ह' - जो नाम 'ह' पर समाप्त होते हैं।'_त%' - दूसरे अक्षर 'त' वाले नाम।एकत्रीकरण फ़ंक्शन एक स्तंभ के अनेक मानों पर कार्य करके एक मान देते हैं।
| फ़ंक्शन | कार्य |
|---|---|
| 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;
COUNT(*) सभी पंक्तियों की संख्या गिनता है।COUNT(city) NULL को छोड़कर गिनता है।AVG(marks) = (85.5 + 92 + 78 + 88.5 + 65) / 5 = 81.8GROUP 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 का उपयोग समूहों पर शर्त लगाने के लिए होता है (WHERE समूहों पर नहीं लगती)।
SELECT city, COUNT(*) FROM student
GROUP BY city
HAVING COUNT(*) >= 2;
ROUND(column, d) - दशमलव पूर्णांकनMOD(a, b) - शेषफलPOWER(a, b) - घातांकSELECT ROUND(marks, 1) FROM student;
SELECT MOD(roll_no, 2) FROM student;
UPPER(name) / LOWER(name) - ऊपरी/निचला केसLENGTH(name) - लंबाईSUBSTRING(name, 1, 3) - भाग निकालनाSELECT UPPER(name) FROM student;
SELECT LENGTH(name) FROM student;
अद्यतन (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 में सामान्यतः प्राथमिक कुंजी का उपयोग किया जाता है।
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 का उपयोग करके नाम को बड़े अक्षरों में दिखाया जा सकता है। परीक्षा में इन फ़ंक्शनों के नाम, उनके कार्य और छोटे उदाहरण पूछे जाते हैं। अतः प्रत्येक फ़ंक्शन के साथ एक-एक उदाहरण स्मरण रखना लाभदायक है। स्ट्रिंग फ़ंक्शन स्ट्रिंग पर और गणितीय फ़ंक्शन संख्याओं पर कार्य करते हैं, इसलिए उपयुक्त प्रकार का फ़ंक्शन चुनना आवश्यक है। इन फ़ंक्शनों के अभ्यास से डेटा का प्रदर्शन अधिक सार्थक और प्रस्तुतीकरण-योग्य बनता है, क्योंकि हम डेटा को उसके मूल रूप में नहीं, बल्कि आवश्यक रूपांतरण के बाद दिखा सकते हैं।
परिणामों की संख्या सीमित करने के लिए:
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 के समुचित संयोजन से किसी भी प्रकार का डेटा विश्लेषण संभव है।
SQL क्वेरी का सामान्य क्रम:
SELECT स्तंभ
FROM तालिका
WHERE शर्त
GROUP BY स्तंभ
HAVING समूह शर्त
ORDER BY स्तंभ;
| फ़ंक्शन | कार्य | उदाहरण |
|---|---|---|
| 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 | पैटर्न से भिन्न |
% शून्य या अधिक वर्ण, _ केवल एक वर्ण को दर्शाता है।MySQL क्वेरीज़ डेटाबेस से अर्थपूर्ण सूचना प्राप्त करने का माध्यम हैं। SELECT के साथ WHERE, ORDER BY, GROUP BY, HAVING और एकत्रीकरण फ़ंक्शनों का संयोजन डेटा विश्लेषण की शक्तिशाली क्षमता प्रदान करता है। LIKE से पैटर्न मिलान और DISTINCT से अद्वितीय मान प्राप्त होते हैं। इन क्वेरी का अभ्यास करने से छात्र किसी भी डेटाबेस से आवश्यक सूचना निकालने में सक्षम होंगे। अगले अध्याय (प्रैक्टिकल) में हम पाइथन और MySQL के व्यावहारिक प्रश्नों और प्रोग्रामों का अध्ययन करेंगे। याद रखें, SQL का सर्वोत्तम अभ्यास वास्तविक डेटाबेस पर क्वेरी चलाकर ही होता है, इसलिए अधिक से अधिक क्वेरी लिखें और उनके परिणाम जाँचें।