अब तक हमने एक डेटाबेस बनाया है, दो टेबल जोड़े हैं, और दोनों टेबल में डेटा डाला है। अब हम यह देखने जा रहे हैं कि उस डेटा को कैसे पुनः प्राप्त किया जाए। लेकिन न केवल पुनर्प्राप्त करें डेटा, लेकिन क्वेरी . के लिए इसके लिए डेटाबेस।
SQL का अर्थ है संरचित क्वेरी भाषा . यह क्वेरी है बिट जो SQL को इतना शक्तिशाली बनाता है। SQL एक ऐसी भाषा है जो आपको queries चलाने में सक्षम बनाती है अपने डेटाबेस के खिलाफ। यह आपको क्वेरी . की अनुमति देता है डेटा के लिए डेटाबेस जो आप चाहते हैं।
एसक्यूएल SELECT
कथन
जब आपके MySQL डेटाबेस को क्वेरी करने की बात आती है, तो SQL SELECT
कथन यह सब संभव बनाता है। MySQL के साथ काम करते समय यह आपका सबसे अधिक इस्तेमाल किया जाने वाला SQL स्टेटमेंट होने की संभावना है। SELECT
कथन आपको MySQL को ठीक से वर्णन करने की अनुमति देता है कि आप इसे किस डेटा को पुनः प्राप्त करना चाहते हैं।
निम्नलिखित SQL कथन पर विचार करें:
SELECT * FROM Fruit;
ये रहा परिणाम:
यह है SELECT
अपने सरलतम रूप में कथन। उपरोक्त SQL कथन
फल
. से सभी रिकॉर्ड पुनर्प्राप्त करता है टेबल।
तारांकन (*
) MySQL को सभी कॉलम वापस करने के लिए कहता है। यह हमें समय और प्रयास बचाता है। इसके बिना हमें उन सभी स्तंभों के नाम लिखने होंगे जिन्हें हम वापस करना चाहते हैं।
ऐसा कहकर, आप MySQL को केवल उन कॉलम को वापस करने के लिए कह सकते हैं जिन्हें आप वापस करना चाहते हैं। यह केवल उन स्तंभों के नामकरण के द्वारा किया जाता है जिन्हें आप वापस करना चाहते हैं। इस तरह:
SELECT FruitId, FruitName FROM Fruit;
ये रहा परिणाम:
उपरोक्त SQL कथन FruitId . का चयन करता है और फलों का नाम फलों . से कॉलम टेबल।
ऐसा करने से अव्यवस्था कम हो सकती है ताकि आप केवल उन्हीं कॉलमों को देख सकें जिनमें आपकी रुचि है। यह प्रदर्शन को भी बढ़ावा दे सकता है, क्योंकि MySQL (और आपके द्वारा उपयोग किया जाने वाला कोई भी एप्लिकेशन) को अनावश्यक डेटा वापस करने के लिए मूल्यवान संसाधनों का उपयोग करने की आवश्यकता नहीं है।
फिर से, यह क्वेरी सभी को पुनः प्राप्त करती है तालिका से रिकॉर्ड - MySQL सभी रिकॉर्ड लौटाएगा जब तक कि अन्यथा निर्दिष्ट न हो।
WHERE
खंड
आप WHERE
जोड़ सकते हैं परिणाम को केवल उन रिकॉर्ड तक सीमित करने के लिए क्लॉज, जिनमें आपकी रुचि है। इस तरह:
SELECT * FROM Fruit WHERE UnitId = 1;
परिणाम:
उपरोक्त क्वेरी
फल
. से सभी रिकॉर्ड लौटाती है तालिका जहां
UnitId
कॉलम का मान 1
. है .
उपश्रेणियां — नेस्टेड SELECT
कथन
क्या होगा अगर हम
UnitId
. नहीं जानते ? क्या होगा यदि हम केवल Piece
. के इकाई नाम के साथ उन अभिलेखों को देखना जानते हैं ?
आसान! हम नेस्टेड SELECT
. का उपयोग करने के लिए उपरोक्त उदाहरण को फिर से लिख सकते हैं कथन (अन्यथा सबक्वायरी . के रूप में जाना जाता है) ) जो किसी अन्य तालिका से पूछताछ करता है (
इकाइयाँ
टेबल)। ऐसा करने से हम वास्तविक इकाई नाम . का उपयोग कर सकेंगे (इसकी आईडी के बजाय) क्योंकि दूसरी तालिका में यह UnitName
. में है फ़ील्ड:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
परिणाम:
यहां हम एक नेस्टेड SELECT
. का उपयोग करते हैं कथन (अर्थात एक SELECT
SELECT
. के अंदर स्टेटमेंट स्टेटमेंट)
इकाइयों
. को क्वेरी करने के लिए
UnitId
. के लिए तालिका उस रिकॉर्ड का जिसमें Piece
. है इसके
UnitName
. के रूप में मूल्य। हम ऐसा इसलिए कर सकते हैं क्योंकि
Fruit.UnitId
कॉलम
Units.UnitId
. के लिए एक विदेशी कुंजी है कॉलम।
यदि आप रुचि रखते हैं तो सबक्वायरी के और उदाहरण यहां दिए गए हैं।
एसक्यूएल का उपयोग करना JOIN
इसे एक कदम आगे बढ़ाते हुए, हम अपने नेस्टेड SELECT
. को फिर से लिख सकते हैं एक INNER JOIN
में स्टेटमेंट ।
SQL में, एक JOIN
आपको डेटा साझा करने वाली कई तालिकाओं को क्वेरी करने में सक्षम बनाता है। हमारे मामले में, दोनों टेबल UnitId
. साझा करते हैं ताकि आप कह सकें कि वे इस क्षेत्र से "शामिल" हैं।
SQL में विभिन्न प्रकार के जॉइन होते हैं, हालांकि, हम मुख्य रूप से INNER JOIN
में रुचि रखते हैं। अभी के लिए।
INNER JOIN
वाक्य रचना इस प्रकार है:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
इसलिए हम अपनी सबक्वेरी को पिछले उदाहरण से निम्नलिखित में फिर से लिख सकते हैं:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
परिणाम:
हमने Fruit.*
. निर्दिष्ट किया है सिर्फ *
. के बजाय क्योंकि हम केवल
फलों
. से सभी कॉलम वापस करना चाहते थे टेबल। अगर हम *
. का इस्तेमाल करते , क्वेरी दोनों तालिकाओं के सभी कॉलम लौटा देती।
LEFT JOIN
भी देखें और RIGHT JOIN
यह देखने के लिए कि आप शामिल होने के प्रकार के आधार पर अलग-अलग डेटा कैसे प्राप्त कर सकते हैं।
सबक्वायरी बनाम JOIN
?
अब जब आपने एक ही परिणाम प्राप्त करने के दो तरीके देख लिए हैं, तो आप शायद सोच रहे हैं कि कौन सा बेहतर है?
उपश्रेणियाँ अधिक पठनीय (और शायद समझने में आसान) होती हैं, जिससे शुरुआती लोगों के लिए इसे समझना आसान हो जाता है।
हालांकि, कई SQL प्रोग्रामर JOIN
ढूंढते हैं अधिक कुशल हैं और बेहतर प्रदर्शन करते हैं। यदि आप अपने प्रश्नों या किसी एप्लिकेशन के साथ प्रदर्शन समस्याओं का सामना करते हैं, तो किसी भी सबक्वेरी को JOIN
. में बदलने का प्रयास करें s या इसके विपरीत (कुछ मामलों में एक उप-क्वेरी बेहतर प्रदर्शन कर सकती है)।
साथ ही, ऐसे मामले भी हो सकते हैं जहां एक सबक्वेरी आपका एकमात्र विकल्प है, इसलिए यह भी एक विचार है।
अधिक ऑपरेटर
हमारे अब तक के सभी प्रश्नों में एक समान चिह्न है (=
) इसे ऑपरेटर . कहा जाता है . अधिक विशेष रूप से यह एक तुलना ऑपरेटर . है क्योंकि यह एक व्यंजक की दूसरे व्यंजक से तुलना करता है।
ऐसे और भी कई ऑपरेटर हैं जिनका उपयोग आप अपने प्रश्नों में कर सकते हैं। ये परिणाम सेट को केवल उन अभिलेखों तक सीमित करने में बहुत सहायता कर सकते हैं जिनकी आपको आवश्यकता है। डेटाबेस में लाखों रिकॉर्ड होना असामान्य नहीं है। यहां तक कि अगर आपके पास केवल हजारों रिकॉर्ड हैं, तो हजारों में से एक रिकॉर्ड (या सिर्फ एक मुट्ठी भर) खोजने की कोशिश करना एक बहुत ही कठिन काम होगा यदि आपके पास ये ऑपरेटर आपके निपटान में नहीं थे।
यहाँ कुछ अधिक सामान्यतः उपयोग किए जाने वाले SQL ऑपरेटर हैं।
द >
संचालिका
आप >
. का उपयोग कर सकते हैं डेटा का चयन करने के लिए ऑपरेटर जो अधिक है दिए गए मान से अधिक।
SELECT * FROM Fruit WHERE Inventory > 10;
द <
संचालिका
आप <
. का उपयोग कर सकते हैं डेटा का चयन करने के लिए ऑपरेटर जो कम . है दिए गए मान से अधिक।
SELECT * FROM Fruit WHERE Inventory < 10;
>
संचालिका
आप <>
का उपयोग कर सकते हैं ऑपरेटर को डेटा का चयन करने के लिए जो और . दोनों से कम है किसी दिए गए मान से अधिक।
SELECT * FROM Fruit WHERE Inventory <> 10;
द >=
संचालिका
आप >=
. का उपयोग कर सकते हैं किसी दिए गए मान से अधिक या उसके बराबर डेटा का चयन करने के लिए ऑपरेटर।
SELECT * FROM Fruit WHERE Inventory >= 10;
द <=
संचालिका
आप <=
. का उपयोग कर सकते हैं किसी दिए गए मान से कम या उसके बराबर डेटा का चयन करने के लिए ऑपरेटर।
SELECT * FROM Fruit WHERE Inventory <= 10;
AND
संचालिका
आप एक AND
जोड़ सकते हैं WHERE
. के लिए ऑपरेटर अपने चयन को केवल उन अभिलेखों तक सीमित करने के लिए खंड जो दो शर्तों को पूरा करते हैं (या अधिक यदि आप अधिक AND
शामिल करते हैं ऑपरेटरों)।
यहां एक उदाहरण दिया गया है:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
OR
संचालिका
आप एक OR
का उपयोग कर सकते हैं आपके चयन को एक से अधिक मानदंडों तक विस्तृत करने के लिए ऑपरेटर। जैसा कि नाम से पता चलता है, OR
क्लॉज आपको डेटा का चयन करने देता है जहां मानदंड या तो यह है या वह। तो AND
ऑपरेटर सीमा आपका चयन और OR
ऑपरेटर विस्तृत करता है यह।
यहां एक उदाहरण दिया गया है:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
BETWEEN
संचालिका
BETWEEN
का उपयोग करें दो दिए गए मानों के बीच डेटा का चयन करने के लिए ऑपरेटर।
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NOT
संचालिका
NOT
का प्रयोग करें ऑपरेटर डेटा का चयन करने के लिए जो नहीं है दी गई शर्त के बराबर।
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');