📘 CodingMarble Learn

कक्षा 12 के लिए SQL: तालिका बनाइए, प्रश्न पूछिए, तालिकाएँ जोड़िए

SQL संबंधपरक डेटाबेस बनाने और उनसे प्रश्न पूछने की भाषा है। DDL कमांड (CREATE, ALTER, DROP) ढाँचा बनाते हैं; DML कमांड (INSERT, UPDATE, DELETE) पंक्तियाँ बदलते हैं; SELECT डेटा पढ़ता है। स्तंभों को डेटा प्रकार (CHAR, VARCHAR, INT, FLOAT, DATE) और कंस्ट्रेंट (NOT NULL, UNIQUE, PRIMARY KEY, DEFAULT, FOREIGN KEY) मिलते हैं। SELECT में उपनाम (alias), DISTINCT, संबंधपरक और तार्किक ऑपरेटरों के साथ WHERE, IN, BETWEEN, LIKE, IS NULL और ORDER BY आते हैं। एग्रीगेट फ़ंक्शन (MAX, MIN, AVG, SUM, COUNT) कई पंक्तियों का सार देते हैं; GROUP BY समूह बनाता है और HAVING समूह छाँटता है। कार्टेशियन प्रोडक्ट एक तालिका की हर पंक्ति को दूसरी की हर पंक्ति से जोड़ता है; इक्वी-जॉइन केवल वे जोड़े रखता है जिनका साझा स्तंभ मेल खाए; नेचुरल जॉइन भी यही करता है पर साझा स्तंभ एक बार दिखाता है।

🎬 कदम-दर-कदम कहानी

  1. DDL तालिका बनाता है: CREATE DATABASE, USE, और हर स्तंभ के डेटा प्रकार व कंस्ट्रेंट के साथ CREATE TABLE। ALTER बदलता है; DROP मिटाता है।
  2. DML पंक्तियाँ भरता-बदलता है: INSERT जोड़ता, UPDATE सुधारता, DELETE हटाता है। WHERE तय करता है कौन-सी पंक्तियाँ छुई जाएँ।
  3. SELECT प्रश्न पूछता है। BETWEEN, IN, LIKE और IS NULL वाला WHERE केवल मेल खाती पंक्तियाँ उठाता है। ORDER BY उन्हें क्रम देता है; DISTINCT दोहराव हटाता है।
  4. एग्रीगेट कई पंक्तियों को एक संख्या में निचोड़ते हैं: COUNT, SUM, AVG, MAX, MIN। GROUP BY किसी स्तंभ से ढेर बनाता है; HAVING केवल जाँच पास करने वाले ढेर रखता है।
  5. जॉइन दो तालिकाएँ मिलाते हैं। कार्टेशियन प्रोडक्ट हर जोड़ा बनाता है। इक्वी-जॉइन केवल वे जोड़े रखता है जिनमें साझा स्तंभ मेल खाए।
  6. आपकी बारी: कोई क्वेरी चलाइए। अनुमान लगाइए कौन-सी पंक्तियाँ चमकेंगी या कौन-सी संख्या आएगी, फिर जाँचिए।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

CHAR और VARCHAR में क्या अंतर है?

CHAR(n) हमेशा n अक्षर लेता है। VARCHAR(n) केवल उतने लेता है जितने मान को चाहिए, n तक।

DELETE और DROP में क्या अंतर है?

DELETE पंक्तियाँ हटाकर ख़ाली तालिका रखता है। DROP तालिका और उसका ढाँचा पूरी तरह हटाता है।

WHERE City = NULL कुछ क्यों नहीं लौटाता?

NULL का अर्थ अज्ञात है, इसलिए = उससे मेल नहीं खा सकता। IS NULL लिखें।

WHERE COUNT(*) > 2 क्यों नहीं लिख सकते?

WHERE समूह बनने से पहले एक-एक पंक्ति पर चलता है। GROUP BY … HAVING COUNT(*) > 2 लिखें।

कार्टेशियन प्रोडक्ट इतनी पंक्तियाँ क्यों देता है?

यह हर पंक्ति को हर पंक्ति से जोड़ता है: पंक्तियाँ गुणा होती हैं। केवल मेल खाते जोड़े रखने को जॉइन शर्त जोड़ें।

इक्वी-जॉइन या नेचुरल जॉइन: कौन साझा स्तंभ एक बार दिखाता है?

नेचुरल जॉइन एक बार दिखाता है। इक्वी-जॉइन दोनों तालिकाओं से दिखाता है।

DDL और DML, और डेटा प्रकार

MySQL के आम डेटा प्रकार

SQL कीवर्ड केस-सेंसिटिव नहीं; हर स्टेटमेंट अर्धविराम (;) पर ख़त्म। टेक्स्ट और तारीख़ उद्धरण चिह्न में।

कंस्ट्रेंट (प्रतिबंध)

कंस्ट्रेंट स्तंभ पर लगा नियम है जो गलत डेटा रोकता है।

डेटाबेस और तालिकाओं के साथ काम

CREATE DATABASE school;
SHOW DATABASES;
USE school;
CREATE TABLE student (
  RollNo INT PRIMARY KEY,
  Name VARCHAR(20) NOT NULL,
  Class CHAR(3),
  City VARCHAR(15) DEFAULT 'Delhi',
  Marks INT
);
SHOW TABLES;
DESCRIBE student;      -- या DESC student;

ALTER TABLE

ALTER TABLE student ADD Phone CHAR(10);          -- स्तंभ जोड़ो
ALTER TABLE student MODIFY Name VARCHAR(30);     -- प्रकार/आकार बदलो
ALTER TABLE student DROP Phone;                  -- स्तंभ हटाओ
ALTER TABLE student ADD PRIMARY KEY (RollNo);    -- की जोड़ो (न हो तो)
ALTER TABLE student DROP PRIMARY KEY;            -- की हटाओ

DROP

DROP TABLE student; तालिका और उसका सारा डेटा हटाता है। DROP DATABASE school; पूरा डेटाबेस हटाता है।

फ़ॉरेन की उदाहरण: CREATE TABLE marks (ExamID INT PRIMARY KEY, RollNo INT, Score INT, FOREIGN KEY (RollNo) REFERENCES student(RollNo));

INSERT, UPDATE, DELETE

INSERT INTO student VALUES (1, 'Asha', '12A', 'Delhi', 92);
INSERT INTO student (RollNo, Name, Marks) VALUES (2, 'Ravi', 75);  -- City को DEFAULT, Class NULL
UPDATE student SET Marks = Marks + 5 WHERE Marks < 60;
DELETE FROM student WHERE RollNo = 2;

WHERE के बिना UPDATE और DELETE हर पंक्ति पर लगते हैं। DELETE पंक्तियाँ हटाता है पर तालिका रखता है; DROP तालिका ही हटा देता है।

SELECT: ऑपरेटर, उपनाम, DISTINCT, WHERE, IN, BETWEEN, LIKE, IS NULL

SELECT * FROM student;
SELECT Name, Marks FROM student;
SELECT Name, Marks + 5 AS NewMarks FROM student;   -- गणना + उपनाम
SELECT DISTINCT City FROM student;                  -- दोहराव नहीं

ORDER BY

SELECT * FROM student ORDER BY Marks DESC;
SELECT * FROM student ORDER BY City, Name;   -- पहले City, फिर हर शहर में Name

ASC (बढ़ता क्रम) डिफ़ॉल्ट है; DESC बड़े से छोटे।

एग्रीगेट फ़ंक्शन

एग्रीगेट (समूह) फ़ंक्शन कई पंक्तियों पर चलकर एक मान लौटाते हैं।

COUNT(*) को छोड़ सब NULL छोड़ देते हैं। Marks 92, 75, 58, NULL के साथ: COUNT(*) = 4, COUNT(Marks) = 3, SUM = 225, AVG = 75।

GROUP BY और HAVING

GROUP BY किसी स्तंभ के एक जैसे मान वाली पंक्तियों का एक समूह बनाता है, और एग्रीगेट हर समूह पर एक बार चलते हैं।

SELECT City, COUNT(*), AVG(Marks)
FROM student
GROUP BY City;

HAVING एग्रीगेट वाली शर्त से समूह छाँटता है:

SELECT City, COUNT(*) FROM student
GROUP BY City
HAVING COUNT(*) >= 2;

WHERE बनाम HAVING: WHERE समूह बनने से पहले पंक्तियाँ छाँटता है और एग्रीगेट नहीं ले सकता; HAVING समूह बनने के बाद समूह छाँटता है। क्रम: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY। SELECT के बिना-एग्रीगेट स्तंभ GROUP BY में होने चाहिए।

जॉइन: कार्टेशियन प्रोडक्ट, इक्वी-जॉइन, नेचुरल जॉइन

तालिकाएँ: STUDENT(RollNo, Name) 3 पंक्तियाँ और MARKS(RollNo, Score) 2 पंक्तियाँ।

कार्टेशियन प्रोडक्ट

SELECT * FROM student, marks;

पहली की हर पंक्ति दूसरी की हर पंक्ति से जुड़ती है: 3 × 2 = 6 पंक्तियाँ। डिग्री = 2 + 2 = 4 स्तंभ। ज़्यादातर जोड़े बेमतलब।

इक्वी-जॉइन

SELECT * FROM student S, marks M
WHERE S.RollNo = M.RollNo;

केवल वे जोड़े रखता है जिनमें साझा स्तंभ बराबर हो। RollNo दो बार आता है (S.RollNo और M.RollNo)। दोनों तालिकाओं में एक ही नाम का स्तंभ हो तो तालिका उपनाम (S, M) के साथ table.column लिखें। JOIN … ON से भी यही: SELECT * FROM student JOIN marks ON student.RollNo = marks.RollNo;

नेचुरल जॉइन

SELECT * FROM student NATURAL JOIN marks;

एक ही नाम वाले सब स्तंभों पर जोड़ता है और साझा स्तंभ केवल एक बार दिखाता है।

करके देखें: अपनी कक्षा SQL में

MySQL लगाइए या कोई ऑनलाइन SQL प्लेग्राउंड (जैसे ब्राउज़र में SQLite चलाने वाला) उपयोग कीजिए। 8 दोस्तों, उनके शहर और अंकों से STUDENT बनाइए। हर प्रश्न एक क्वेरी से: 80 से ऊपर वाले; 'S' से शुरू नाम; शहर-वार औसत अंक; 2 से ज़्यादा छात्रों वाले शहर; अंकों के घटते क्रम में सब छात्र। हर क्वेरी से पहले उत्तर का अनुमान लगाइए। फिर 3D के आख़िरी कदम से मिलाइए।

मुख्य सूत्र और परिभाषाएँ

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

1. तालिका ITEM बनाइए: ICode (4 अक्षर, प्राइमरी की), IName (25 अक्षर तक, NOT NULL), Price (दशमलव), Qty (पूर्णांक, डिफ़ॉल्ट 0)।

CREATE TABLE item (ICode CHAR(4) PRIMARY KEY, IName VARCHAR(25) NOT NULL, Price DECIMAL(8,2), Qty INT DEFAULT 0);

2. ITEM में स्तंभ Category VARCHAR(15) जोड़िए, फिर हर कीमत 10% बढ़ाइए।

ALTER TABLE item ADD Category VARCHAR(15); UPDATE item SET Price = Price * 1.10;

3. STUDENT: (1 Asha Delhi 92), (2 Ravi Pune 75), (3 Mohan NULL 58), (4 Zoya Delhi 81), (5 Kabir Jaipur 66)। SELECT Name FROM student WHERE Marks BETWEEN 60 AND 80 ORDER BY Marks DESC; का आउटपुट?

60–80 अंक वाले: Ravi 75, Kabir 66। घटते क्रम में: Ravi, Kabir।

4. वही तालिका। SELECT COUNT(*), COUNT(City), COUNT(DISTINCT City) FROM student; का आउटपुट?

COUNT(*) = 5 पंक्तियाँ। COUNT(City) = 4 (Mohan का NULL छूटा)। COUNT(DISTINCT City) = 3 (Delhi, Pune, Jaipur)।

5. वही तालिका। 'A' या 'Z' से शुरू नाम, और दूसरे अक्षर 'a' वाले नाम की क्वेरी लिखिए।

SELECT Name FROM student WHERE Name LIKE 'A%' OR Name LIKE 'Z%'; → Asha, Zoya SELECT Name FROM student WHERE Name LIKE '_a%'; → Ravi, Kabir

6. वही तालिका। SELECT City, AVG(Marks) FROM student WHERE City IS NOT NULL GROUP BY City HAVING COUNT(*) > 1; का आउटपुट?

WHERE ने Mohan हटाया। समूह: Delhi (92, 81), Pune (75), Jaipur (66)। HAVING COUNT(*) > 1 केवल Delhi रखता है। आउटपुट: Delhi 86.5।

7. STUDENT में 5 पंक्तियाँ, 5 स्तंभ; MARKS(RollNo, Subject, Score) में 4 पंक्तियाँ। SELECT * FROM student, marks; कितनी पंक्तियाँ और स्तंभ देगा?

कार्टेशियन: पंक्तियाँ 5 × 4 = 20; स्तंभ 5 + 3 = 8।

8. हर छात्र का Name, Subject और Score दिखाने वाला इक्वी-जॉइन और उसका नेचुरल जॉइन रूप लिखिए।

SELECT S.Name, M.Subject, M.Score FROM student S, marks M WHERE S.RollNo = M.RollNo; SELECT Name, Subject, Score FROM student NATURAL JOIN marks;

आम गलतियाँ

अभ्यास क्विज़

1. कौन-सा DDL कमांड है?
2. कौन-सा क्लॉज़ समूह छाँटता है?
3. LIKE '_a%' किन नामों से मेल खाता है?
4. कौन-सा फ़ंक्शन NULL सहित पंक्तियाँ गिनता है?
5. A में 4 और B में 3 पंक्तियाँ। कार्टेशियन प्रोडक्ट में:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

GROUP BY और HAVING में क्या अंतर है?

GROUP BY एक जैसे मान वाली पंक्तियों के समूह बनाता है। HAVING उन समूहों को किसी शर्त (अक्सर एग्रीगेट पर) से छाँटता है।

SQL में एग्रीगेट फ़ंक्शन कौन-से हैं?

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

इक्वी-जॉइन और नेचुरल जॉइन में क्या अंतर है?

इक्वी-जॉइन साझा स्तंभ पर = शर्त से पंक्तियाँ मिलाता है और वह स्तंभ दो बार दिखाता है। नेचुरल जॉइन एक नाम वाले स्तंभों पर अपने-आप मिलाता है और साझा स्तंभ एक बार दिखाता है।

यह कहाँ पढ़ाया जाता है

यूक्रेन11 класDatabases
सीबीएसई (भारत)कक्षा 12डेटाबेस प्रबंधन
सीबीएसई (भारत)कक्षा 12एसक्यूएल द्वारा डेटाबेस क्वेरी
सीबीएसई (भारत)कक्षा 12डेटाबेस अवधारणाएँ: आरडीबीएमएस
इंग्लैंडYear 134.10 Fundamentals of databases

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ