SQL (Structured Query Language) एक मानक क्वेरी भाषा है जिसका उपयोग रिलेशनल डेटाबेस में डेटा को परिभाषित, प्रबंधित और पुनः प्राप्त करने के लिए किया जाता है। SQL की सहायता से हम तालिकाएँ बना सकते हैं, उनमें डेटा जोड़ सकते हैं, डेटा को सुधार सकते हैं, हटा सकते हैं और उसे विभिन्न शर्तों के अनुसार खोज सकते हैं। SQL को 'सीक्वल' (Sequel) के रूप में भी उच्चारित किया जाता है।
SQL के आदेश (commands) मुख्य रूप से तीन श्रेणियों में विभाजित हैं:
CREATE, ALTER, DROP, TRUNCATE।INSERT, UPDATE, DELETE, SELECT।GRANT, REVOKE।इस अध्याय में हम मुख्य रूप से DDL और DML आदेशों का विस्तार से अध्ययन करेंगे।
CREATE TABLE आदेश से नई तालिका बनाई जाती है। इसमें स्तंभों के नाम, उनके डेटा प्रकार और बाधाएँ (constraints) निर्दिष्ट की जाती हैं।
CREATE TABLE student (
roll_no INTEGER PRIMARY KEY,
name VARCHAR(30),
class CHAR(3),
city VARCHAR(20),
marks DECIMAL(5, 2)
);
| डेटा प्रकार | विवरण | उदाहरण |
|---|---|---|
INTEGER / INT |
पूर्ण संख्याएँ | 101 |
VARCHAR(n) |
अधिकतम n वर्णों की स्ट्रिंग | 'अनु' |
CHAR(n) |
निश्चित n वर्णों की स्ट्रिंग | 'XII' |
DECIMAL(p, s) |
दशमलव संख्या | 85.50 |
DATE |
दिनांक | '2024-01-15' |
FLOAT |
फ्लोटिंग बिंदु संख्या | 9.99 |
INSERT आदेश से तालिका में नई पंक्ति (रिकॉर्ड) जोड़ी जाती है।
INSERT INTO student VALUES (101, 'अनु', 'XII', 'दिल्ली', 92.50);
INSERT INTO student (roll_no, name, class) VALUES (102, 'रवि', 'XII');
पहला उदाहरण सभी स्तंभों के मान देता है, जबकि दूसरे में केवल निर्दिष्ट स्तंभों के मान दिए गए हैं (शेष NULL रहते हैं)।
SELECT आदेश डेटा देखने के लिए सबसे महत्वपूर्ण आदेश है।
SELECT * FROM student;
* का अर्थ है सभी स्तंभ।
SELECT name, city FROM student;
SELECT DISTINCT city FROM student;
SELECT * FROM student WHERE class = 'XII';
SELECT name FROM student WHERE marks >= 90;
=, <>, >, <, >=, <=AND, OR, NOTIN: WHERE city IN ('दिल्ली', 'मुंबई')BETWEEN: WHERE marks BETWEEN 80 AND 95LIKE: WHERE name LIKE 'अ%'IS NULL: WHERE city IS NULLUPDATE आदेश से मौजूदा रिकॉर्ड के मान बदले जाते हैं:
UPDATE student SET marks = 95 WHERE roll_no = 101;
UPDATE student SET city = 'पुणे' WHERE name = 'रवि';
सावधानी: यदि WHERE न दिया जाए तो तालिका की सभी पंक्तियाँ अपडेट हो जाती हैं।
DELETE आदेश से रिकॉर्ड हटाए जाते हैं:
DELETE FROM student WHERE roll_no = 103;
DELETE FROM student; -- सभी रिकॉर्ड हट जाते हैं
रिकॉर्ड्स को सॉर्ट करके प्रदर्शित करने के लिए:
SELECT * FROM student ORDER BY marks DESC;
SELECT * FROM student ORDER BY name ASC;
डिफ़ॉल्ट क्रम आरोही (ASC) होता है; अवरोही के लिए DESC लिखें।
| फलन | कार्य |
|---|---|
COUNT(*) |
पंक्तियों की संख्या |
SUM(column) |
स्तंभ का योग |
AVG(column) |
स्तंभ का औसत |
MIN(column) |
न्यूनतम मान |
MAX(column) |
अधिकतम मान |
SELECT COUNT(*) FROM student;
SELECT SUM(marks) FROM student;
SELECT AVG(marks) FROM student WHERE class = 'XII';
SELECT MIN(marks), MAX(marks) FROM student;
रिकॉर्ड्स को समूहों में बाँटकर गणना करने के लिए:
SELECT city, COUNT(*) FROM student GROUP BY city;
SELECT class, AVG(marks) FROM student GROUP BY class;
HAVING समूहों पर शर्त लगाता है (जबकि WHERE पंक्तियों पर):
SELECT city, COUNT(*) FROM student GROUP BY city HAVING COUNT(*) > 1;
तालिका की संरचना में बदलाव:
ALTER TABLE student ADD COLUMN phone VARCHAR(12);
ALTER TABLE student DROP COLUMN phone;
तालिका को पूर्ण रूप से हटाता है (संरचना सहित):
DROP TABLE student;
तालिका के सभी रिकॉर्ड हटाता है परंतु संरचना बनाए रखता है:
TRUNCATE TABLE student;
import sqlite3
conn = sqlite3.connect("school.db")
cur = conn.cursor()
cur.execute("SELECT name, marks FROM student WHERE marks > 85")
rows = cur.fetchall()
for row in rows:
print(row)
conn.commit()
conn.close()
SELECT क्वेरी में अंकगणितीय ऑपरेटरों (+, -, *, /, %) से स्तंभों के मानों पर गणना की जा सकती है। ध्यान दें कि ये गणनाएँ केवल प्रदर्शन के लिए होती हैं, डेटाबेस में मूल मान नहीं बदलते:
SELECT name, marks, marks + 5 AS adjusted_marks FROM student;
SELECT name, marks FROM student WHERE marks >= 40 AND marks <= 90;
SELECT name FROM student WHERE city = 'दिल्ली' OR city = 'मुंबई';
SELECT name FROM student WHERE NOT city = 'पुणे';
तार्किक ऑपरेटर AND, OR, NOT शर्तों को जोड़ने के लिए उपयोग होते हैं। AND में दोनों शर्तें सत्य होनी चाहिए, OR में कम से कम एक शर्त सत्य होनी चाहिए, और NOT शर्त को उल्टा कर देता है।
SQL में NULL का अर्थ है कि किसी स्तंभ में मान अनुपस्थित है। यह 0 या खाली स्ट्रिंग से भिन्न है। NULL वाले मानों की तुलना सामान्य ऑपरेटरों (=, >) से नहीं की जा सकती:
SELECT * FROM student WHERE city IS NULL;
SELECT * FROM student WHERE city IS NOT NULL;
SELECT name FROM student WHERE marks IS NOT NULL;
NULL की पहचान के लिए IS NULL और IS NOT NULL का उपयोग किया जाता है। COUNT(column) NULL मानों को नहीं गिनता, जबकि COUNT(*) सभी पंक्तियों को गिनता है - यह अंतर वस्तुनिष्ठ प्रश्नों में बार-बार पूछा जाता है।
मान लीजिए एक तालिका marks_table है जिसमें स्तंभ हैं: roll_no, name, subject, marks। इस पर विभिन्न क्वेरी:
-- सभी रिकॉर्ड देखना
SELECT * FROM marks_table;
-- 90 से अधिक अंक वाले विद्यार्थी
SELECT name, marks FROM marks_table WHERE marks > 90;
-- विषय के अनुसार औसत अंक
SELECT subject, AVG(marks) FROM marks_table GROUP BY subject;
-- अंकों के अवरोही क्रम में सूची
SELECT name, marks FROM marks_table ORDER BY marks DESC;
-- कुल विद्यार्थियों की संख्या
SELECT COUNT(*) FROM marks_table;
-- अधिकतम और न्यूनतम अंक
SELECT MAX(marks), MIN(marks) FROM marks_table;
इस प्रकार के अभ्यास प्रश्न परीक्षा में पूछे जाने वाले कोड-लेखन प्रश्नों की तैयारी कराते हैं। ध्यान रखें कि GROUP BY के साथ आने वाले स्तंभ या तो समूहीकृत होने चाहिए या संबद्ध फलनों में उपयोग होने चाहिए।
ALTER और अन्य DDL आदेशों के व्यावहारिक उपयोग को निम्नलिखित उदाहरणों से समझा जा सकता है:
-- तालिका में नया स्तंभ जोड़ना
ALTER TABLE student ADD COLUMN phone VARCHAR(12);
-- स्तंभ का डेटा प्रकार बदलना
ALTER TABLE student MODIFY COLUMN name VARCHAR(50);
-- स्तंभ हटाना
ALTER TABLE student DROP COLUMN phone;
-- तालिका का नाम बदलना
ALTER TABLE student RENAME TO student_info;
-- तालिका की संरचना देखना
DESCRIBE student;
ध्यान दें कि ALTER TABLE की संरचना DBMS के अनुसार थोड़ी भिन्न हो सकती है। MySQL में MODIFY COLUMN, ADD COLUMN और DROP COLUMN जैसे विकल्प उपयोग होते हैं। ALTER तालिका की संरचना को बदलता है जबकि UPDATE तालिका के डेटा को बदलता है - यह अंतर परीक्षा में बार-बार पूछा जाता है। DROP TABLE पूरी तालिका (संरचना और डेटा) को हटाता है, जबकि TRUNCATE केवल डेटा हटाकर संरचना बनाए रखता है। इन DDL आदेशों के बीच के भेद को स्पष्ट रूप से समझना आवश्यक है।
| श्रेणी | आदेश | उपयोग |
|---|---|---|
| DDL | CREATE, ALTER, DROP, TRUNCATE | संरचना परिभाषा |
| DML | INSERT, UPDATE, DELETE, SELECT | डेटा संचालन |
| DCL | GRANT, REVOKE | अधिकार नियंत्रण |
| कीवर्ड | कार्य |
|---|---|
WHERE |
पंक्तियों पर शर्त |
ORDER BY |
सॉर्ट करना |
GROUP BY |
समूह बनाना |
HAVING |
समूहों पर शर्त |
DISTINCT |
डुप्लिकेट हटाना |
BETWEEN |
सीमा जाँच |
LIKE |
पैटर्न मिलान |
IN |
सूची जाँच |
% किसी भी संख्या के वर्णों के लिए, _ केवल एक वर्ण के लिए। इन्हें उलटने से गलत परिणाम आता है।SELECT * FROM table WHERE condition; का पूर्ण वाक्य लिखना सीखें - कोड लिखने के प्रश्नों में यही आता है।SQL रिलेशनल डेटाबेस की भाषा है, जो तालिकाओं के निर्माण, डेटा प्रबंधन और डेटा पुनः प्राप्ति को सरल बनाती है। DDL आदेश संरचना को परिभाषित करते हैं, जबकि DML आदेश डेटा का संचालन करते हैं। SELECT क्वेरी WHERE, ORDER BY, GROUP BY, HAVING जैसे कीवर्ड के साथ शक्तिशाली परिणाम प्रदान करती है। COUNT, SUM, AVG, MIN, MAX जैसे संबद्ध फलन विश्लेषण में सहायक हैं। सही सिंटैक्स और शर्तों की समझ परीक्षा में उच्च अंक दिलाती है। SQL का अभ्यास डेटाबेस अवधारणाओं के साथ मिलकर कंप्यूटर विज्ञान के पाठ्यक्रम में महत्वपूर्ण भूमिका निभाता है।