MySQL क्वेरीज़ में हम SELECT कथन की उन्नत विशेषताओं का अध्ययन करेंगे। SELECT SQL का सबसे महत्वपूर्ण कथन है जिससे डेटा को विभिन्न प्रकार से खोजा, फ़िल्टर किया, क्रमबद्ध किया और समूहीकृत किया जाता है। इस अध्याय में हम WHERE, ORDER BY, GROUP BY, HAVING, LIKE, BETWEEN, IN, एग्रीगेट फलन, JOIN और सबक्वेरी के बारे में विस्तार से सीखेंगे। ये सभी वास्तविक दुनिया के डेटाबेस प्रश्नों को हल करने में आवश्यक होते हैं।
WHERE क्लॉज़ पंक्तियों को शर्त के आधार पर फ़िल्टर करता है। इसमें तुलना संचालकों का उपयोग होता है:
SELECT * FROM छात्र WHERE अंक > 80;
SELECT * FROM छात्र WHERE अंक >= 80 AND अंक <= 90;
SELECT * FROM छात्र WHERE शहर = 'दिल्ली' OR शहर = 'मुंबई';
SELECT * FROM छात्र WHERE शहर != 'दिल्ली';
तुलना संचालक: =, >, <, >=, <=, <> (या !=)।
तार्किक संचालक: AND, OR, NOT।
LIKE — पैटर्न मिलान के लिए, % (कोई भी वर्ण समूह) और _ (एक वर्ण) के साथ।BETWEEN — मानों की सीमा की जांच।IN — मानों की सूची में सदस्यता की जांच।SELECT * FROM छात्र WHERE नाम LIKE 'रा%';
SELECT * FROM छात्र WHERE नाम LIKE '%ता';
SELECT * FROM छात्र WHERE नाम LIKE '_म';
SELECT * FROM छात्र WHERE अंक BETWEEN 80 AND 90;
SELECT * FROM छात्र WHERE शहर IN ('दिल्ली', 'मुंबई');
'रा%' — 'रा' से प्रारंभ होने वाले नाम।'%ता' — 'ता' पर समाप्त होने वाले नाम।'_म' — दो अक्षर, दूसरा अक्षर 'म'।परिणामों को किसी स्तंभ के आधार पर क्रमबद्ध करने के लिए ORDER BY का उपयोग होता है:
SELECT * FROM छात्र ORDER BY अंक;
SELECT * FROM छात्र ORDER BY अंक DESC;
SELECT * FROM छात्र ORDER BY शहर, अंक DESC;
DESC से अवरोही क्रम।एग्रीगेट फलन पंक्तियों के समूह पर कार्य करके एकल मान लौटाते हैं:
SELECT COUNT(*) FROM छात्र;
SELECT SUM(अंक) FROM छात्र;
SELECT AVG(अंक) FROM छात्र;
SELECT MAX(अंक) FROM छात्र;
SELECT MIN(अंक) FROM छात्र;
COUNT(*) — पंक्तियों की संख्या।SUM() — योग।AVG() — औसत।MAX() — अधिकतम।MIN() — न्यूनतम।GROUP BY पंक्तियों को समूहों में विभाजित करता है और प्रत्येक समूह पर एग्रीगेट फलन लागू होता है:
SELECT शहर, COUNT(*), AVG(अंक)
FROM छात्र
GROUP BY शहर;
SELECT शहर, AVG(अंक) AS औसत_अंक
FROM छात्र
GROUP BY शहर
HAVING AVG(अंक) > 80;
GROUP BY — स्तंभ के समान मानों को समूहित करता है।HAVING — समूहों पर शर्त लगाता है (WHERE पंक्तियों पर, HAVING समूहों पर)।AS — स्तंभ को अस्थायी नाम देता है।दो या अधिक तालिकाओं के डेटा को जोड़ने के लिए JOIN का उपयोग होता है। सामान्यतः INNER JOIN का उपयोग होता है जो केवल मेल खाने वाली पंक्तियां लौटाता है:
SELECT छात्र.नाम, परीक्षा.अंक
FROM छात्र
JOIN परीक्षा ON छात्र.रोल = परीक्षा.रोल;
SELECT s.नाम, e.विषय
FROM छात्र s
INNER JOIN परीक्षा e ON s.रोल = e.रोल;
ON — जोड़ने की शर्त।s और e का उपयोग लंबे क्वेरी को छोटा करता है।एक क्वेरी के भीतर नेस्टेड क्वेरी को सबक्वेरी कहते हैं:
SELECT नाम FROM छात्र
WHERE अंक = (SELECT MAX(अंक) FROM छात्र);
SELECT नाम FROM छात्र
WHERE शहर IN (SELECT शहर FROM छात्र GROUP BY शहर HAVING COUNT(*) > 1);
सबक्वेरी पहले चलती है और उसका परिणाम बाहरी क्वेरी में उपयोग होता है। सबक्वेरी को कोष्ठक में रखना अनिवार्य है।
MySQL में LIMIT से परिणामों की संख्या सीमित की जा सकती है:
SELECT * FROM छात्र ORDER BY अंक DESC LIMIT 3;
SELECT * FROM छात्र LIMIT 2, 3;
LIMIT 2, 3 का अर्थ है स्थिति 2 से प्रारंभ करते हुए 3 पंक्तियां। यह पृष्ठांकन (pagination) में उपयोगी होता है।
जटिल MySQL क्वेरी लिखने के लिए एक व्यवस्थित दृष्टिकोण अपनाना चाहिए। पहले यह स्पष्ट करें कि कौन से स्तंभों की आवश्यकता है, फिर किस तालिका या तालिकाओं से डेटा लेना है। यदि एक से अधिक तालिकाएं शामिल हैं, तो उन्हें जोड़ने वाले कुंजी स्तंभों की पहचान करें। इसके बाद WHERE शर्त से आवश्यक पंक्तियों को फ़िल्टर करें। यदि डेटा को समूहों में विभाजित करना है, तो GROUP BY का उपयोग करें और समूहों पर शर्त के लिए HAVING लगाएं। परिणामों को एक निश्चित क्रम में प्राप्त करने के लिए अंत में ORDER BY जोड़ें। LIMIT का उपयोग परिणामों की संख्या को सीमित करने के लिए होता है। उदाहरण के लिए, प्रत्येक शहर के उच्चतम अंक प्राप्त करने के लिए SELECT शहर, MAX(अंक) FROM छात्र GROUP BY शहर ORDER BY MAX(अंक) DESC; जैसी क्वेरी लिखी जा सकती है। इसी प्रकार सबक्वेरी का उपयोग तब करें जब एक क्वेरी का परिणाम दूसरी क्वेरी की शर्त में उपयोग हो। जटिल प्रश्नों को छोटे भागों में तोड़कर पहले प्रत्येक भाग को अलग-अलग चलाकर जांच करना एक अच्छी आदत है। इस विधि से त्रुटियों का पता आसानी से लगता है और अंतिम क्वेरी विश्वसनीय होती है। परीक्षा में इस क्रम को सही ढंग से लागू करने से प्रश्न शीघ्र और सटीक हल होते हैं।
| क्लॉज़ | कार्य |
|---|---|
WHERE |
पंक्तियों पर शर्त |
ORDER BY |
क्रमबद्धता |
GROUP BY |
समूहीकरण |
HAVING |
समूहों पर शर्त |
LIMIT |
पंक्तियों की संख्या सीमा |
| फलन | कार्य |
|---|---|
COUNT() |
पंक्तियों की संख्या |
SUM() |
योग |
AVG() |
औसत |
MAX() |
अधिकतम |
MIN() |
न्यूनतम |
| पैटर्न | अर्थ |
|---|---|
'रा%' |
'रा' से प्रारंभ |
'%ता' |
'ता' पर समाप्त |
'%म%' |
'म' कहीं भी |
'_म' |
दूसरा अक्षर 'म' |
SELECT अंक, शहर FROM छात्र GROUP BY शहर; गलत है — GROUP BY में शामिल स्तंभ ही SELECT में एग्रीगेट के साथ आ सकते हैं।HAVING का उपयोग होता है, WHERE नहीं। WHERE एग्रीगेट फलनों के साथ काम नहीं करता।% कोई भी संख्या वर्ण दर्शाता है, _ केवल एक वर्ण।DESC अनिवार्य है।ON शर्त के क्रॉस जॉइन बना देता है।COUNT(स्तंभ) NULL मानों की गणना नहीं करता, COUNT(*) सभी पंक्तियों की गणना करता है।WHERE पंक्तियों पर और HAVING समूहों पर शर्त लगाता है — यह सबसे महत्वपूर्ण अंतर है।GROUP BY का सही संयोजन याद रखें।ORDER BY हमेशा GROUP BY और HAVING के बाद लिखा जाता है।LIKE 'रा%', '%ता', '_म' के पैटर्न अभ्यास करें।BETWEEN 80 AND 90 में दोनों सीमाएं सम्मिलित होती हैं।IN बहु मानों की जांच के लिए और = ANY के समकक्ष है।इस अध्याय में हमने MySQL की उन्नत क्वेरीज़ का विस्तृत अध्ययन किया। WHERE से पंक्तियों की फ़िल्टरिंग, ORDER BY से क्रमबद्धता, एग्रीगेट फलनों से सांख्यिकीय विश्लेषण, GROUP BY और HAVING से समूहीकरण, JOIN से तालिकाओं का सम्मिलन तथा सबक्वेरी से नेस्टेड क्वेरीज़ का अभ्यास किया। WHERE और HAVING का अंतर, एग्रीगेट फलनों का सही उपयोग और JOIN की संकल्पना इस अध्याय के प्रमुख केंद्र बिंदु हैं। LIKE के पैटर्न मिलान, BETWEEN की सीमा जांच और IN की सदस्यता जांच भी डेटा खोज में सहायक होते हैं। जटिल प्रश्नों को क्लॉज़ों के सही क्रम में लिखकर विश्वसनीय परिणाम प्राप्त किए जा सकते हैं। इन क्वेरीज़ की निपुणता से विद्यार्थी जटिल डेटाबेस प्रश्नों को आसानी से हल कर सकते हैं। अगले अध्याय में हम MySQL के फलनों का अध्ययन करेंगे।