अपने सिर को चारों ओर लपेटने के लिए डेटाबेस मुश्किल हो सकते हैं। हालांकि, वे प्रोग्रामिंग को फुल-स्टैक करने और डेटा स्टोर करने वाली बैक-एंड सेवाओं के निर्माण के लिए आवश्यक हैं।
इस पोस्ट में, मैं SQL, डेटाबेस, और रिलेशनल डेटाबेस मैनेजमेंट सिस्टम्स को रहस्योद्घाटन करूँगा। मैं विजार्डिंग वर्ल्ड की कुछ उपमाओं का भी उपयोग करूंगा, जिनमें स्वयं हैरी पॉटर और हॉगवर्ट्स में उनके द्वारा ली जाने वाली कुछ कक्षाएं शामिल हैं।
मुख्य शर्तों में जाने से पहले, आइए परिभाषित करें कि डेटाबेस स्वयं क्या है:
ए डेटाबेस कंप्यूटर में संग्रहीत डेटा का एक संरचित सेट है, विशेष रूप से एक जो विभिन्न तरीकों से सुलभ है। यह अनिवार्य रूप से कंप्यूटर पर डेटा का एक संगठित सेट है, जिसे कंप्यूटर सिस्टम से इलेक्ट्रॉनिक रूप से एक्सेस किया जा सकता है।
मुख्य शर्तें
नीचे कुछ प्रमुख शब्द दिए गए हैं जिनसे हम शुरुआत करेंगे:
- आरडीएमएस: संबंधपरक डेटाबेस प्रबंधन प्रणाली। डेटाबेस के लिए यह ढांचा MySQL का आधार है।
- एसक्यूएल: संरचित क्वेरी भाषा।
- टेबल्स: डेटाबेस ऑब्जेक्ट जो डेटा ले जाते हैं। तालिका नाम का एक उदाहरण "छात्र", या "शिक्षक", या "पाठ्यक्रम" है।
- फ़ील्ड: तालिका के मानों को फ़ील्ड के रूप में जाना जाता है। छात्रों के लिए उदाहरण फ़ील्ड "प्रथम नाम", "अंतिम नाम" और "GPA" होंगे।
- रिकॉर्ड/पंक्ति: तालिका में एक व्यक्तिगत प्रविष्टि।
डेटाबेस में शिक्षक और पाठ्यक्रम जोड़ने के बाद, हमारे पास छात्रों, शिक्षकों और पाठ्यक्रमों के लिए टेबल हो सकते हैं।
जैसे-जैसे हम गाइड में आगे बढ़ेंगे हम केवल विद्यार्थी . का उपयोग करेंगे उदाहरण यहाँ एक संदर्भ के रूप में। यदि आप हॉगवर्ट्स में एक सॉफ्टवेयर इंजीनियर के रूप में काम पर रखने के लिए भाग्यशाली थे, तो आपका डेटाबेस इनमें से कुछ आदेशों का अच्छा उपयोग कर सकता है:D
SQL स्टेटमेंट
सिंटैक्स
अर्धविराम एक SQL कथन को दूसरे से अलग करने का मानक तरीका है। यह एक ही कॉल में एकाधिक SQL कथन चलाने की अनुमति देता है। इस गाइड में, हमारे पास प्रत्येक कथन के अंत में एक अर्धविराम होगा।
सबसे महत्वपूर्ण SQL कमांड
बनाएं :एक नई SQL तालिका बनाता है।
उदाहरण के लिए, यदि हम हॉगवर्ट्स स्कूल के लिए छात्र डेटाबेस बना रहे थे, तो हम CREATE का उपयोग करेंगे। बनाने के लिए "छात्र" नामक एक तालिका।
- वाक्यविन्यास
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
- उदाहरण
CREATE TABLE Students
(first_name VARCHAR(255),
last_name VARCHAR(255),
login VARCHAR(255),
age INTEGER,
gpa REAL,
house VARCHAR(255));
छोड़ें :तालिका हटाता है। इस आदेश का उपयोग करते समय बहुत सावधान रहें क्योंकि इससे तालिका का सारा डेटा मिट जाएगा!
यदि हम संपूर्ण छात्र डेटाबेस को हटाना चाहते हैं तो हम DROP . का उपयोग करेंगे उस क्रिया को करने के लिए।
- वाक्यविन्यास
DROP TABLE table_name;
- उदाहरण
DROP TABLE Students;
सम्मिलित करें :तालिका में डेटा की नई पंक्तियाँ जोड़ता है।
हम INSERT . का उपयोग करेंगे हॉगवर्ट्स में नामांकन करते समय नए छात्रों को जोड़ने के लिए।
- वाक्यविन्यास
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- उदाहरण
INSERT
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES
('Harry', 'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2', 15, 4.5, 'Gryffindor'),
('Ron', 'Weasley','weasley7', 15, 3.7, 'Gryffindor'),
('Draco', 'Malfoy', 'malfoy999', 15, 4.0, 'Slytherin'),
('Cedric', 'Diggory','diggory123', 15, 4.0, 'Hufflepuff');
चुनें :डेटाबेस में डेटा लाने के लिए उपयोग किया जाता है जिसे तालिका प्रारूप में लौटाया जाता है।
यदि हम उन सभी छात्रों के नाम प्राप्त करना चाहते हैं जो ग्रिफ़िंडर हाउस में हैं, तो हम चयन का उपयोग करेंगे। आज्ञा। नीचे दिया गया उदाहरण डेटाबेस में प्रत्येक छात्र के प्रथम नाम और अंतिम नाम के लिए छात्र तालिका से पूछताछ करता है, जो हमारे लिए ऊपर वर्णित केवल पांच पंक्तियां है।
- वाक्यविन्यास
SELECT column1, column2, ...
FROM table_name;
- उदाहरण
SELECT first_name, last_name FROM Students;
प्रथम_नाम | last_name |
---|---|
हैरी | कुम्हार |
हर्मियोनी | ग्रेंजर |
रॉन | वीसली |
ड्रेको | मालफॉय |
सेड्रिक | डिगॉरी |
वैकल्पिक रूप से, यदि हम तालिका के सभी क्षेत्रों का चयन करना चाहते हैं, तो हमारा आदेश "*" सिंटैक्स का उपयोग करेगा, जो सभी क्षेत्रों का चयन करने का प्रतीक है:
SELECT * FROM Students;
प्रथम_नाम | last_name | लॉगिन | उम्र | <थ>जीपीए <थ>घर||
---|---|---|---|---|---|
हैरी | कुम्हार | लड़का जो रहता था | 15 | 4 | ग्राईफिंडर |
हर्मियोनी | ग्रेंजर | granger2 | 15 | 4.5 | ग्राईफिंडर |
रॉन | वीसली | वीसली7 | 15 | 3.7 | ग्राईफिंडर |
ड्रेको | मालफॉय | malfoy999 | 15 | 4 | स्लीथेरिन |
सेड्रिक | डिगॉरी | diggory123 | 15 | 4 | हफलपफ |
क्लॉज
एक खंड एक SQL कथन का तार्किक हिस्सा है, और यह (सिद्धांत रूप में) एक वैकल्पिक क्षेत्र है।
उपरोक्त कथन में, हमने केवल छात्र डेटाबेस के सभी क्षेत्रों को वापस कर दिया है। हमने लौटाए जा रहे मानों पर कोई शर्त निर्दिष्ट नहीं की।
क्या होगा अगर हम सभी छात्रों से नहीं, बल्कि केवल उन लोगों से पूछना चाहते हैं जिनका घर ग्रिफिंडर है? उन छात्रों से पूछताछ करने के बारे में जिनका पहला नाम "एच" से शुरू होता है, या हफलपफ और स्लेथरिन में छात्र? इन अधिक जटिल मामलों को SQL क्लॉज द्वारा हल किया जाता है।
नीचे सबसे सामान्य क्लॉज़ का एक सिंहावलोकन है, लेकिन SQL भाषा में कई और क्लॉज़ हैं। यदि आप कुछ और जानकारी चाहते हैं तो यहां एक अच्छा सामान्य अवलोकन दिया गया है।
खंडों के उदाहरण
कहां: डेटाबेस से डेटा प्राप्त करते समय एक शर्त बताने के लिए उपयोग किया जाता है। चयन के साथ उदाहरण पर वापस जाने पर, हमें WHERE . का उपयोग करना होगा घर को ग्रिफिंडर के रूप में निर्दिष्ट करने के लिए।
- वाक्यविन्यास
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- उदाहरण
SELECT * FROM Students
WHERE house='Gryffindor';
प्रथम_नाम | last_name | लॉगिन | उम्र | <थ>जीपीए <थ>घर||
---|---|---|---|---|---|
हैरी | कुम्हार | लड़का जो रहता था | 15 | 4 | ग्राईफिंडर |
हर्मियोनी | ग्रेंजर | granger2 | 15 | 4.5 | ग्राईफिंडर |
रॉन | वीसली | वीसली7 | 15 | 3.7 | ग्राईफिंडर |
और SQL स्टेटमेंट में कई क्लॉज़ को संयोजित करने के लिए उपयोग किया जाता है, जहाँ AND द्वारा अलग की गई सभी शर्तें सत्य होती हैं। हम ग्रिफ़िंडर छात्रों को प्राप्त करने के लिए AND का उपयोग करेंगे जिनके पास 3.8 GPA से ऊपर है।
- वाक्यविन्यास
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
- उदाहरण
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
प्रथम_नाम | last_name | लॉगिन | उम्र | <थ>जीपीए <थ>घर||
---|---|---|---|---|---|
हैरी | कुम्हार | लड़का जो रहता था | 15 | 4 | ग्राईफिंडर |
हर्मियोनी | ग्रेंजर | granger2 | 15 | 4.5 | ग्राईफिंडर |
या :AND के समान, लेकिन केवल वही डेटा लौटाता है जिसमें OR द्वारा अलग की गई शर्तों में से केवल एक ही सत्य है। अगर हम हफलपफ और स्लीथेरिन में छात्रों को पुनः प्राप्त करना चाहते हैं, लेकिन दोनों नहीं, तो हम OR कमांड का उपयोग करेंगे।
- वाक्यविन्यास
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
- उदाहरण
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
प्रथम_नाम | last_name | लॉगिन | उम्र | <थ>जीपीए <थ>घर||
---|---|---|---|---|---|
ड्रेको | मालफॉय | malfoy999 | 15 | 4 | स्लीथेरिन |
सेड्रिक | डिगॉरी | diggory123 | 15 | 4 | हफलपफ |
पसंद करें: एक विशिष्ट पैटर्न की खोज के लिए WHERE के साथ प्रयोग किया जाता है। यदि हम केवल "H" से शुरू होने वाले नाम वाले जादूगरों/चुड़ैलों का पहला और अंतिम नाम चाहते हैं, तो हम लाइक कमांड का उपयोग कर सकते हैं।
- वाक्यविन्यास
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
- उदाहरण
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
प्रथम_नाम | last_name |
---|---|
हैरी | कुम्हार |
हर्मियोनी | ग्रेंजर |
गणना करें: किसी तालिका में कॉलम (या कॉलम) की गिनती खोजने के लिए प्रयुक्त होता है।
- वाक्यविन्यास
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
- उदाहरण
SELECT COUNT(first_name) FROM Students;
COUNT(first_name) |
---|
5 |
दो अन्य कमांड जो समान सिंटैक्स का उपयोग करते हैं, वे हैं AVG और SUM। AVG सभी मानों के औसत की गणना करेगा, और योग सभी मानों के योग की गणना करेगा।
सीमा चुनें: केवल एक निर्दिष्ट राशि के लिए प्रतिक्रियाओं को काटने के लिए उपयोग किया जाता है। जिस तरह से शीर्ष प्रतिक्रियाओं को चुना जाता है, वह कालानुक्रमिक रूप से डेटाबेस में पहले डालने के क्रम में होता है।
- वाक्यविन्यास
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
- उदाहरण
SELECT * FROM Students LIMIT 3;
प्रथम_नाम | last_name | लॉगिन | उम्र | <थ>जीपीए <थ>घर||
---|---|---|---|---|---|
हैरी | कुम्हार | लड़का जो रहता था | 15 | 4 | ग्राईफिंडर |
हर्मियोनी | ग्रेंजर | granger2 | 15 | 4.5 | ग्राईफिंडर |
रॉन | वीसली | वीसली7 | 15 | 3.7 | ग्राईफिंडर |
अन्य उपयोगी कमांड
आदेश द्वारा: परिणामों को आरोही या अवरोही क्रम में क्रमबद्ध करता है।
- वाक्यविन्यास
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- उदाहरण
SELECT * FROM Students ORDER BY first_name;
प्रथम_नाम | last_name | लॉगिन | उम्र | <थ>जीपीए <थ>घर||
---|---|---|---|---|---|
सेड्रिक | डिगॉरी | diggory123 | 15 | 4 | हफलपफ |
ड्रेको | मालफॉय | malfoy999 | 15 | 4 | स्लीथेरिन |
हैरी | कुम्हार | लड़का जो रहता था | 15 | 4 | ग्राईफिंडर |
हर्मियोनी | ग्रेंजर | granger2 | 15 | 4.5 | ग्राईफिंडर |
रॉन | वीसली | वीसली7 | 15 | 3.7 | ग्राईफिंडर |
समूह द्वारा: समूह श्रेणियां जिनके मान समान हैं पंक्तियों में। यदि आप प्रत्येक घर में छात्रों की संख्या जानना चाहते हैं (उदाहरण के लिए ग्रिफिंडर में 3), तो आप ग्रुप बाय कमांड का उपयोग कर सकते हैं।
- वाक्यविन्यास
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
- उदाहरण
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(first_name) | <थ>घर|
---|---|
3 | ग्राईफिंडर |
1 | हफलपफ |
1 | स्लीथेरिन |
अंत में, यहाँ एक DB Fiddle है जो उपरोक्त सभी आदेशों को क्रिया में दिखाती है!
सामान्यीकृत बनाम Denormalized डेटाबेस
डेटाबेस डिज़ाइन करते समय, आप दो मुख्य डिज़ाइन पैटर्न का अनुसरण कर सकते हैं, प्रत्येक अपने स्वयं के ट्रेडऑफ़ के साथ।
सामान्यीकृत: अनावश्यकता को कम करने, . के लिए अनुकूलित करता है पढ़ने के समय के लिए नहीं।
मान लें कि हमारे पास एक पाठ्यक्रम तालिका है जिसमें उस पाठ्यक्रम को पढ़ाने वाले शिक्षक के लिए एक शिक्षक आईडी है। हमारे पास शिक्षक का डेटाबेस भी है जिसमें शिक्षक का नाम है।
जब हम किसी विशेष पाठ्यक्रम को पढ़ाने वाले शिक्षकों के नाम प्राप्त करना चाहते हैं, तो हमें पाठ्यक्रम और शिक्षक तालिका दोनों से पूछताछ करनी होगी क्योंकि पाठ्यक्रम तालिका में शिक्षक का नाम नहीं है (कुशल लेकिन निरर्थक)।
असामान्यीकृत: पढ़ने के समय . के लिए अनुकूलित करता है , अतिरेक को कम करने के लिए नहीं।
मान लें कि हमारे पास एक पाठ्यक्रम तालिका है जिसमें शिक्षक आईडी और शिक्षक का नाम है। हमारे पास शिक्षक का डेटाबेस है जिसमें शिक्षक का नाम भी है। जब हम पाठ्यक्रम में शिक्षकों के नाम प्राप्त करना चाहते हैं, तो हम केवल पाठ्यक्रम तालिका (अनावश्यक लेकिन कुशल) का उपयोग कर सकते हैं।
डेटा अखंडता
उपयोगकर्ताओं के लिए यह महत्वपूर्ण है कि वे जिस डेटा के साथ इंटरैक्ट करते हैं वह सुरक्षित, सही और समझदार हो। उदाहरण यह सुनिश्चित कर रहे हैं कि आयु एक ऋणात्मक संख्या नहीं है, या यह कि किन्हीं दो विद्यार्थियों के पास समान जानकारी नहीं है। हम इसे डेटा अखंडता कहते हैं।
डेटा अखंडता कई रूप लेती है और इसे चार श्रेणियों में विभाजित किया जा सकता है:
- इकाई की सत्यनिष्ठा :तालिका में कोई डुप्लिकेट पंक्तियाँ मौजूद नहीं हैं। उदाहरण के लिए, हम डेटाबेस में रॉन वीस्ली को दो बार सम्मिलित नहीं कर सकते।
- डोमेन अखंडता :सही मानों को लागू करने के लिए सम्मिलित किए जा सकने वाले मानों के प्रकार को प्रतिबंधित करना। उदाहरण के लिए, एक सदन केवल ग्रिफिंडर, रेवेनक्लाव, स्लीथेरिन या हफलपफ हो सकता है।
- संदर्भात्मक सत्यनिष्ठा :अन्य रिकॉर्ड द्वारा उपयोग किए जाने वाले रिकॉर्ड्स को हटाया नहीं जा सकता है। यदि शिक्षक वर्तमान में कोई पाठ्यक्रम पढ़ा रहे हैं तो उन्हें हटाया नहीं जा सकता।
- उपयोगकर्ता-निर्धारित सत्यनिष्ठा: एक "अन्य" श्रेणी जिसमें व्यवसाय से संबंधित तर्क और डेटाबेस के नियम शामिल हैं।
सामान्य SQL डेटाबेस
- ओरेकल :बहुत स्थिर और परिपक्व लेकिन महंगा हो सकता है
- MySQL :सेट अप करने के लिए हल्का और तेज़ लेकिन Oracle जितना परिपक्व नहीं
- PostgreSQL :कुछ उपयोग के मामलों के लिए अच्छा है लेकिन सुपर फास्ट नहीं है
संसाधन
- SWEPrep - साक्षात्कार प्रश्न सीधे आपके इनबॉक्स में
- freeCodeCamp का SQL और डेटाबेस
- क्लीन कोड
- प्रभावी जावा
- Oracle दस्तावेज़ीकरण
- MySQL दस्तावेज़ीकरण
- PostgreSQL दस्तावेज़ीकरण
अप-टू-डेट रहना
- रेडिट थ्रेड्स :डेटाबेस, SQL और नई तकनीकों पर बढ़िया सूत्र
- हैकर समाचार: तकनीक उद्योग में नवीनतम विकासों के बारे में जानकारी रखने के लिए वास्तव में बहुत अच्छा संसाधन
- कोडपेन: अच्छे SQL अभ्यासों की खोज के लिए एक उत्कृष्ट संसाधन।