डेटाबेस और SQL: व्याख्या सहित अभ्यास प्रश्न

संकेतों और व्याख्याओं के साथ मुफ़्त डेटाबेस और SQL बहुविकल्पीय अभ्यास प्रश्न, तीन स्तरों पर: मुख्य शब्द और तथ्य, अवधारणाओं का अनुप्रयोग, केस और विश्लेषण।

मुफ़्त अभ्यास प्रश्नआसान

कौन-सा कंस्ट्रेंट सुनिश्चित करता है कि कोई कॉलम कभी ख़ाली (NULL) न छोड़ा जाए?

अगला प्रश्न →
डेटाबेस और SQL का मुफ़्त अभ्यास करेंअभी डेटाबेस और SQL का अभ्यास करेंहर दिन 5 मुफ़्त प्रश्न। कार्ड की ज़रूरत नहीं।

आप क्या अभ्यास करेंगे

  1. आसानमुख्य शब्द और तथ्य
  2. मध्यमअवधारणाओं का अनुप्रयोग
  3. कठिनकेस और विश्लेषण

डेटाबेस और SQL शुरू से सीखें

1संबंधपरक डेटाबेस क्या है

संबंधपरक डेटाबेस डेटा को तालिकाओं में संचित करता है। तालिका स्प्रेडशीट जैसी दिखती है: हर पंक्ति एक रिकॉर्ड है, हर स्तंभ एक गुण।

एक दुकान में id, name और city स्तंभों वाली तालिका customers और id, customer_id और total स्तंभों वाली तालिका orders हो सकती है।

प्राथमिक कुंजी वह स्तंभ, या स्तंभों का समूह, है जो हर पंक्ति को अद्वितीय रूप से पहचानता है। वह कभी दोहराई नहीं जा सकती और कभी खाली नहीं हो सकती। यहाँ वह हर तालिका का id है।

विदेशी कुंजी वह स्तंभ है जो किसी अन्य तालिका की प्राथमिक कुंजी की ओर संकेत करता है। orders में, customer_id बताता है कि ऑर्डर किस ग्राहक ने दिया।

तालिकाएँ इसी तरह जुड़ी होती हैं: एक ग्राहक के कई ऑर्डर हो सकते हैं, पर हर ऑर्डर एक ही ग्राहक का होता है। यह एक-से-अनेक संबंध है।

SQL (संरचित क्वेरी भाषा) वह भाषा है जिससे आप तालिकाएँ बनाते हैं, डेटा बदलते हैं और उसके बारे में प्रश्न पूछते हैं।

स्व-जाँच प्राथमिक कुंजी क्या है?
  1. एक इंडेक्स जो खोज को तेज़ बनाता है
  2. एक स्तंभ जो किसी अन्य तालिका की पंक्ति की ओर संकेत करता है
  3. एक स्तंभ या स्तंभों का समूह जो हर पंक्ति को अद्वितीय रूप से पहचानता है
  4. हर तालिका का पहला स्तंभ

उत्तर: एक स्तंभ या स्तंभों का समूह जो हर पंक्ति को अद्वितीय रूप से पहचानता है. प्राथमिक कुंजी अद्वितीय होती है और कभी NULL नहीं होती, इसलिए वह ठीक एक पंक्ति को चुनती है। जो स्तंभ किसी अन्य तालिका की ओर संकेत करता है, वह विदेशी कुंजी है।

2SELECT से डेटा पढ़ना

अधिकांश प्रश्न SELECT कथन के बारे में होते हैं। यह खंडों से बना होता है, जो हमेशा इसी क्रम में लिखे जाते हैं:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …
  • SELECT आपके चाहे गए स्तंभों की सूची देता है। DISTINCT दोहराई गई पंक्तियाँ हटाता है।
  • FROM तालिका, या जोड़ी गई तालिकाओं का नाम देता है।
  • WHERE केवल वे पंक्तियाँ रखता है जो किसी शर्त को पूरा करती हैं, उदाहरण के लिए WHERE total > 20।
  • GROUP BY समान मान वाली पंक्तियों को एक समूह में रखता है, ताकि आप प्रति समूह गिन या जोड़ सकें।
  • HAVING केवल वे समूह रखता है जो किसी शर्त को पूरा करते हैं। यह समुच्चयों (aggregates) का उपयोग कर सकता है, जो WHERE नहीं कर सकता।
  • ORDER BY परिणाम को क्रमबद्ध करता है, डिफ़ॉल्ट रूप से आरोही; सबसे अधिक पहले के लिए DESC जोड़िए।

समुच्चय फलन कई पंक्तियों को एक मान में सारांशित करते हैं: COUNT, SUM, AVG, MIN और MAX।

डेटाबेस खंडों को उस क्रम में नहीं चलाता जिसमें आप उन्हें लिखते हैं। वह पहले FROM चलाता है, फिर WHERE, GROUP BY, HAVING, SELECT और अंत में ORDER BY।

अन्य कथन डेटा बदलते हैं: INSERT पंक्तियाँ जोड़ता है, UPDATE पंक्तियाँ बदलता है और DELETE पंक्तियाँ हटाता है। CREATE, ALTER और DROP स्वयं तालिकाओं को बदलते हैं।

स्व-जाँच आप केवल वे ग्राहक चाहते हैं जिनके 5 से अधिक ऑर्डर हों। COUNT(*) > 5 पर कौन-सा खंड छानता है?
  1. DISTINCT
  2. HAVING
  3. ORDER BY
  4. WHERE

उत्तर: HAVING. गिनती तभी अस्तित्व में आती है जब पंक्तियाँ समूहित हो जाती हैं, और HAVING समूहों को छानता है। WHERE समूहन से पहले चलता है, इसलिए वह COUNT जैसे समुच्चय का उपयोग नहीं कर सकता।

3जॉइन, सामान्यीकरण और ट्रांज़ैक्शन

जॉइन किसी शर्त का उपयोग करके दो तालिकाओं की पंक्तियों को जोड़ता है, आमतौर पर विदेशी कुंजी = प्राथमिक कुंजी:

FROM customers c JOIN orders o ON o.customer_id = c.id
  • INNER JOIN (या JOIN) केवल वे पंक्तियाँ रखता है जिनका दोनों तालिकाओं में मेल हो।
  • LEFT JOIN बाईं तालिका की हर पंक्ति रखता है। जहाँ मेल नहीं होता, वहाँ दाईं तालिका के स्तंभ NULL होते हैं।
  • NULL का अर्थ है कि मान अनुपस्थित या अज्ञात है। उसे IS NULL से जाँचिए, = NULL से कभी नहीं।

सामान्यीकरण (Normalisation) तालिकाओं को इस तरह बाँटता है कि हर तथ्य एक बार संचित हो। इससे एक ही तथ्य को कई स्थानों पर अद्यतन करने से बचा जाता है।

  • 1NF: हर कक्ष में एक परमाणु मान होता है, कोई दोहराए गए समूह नहीं।
  • 2NF: 1NF, और हर गैर-कुंजी स्तंभ पूरी कुंजी पर निर्भर करता है, संयुक्त कुंजी के केवल एक भाग पर नहीं।
  • 3NF: 2NF, और कोई गैर-कुंजी स्तंभ किसी अन्य गैर-कुंजी स्तंभ पर निर्भर नहीं करता।

ट्रांज़ैक्शन कथनों को एक इकाई में समूहित करता है। COMMIT उसे स्थायी बनाता है और ROLLBACK उसे पूर्ववत करता है। ट्रांज़ैक्शन ACID का पालन करते हैं: परमाणुकता (सब या कुछ नहीं), संगति, पृथक्करण और स्थायित्व।

स्व-जाँच एक ग्राहक ने कोई ऑर्डर नहीं दिया है। customers LEFT JOIN orders में उस ग्राहक का क्या होता है?
  1. क्वेरी त्रुटि के साथ विफल हो जाती है
  2. ग्राहक एक बार दिखता है, ऑर्डर स्तंभों में NULL के साथ
  3. ग्राहक तालिका में हर ऑर्डर के लिए एक बार दिखता है
  4. ग्राहक परिणाम से बाहर रह जाता है

उत्तर: ग्राहक एक बार दिखता है, ऑर्डर स्तंभों में NULL के साथ. LEFT JOIN बाईं तालिका की हर पंक्ति रखता है और दाईं ओर की अनुपस्थिति को NULL से भरता है। ग्राहक को बाहर छोड़ना वह है जो INNER JOIN करता है।

4विधि चरण-दर-चरण

क्वेरी लिखने के लिए, या यह जानने के लिए कि दी गई क्वेरी क्या लौटाती है:

  1. वे तालिकाएँ खोजिए जिनमें डेटा है, और वे कुंजियों से कैसे जुड़ी हैं।
  2. जॉइन के साथ FROM लिखिए। जब बिना मेल की पंक्तियाँ रहनी हों तब LEFT JOIN चुनिए।
  3. एकल पंक्तियों की शर्तों के लिए WHERE जोड़िए।
  4. यदि प्रश्न में “प्रति” या “हर एक के लिए” हो, तो GROUP BY और समुच्चय जोड़िए।
  5. समुच्चय की शर्तों के लिए HAVING जोड़िए, फिर क्रम मायने रखता हो तो ORDER BY।
  6. परिणाम को छोटे उदाहरण पर जाँचिए: हर खंड के बाद पंक्तियों की सूची बनाइए, उस क्रम में जिसमें डेटाबेस उन्हें चलाता है।

सिद्धांत के प्रश्न के लिए, पहले अवधारणा का नाम बताइए (कुंजी, जॉइन प्रकार, सामान्य रूप, ACID गुण), फिर वह विकल्प चुनिए जो उसकी परिभाषा से मेल खाता हो।

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

हर चरण का अनुसरण करें। अगला चरण खोलने से पहले उसका अनुमान लगाने का प्रयास करें।

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

तालिका customers में पंक्तियाँ (1, Ana), (2, Ben) और (3, Cas) हैं। तालिका orders में पंक्तियाँ (id, customer_id) = (10, 1), (11, 1), (12, 2) और (13, 1) हैं। यह क्वेरी क्या लौटाती है? SELECT c.name, COUNT(o.id) FROM customers c LEFT JOIN orders o ON o.customer_id = c.id GROUP BY c.name

1

FROM और जॉइन चलाइए

हर ग्राहक को उन ऑर्डरों के साथ जोड़ा जाता है जिनमें उसका id है। Ana के ऑर्डर 10, 11 और 13 मेल खाते हैं। Ben का ऑर्डर 12 मेल खाता है।

Cas के कोई ऑर्डर नहीं हैं। क्योंकि यह LEFT JOIN है, Cas परिणाम में रहता है, o.id के लिए NULL के साथ।

2

जुड़ी हुई पंक्तियों की सूची बनाइए

  • Ana, 10
  • Ana, 11
  • Ana, 13
  • Ben, 12
  • Cas, NULL

यह 5 पंक्तियाँ हैं।

3

नाम से समूहित कीजिए

GROUP BY c.name तीन समूह बनाता है: Ana की 3 पंक्तियों के साथ, Ben की 1 पंक्ति के साथ और Cas की 1 पंक्ति के साथ।

4

प्रति समूह गिनिए

COUNT(o.id) केवल उन मानों को गिनता है जो NULL नहीं हैं। Ana को 3 मिलता है और Ben को 1।

Cas की एक पंक्ति है, पर उसका o.id NULL है, इसलिए Cas को 0 मिलता है।

5

उत्तर जाँचें

Ana, Ben और Cas के कुल मिलाकर 3 + 1 + 0 = 4 ऑर्डर हैं, जो orders की पंक्तियों की संख्या के बराबर है। इसके बजाय COUNT(*) लेने पर Cas को गलत रूप से 1 मिलता, क्योंकि COUNT(*) पंक्ति को ही गिनता है।

उत्तर

Ana 3, Ben 1, Cas 0।

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

  • WHERE में समुच्चय का उपयोग करना। COUNT, SUM या AVG की शर्तें HAVING में आती हैं।
  • = NULL लिखना। NULL से कोई भी तुलना अज्ञात होती है; IS NULL या IS NOT NULL का उपयोग कीजिए।
  • जब बिना मेल की पंक्तियाँ रहनी हों तब INNER JOIN का उपयोग करना। LEFT JOIN का उपयोग कीजिए।
  • जॉइन शर्त भूल जाना। ON के बिना, हर पंक्ति हर पंक्ति के साथ जोड़ी जाती है (क्रॉस जॉइन)।
  • ऐसा स्तंभ चुनना जो न GROUP BY में हो और न किसी समुच्चय के भीतर।
  • DELETE (पंक्तियाँ हटाता है) और DROP TABLE (पूरी तालिका हटाता है) को गड़बड़ा देना।
  • WHERE के बिना UPDATE या DELETE चलाना। यह तालिका की हर पंक्ति को बदल देता है।
स्व-जाँच एक तालिका में 10 पंक्तियाँ हैं, और स्तंभ col हर पंक्ति में NULL है। SELECT COUNT(col) क्या लौटाता है?
  1. 0
  2. 10
  3. 1
  4. NULL

उत्तर: 0. COUNT(col) केवल उन मानों को गिनता है जो NULL नहीं हैं, इसलिए वह 0 लौटाता है। COUNT(*) पंक्तियाँ गिनता है और 10 लौटाता।

7परीक्षा प्रश्न कैसे दिखते हैं

  • आसान: मुख्य शब्द और तथ्य। SELECT, WHERE, ORDER BY या DELETE क्या करते हैं, प्राथमिक और विदेशी कुंजियाँ, NULL का क्या अर्थ है।
  • मध्यम: अवधारणाओं का अनुप्रयोग। किसी कार्य के लिए सही क्वेरी, WHERE बनाम HAVING, आंतरिक बनाम बाह्य जॉइन, सामान्य रूप, ACID।
  • कठिन: मामले और विश्लेषण। उप-क्वेरियाँ, पृथक्करण स्तर और उनकी विसंगतियाँ, BCNF, विंडो फलन, इंडेक्स और क्वेरी प्रदर्शन, SQL इंजेक्शन।

जब क्वेरी दी गई हो, तो उसे FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY के क्रम में कुछ पंक्तियों पर चलाकर देखिए। अधिकांश जाल तीन पंक्तियों के भीतर दिख जाते हैं।

ऐप में इसे चरण-दर-चरण सीखेंऐप में इसे चरण-दर-चरण सीखें

उदाहरण प्रश्न

उदाहरण 1आसान

UNION दो SELECT क्वेरी के परिणामों के साथ क्या करता है?

  1. Aउन्हें किसी की पर अगल-बगल जोड़ता है
  2. Bकेवल वे पंक्तियाँ रखता है जो दोनों में हैं
  3. Cउन्हें एक परिणाम में मिलाता है और डुप्लिकेट पंक्तियाँ हटाता है
  4. Dकेवल वे पंक्तियाँ रखता है जो पहली क्वेरी में हैं पर दूसरी में नहीं
संकेत दिखाएँ
  1. दोनों क्वेरी में समान संख्या के संगत कॉलम होने चाहिए।
  2. दो गलत उत्तर अब काट दिए गए हैं। बचे हुए दो में से एक सही है।
उत्तर और व्याख्या दिखाएँ

यह उत्तर क्यों है

UNION दोनों क्वेरी की पंक्तियों को एक के नीचे एक रखता है और डुप्लिकेट हटाता है; UNION ALL डुप्लिकेट रखता है।

उत्तर

C · उन्हें एक परिणाम में मिलाता है और डुप्लिकेट पंक्तियाँ हटाता है
उदाहरण 2मध्यम

जब WHERE क्लॉज़ किसी पंक्ति से मेल नहीं खाता, तो SELECT SUM(amount) FROM orders क्या लौटाता है?

  1. Aएक त्रुटि
  2. B0
  3. CNULL
  4. Dएक ख़ाली स्ट्रिंग
संकेत दिखाएँ
  1. यहाँ SUM, COUNT से भिन्न है।
  2. दो गलत उत्तर अब काट दिए गए हैं। बचे हुए दो में से एक सही है।
उत्तर और व्याख्या दिखाएँ

यह उत्तर क्यों है

SUM, AVG, MIN और MAX ख़ाली समुच्चय पर NULL लौटाते हैं, जबकि COUNT 0 लौटाता है; COALESCE(SUM(amount), 0) इसके बजाय 0 देता है।

उत्तर

C · NULL
उदाहरण 3कठिन

SELECT name, dept, AVG(salary) OVER (PARTITION BY dept) FROM emp क्या लौटाता है?

  1. Aकेवल वे कर्मचारी जो अपने विभाग के औसत से अधिक कमाते हैं
  2. Bहर कर्मचारी पंक्ति, उसके विभाग के औसत salary के साथ
  3. Cएक त्रुटि क्योंकि name, GROUP BY में नहीं है
  4. Dप्रति विभाग एक पंक्ति, उसके औसत salary के साथ
संकेत दिखाएँ
  1. विंडो फ़ंक्शन पंक्तियों को संक्षिप्त नहीं करते।
  2. दो गलत उत्तर अब काट दिए गए हैं। बचे हुए दो में से एक सही है।
उत्तर और व्याख्या दिखाएँ

यह उत्तर क्यों है

GROUP BY के विपरीत, विंडो फ़ंक्शन हर इनपुट पंक्ति रखता है और उसके पार्टिशन, यहाँ विभाग, पर गणना किया गया मान जोड़ता है।

उत्तर

B · हर कर्मचारी पंक्ति, उसके विभाग के औसत salary के साथ

प्रश्न और उत्तर

डेटाबेस और SQL क्या है?

एक दुकान में id, name और city स्तंभों वाली तालिका customers और id, customer_id और total स्तंभों वाली तालिका orders हो सकती है।

तालिकाएँ इसी तरह जुड़ी होती हैं: एक ग्राहक के कई ऑर्डर हो सकते हैं, पर हर ऑर्डर एक ही ग्राहक का होता है। यह एक-से-अनेक संबंध है।

डेटाबेस और SQL को चरण-दर-चरण कैसे सीखें?
  1. संबंधपरक डेटाबेस क्या है
  2. SELECT से डेटा पढ़ना
  3. जॉइन, सामान्यीकरण और ट्रांज़ैक्शन
  4. विधि चरण-दर-चरण
  5. एक हल किया गया उदाहरण
  6. सामान्य गलतियाँ
  7. परीक्षा प्रश्न कैसे दिखते हैं
डेटाबेस और SQL के अभ्यास में क्या शामिल है?
  • आसान: मुख्य शब्द और तथ्य
  • मध्यम: अवधारणाओं का अनुप्रयोग
  • कठिन: केस और विश्लेषण

हर प्रश्न में चार विकल्प होते हैं, और केवल एक सही होता है। अटक गए? पहले एक छोटा संकेत खोलें, और पूरी व्याख्या तभी जब ज़रूरत हो।

अभ्यास कैसे काम करता है

  • हर प्रश्न में चार विकल्प होते हैं, और केवल एक सही होता है।
  • अटक गए? पहले एक छोटा संकेत खोलें, और पूरी व्याख्या तभी जब ज़रूरत हो।
  • आपकी प्रगति, गलतियाँ और सहेजे गए प्रश्न रखे जाते हैं, ताकि आप परीक्षा से पहले दोहरा सकें।

इस विषय वाले कोर्स

कंप्यूटर विज्ञान में और विषय

प्रिंट करने योग्य वर्कशीट

डेटाबेस और SQL का मुफ़्त अभ्यास करेंअभी डेटाबेस और SQL का अभ्यास करेंहर दिन 5 मुफ़्त प्रश्न। कार्ड की ज़रूरत नहीं।