Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
MySQL + SQL · Lesson 114

Class 12 से B.Tech तक SQL Programs

इस SQL Practical का उपयोग कैसे करें

यह lesson Class 12 RDBMS के पूरे command sequence को एक executable MySQL practical में बदलता है। अलग-अलग statements रटने के बजाय database और sample tables एक बार बनाएँ, प्रत्येक numbered query का result पहले अनुमान लगाएँ, query चलाएँ और दिए गए verified output से तुलना करें।

💡 एक समान dataset

Employee से जुड़ी सभी queries उन्हीं छह rows पर चलती हैं। इससे result जाँचना आसान होता है और अलग-अलग notes में मिलने वाले विरोधाभासी values से बचाव होता है।

Queries 1-8: Database, Table और Sample Data

1-4. Database देखना, बनाना और उपयोग करना

SHOW DATABASES;
CREATE DATABASE IF NOT EXISTS school_practical;
USE school_practical;
SHOW TABLES;

SHOW DATABASES उपलब्ध databases दिखाता है। USE अगले commands के लिए active database चुनता है।

5. Employee table बनाना

CREATE TABLE employee (
    ecode  INT PRIMARY KEY,
    ename  VARCHAR(30) NOT NULL,
    gender CHAR(1),
    grade  CHAR(2),
    gross  DECIMAL(10,2)
);

ecode प्रत्येक row की अलग पहचान है। Money के लिए DECIMAL(10,2) exact value रखता है।

6-7. Single और multiple rows insert करना

INSERT INTO employee (ecode, ename, gender, grade, gross)
VALUES (1001, 'Ravi', 'M', 'E4', 50000);

INSERT INTO employee VALUES
(1002, 'Akash', 'M', 'A1', 35000),
(1004, 'Neela', 'F', 'B2', 38965),
(1005, 'Sunny', 'M', 'A2', 30000),
(1006, 'Ruby',  'F', 'A1', 45000),
(1009, 'Neema', 'F', 'A2', 52000);

8. NULL value insert करना

CREATE TABLE student_marks (
    roll_no INT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    marks INT NULL
);

INSERT INTO student_marks VALUES
(1, 'Arun', NULL),
(2, 'Ravi', 56),
(4, 'Sanjay', NULL);

NULL quotes के बिना लिखा जाता है। इसका अर्थ value अज्ञात या उपलब्ध नहीं है; यह zero अथवा empty string नहीं है।

Queries 9-15: SELECT, WHERE और DISTINCT

-- 9. पूरी table
SELECT * FROM employee;

-- 10. चुने हुए columns
SELECT ecode, ename FROM employee;

-- 11. Name, grade और salary
SELECT ename, grade, gross FROM employee;

-- 12. केवल female employees
SELECT * FROM employee WHERE gender = 'F';

-- 13. 48000 से अधिक salary
SELECT ecode, ename, gross
FROM employee
WHERE gross > 48000;

-- 14. Repeated gender values
SELECT gender FROM employee;

-- 15. केवल unique gender values
SELECT DISTINCT gender FROM employee;
महत्त्वपूर्ण results:
Female employees → Neela, Ruby, Neema
Gross > 48000 → Ravi, Neema
DISTINCT gender → M, F

Queries 16-22: Alias, BETWEEN, IN, LIKE और NULL

-- 16. Table structure
DESCRIBE employee;

-- 17. Column aliases
SELECT ecode AS employee_code,
       ename AS employee_name,
       gross AS monthly_salary
FROM employee;

-- 18. दोनों limits सहित range
SELECT ecode, ename, grade, gross
FROM employee
WHERE gross BETWEEN 40000 AND 50000;

-- 19. List में मिलने वाले grades
SELECT * FROM employee
WHERE grade IN ('A1', 'A2');

-- 20. List से बाहर के grades
SELECT * FROM employee
WHERE grade NOT IN ('A1', 'A2');
Results:
BETWEEN → Ravi, Ruby
IN → Akash, Sunny, Ruby, Neema
NOT IN → Ravi, Neela

21. LIKE से pattern matching

SELECT ename FROM employee WHERE ename LIKE 'R%';
SELECT ename FROM employee WHERE ename LIKE '_e%';
SELECT ename FROM employee WHERE ename LIKE '%y';
Results:
R% → Ravi, Ruby
_e% → Neela, Neema
%y → Sunny, Ruby

% zero या अधिक characters से match करता है; _ केवल एक character से।

22. NULL खोजना

SELECT name
FROM student_marks
WHERE marks IS NULL;
Result:
Arun
Sanjay

marks = NULL न लिखें। NULL के लिए IS NULL या IS NOT NULL प्रयोग होता है।

Queries 23-24: Result को क्रम में लगाना

-- 23. Name का ascending order
SELECT ecode, ename, gross
FROM employee
ORDER BY ename ASC;

-- 24. पहले filter, फिर descending order
SELECT ename, gross
FROM employee
WHERE gross > 40000
ORDER BY ename DESC;
Query 24 का सही order:
Ruby | 45000.00
Ravi | 50000.00
Neema | 52000.00

Queries 25-29: सही UPDATE Queries

⚠️ Safety rule

UPDATE से पहले उसी WHERE condition के साथ SELECT चलाएँ। WHERE न होने पर सभी rows बदल जाती हैं।

-- 25. एक employee की salary
UPDATE employee
SET gross = 55000
WHERE ecode = 1009;

-- 26. दो columns एक साथ
UPDATE employee
SET gross = 58000, grade = 'B2'
WHERE ecode = 1001;

-- 27. सभी की salary में ठीक 1000 जोड़ना
UPDATE employee
SET gross = gross + 1000;

-- 28. A1 और A2 grades की salary double
UPDATE employee
SET gross = gross * 2
WHERE grade IN ('A1', 'A2');

-- 29. दो सही conditions के आधार पर update
UPDATE employee
SET grade = 'A2'
WHERE ecode = 1004
  AND ename = 'Neela';

Neela employee का name है, इसलिए condition ename = 'Neela' होगी; grade = 'Neela' गलत है।

Queries 30-32: DELETE, TRUNCATE और DROP

-- 30. केवल A1 grade की rows delete
DELETE FROM employee WHERE grade = 'A1';

-- 31. सभी rows हटें, table structure रहे
DELETE FROM employee;
TRUNCATE TABLE employee;

-- 32. Data और structure दोनों हटें
DROP TABLE employee;
Commandक्या हटता है?StructureWHERE
DELETEचुनी हुई या सभी rowsरहता हैAllowed
TRUNCATEसभी rowsरहता हैनहीं
DROPपूरा tableहटता हैनहीं

Queries 33-39: ALTER TABLE Commands

-- 33. नया column
ALTER TABLE employee ADD address VARCHAR(100);

-- 34. Column rename और type definition
ALTER TABLE employee
CHANGE gross salary DECIMAL(10,2);

-- 35. Text column rename और size बढ़ाना
ALTER TABLE employee
CHANGE ename employee_name VARCHAR(40);

-- 36. केवल datatype बदलना
ALTER TABLE employee MODIFY grade VARCHAR(5);

-- 37. Column delete
ALTER TABLE employee DROP COLUMN address;

-- 38. Primary key add और remove
ALTER TABLE employee ADD PRIMARY KEY (ecode);
ALTER TABLE employee DROP PRIMARY KEY;

39. Named foreign key

CREATE TABLE department (
    dept_id INT PRIMARY KEY,
    dept_name VARCHAR(40) NOT NULL
);

ALTER TABLE employee ADD dept_id INT;
ALTER TABLE employee
ADD CONSTRAINT fk_employee_department
FOREIGN KEY (dept_id) REFERENCES department(dept_id);

ALTER TABLE employee
DROP FOREIGN KEY fk_employee_department;

MySQL में foreign key हटाने के लिए constraint name आवश्यक है। केवल DROP FOREIGN KEY अधूरा command है।

Queries 40-44: Integrity Constraints

-- 40. NOT NULL और DEFAULT
CREATE TABLE learner (
    student_id INT NOT NULL,
    name VARCHAR(40) NOT NULL,
    score INT DEFAULT 80
);
INSERT INTO learner (student_id, name) VALUES (10, 'Ravi');

-- 41. UNIQUE
CREATE TABLE customer (
    sid INT UNIQUE,
    last_name VARCHAR(30),
    first_name VARCHAR(30)
);

-- 42. CHECK
CREATE TABLE valid_customer (
    sid INT CHECK (sid > 0),
    last_name VARCHAR(30),
    first_name VARCHAR(30)
);

-- 43. Single-column primary key
CREATE TABLE admission (
    sid INT PRIMARY KEY,
    student_name VARCHAR(40) NOT NULL
);

-- 44. Composite primary key
CREATE TABLE branch_student (
    branch_id INT NOT NULL,
    sid INT NOT NULL,
    student_name VARCHAR(40),
    PRIMARY KEY (branch_id, sid)
);

Composite key में दोनों columns का जोड़ा unique होता है। एक table में एक PRIMARY KEY constraint होती है, पर उसमें एक से अधिक columns हो सकते हैं।

Queries 45-54: Aggregate Functions और GROUP BY

CREATE TABLE empl (
    empno INT PRIMARY KEY,
    ename VARCHAR(30), job VARCHAR(20),
    sal DECIMAL(10,2), deptno INT
);

INSERT INTO empl VALUES
(8369, 'Smith', 'Clerk',    2985, 10),
(8499, 'Anya',  'Salesman', 9870, 20),
(8566, 'Amir',  'Salesman', 8760, 30),
(8698, 'Bina',  'Manager',  5643, 20),
(8912, 'Sur',   NULL,       3000, 10);

45-49. Group functions

SELECT AVG(sal) AS average_salary FROM empl;
SELECT COUNT(*) AS total_employees FROM empl;
SELECT COUNT(job) AS employees_with_job FROM empl;
SELECT MAX(sal) AS highest, MIN(sal) AS lowest FROM empl;
SELECT SUM(sal) AS total_salary FROM empl;
Verified results:
AVG = 6051.60
COUNT(*) = 5
COUNT(job) = 4
MAX = 9870.00, MIN = 2985.00
SUM = 30258.00

50-54. GROUP BY और HAVING

SELECT job, COUNT(*) AS employee_count
FROM empl GROUP BY job;

SELECT deptno, SUM(sal) AS department_salary
FROM empl GROUP BY deptno;

SELECT deptno, AVG(sal) AS average_salary
FROM empl GROUP BY deptno;

SELECT deptno, AVG(sal) AS average_salary
FROM empl
GROUP BY deptno
HAVING AVG(sal) > 5000;

SELECT deptno, COUNT(*) AS employees, SUM(sal) AS total_salary
FROM empl
GROUP BY deptno
ORDER BY total_salary DESC;

WHERE grouping से पहले individual rows filter करता है। HAVING बनने के बाद groups filter करता है।

सामान्य गलत Queries का सुधार

गलत patternसही formकारण
1000 increment के लिए +100gross + 1000Calculation question से मिलनी चाहिए।
WHERE से पहले semicolonपूरे UPDATE के अंत में एक semicolonSemicolon statement समाप्त करता है।
grade = 'Neela'ename = 'Neela'Neela employee name है।
Marks query में FROM employeeFROM student_marksMarks column student table में है।
DROP FOREIGN KEY;DROP FOREIGN KEY fk_name;Constraint name आवश्यक है।
marks = NULLmarks IS NULLNULL equality से test नहीं होता।

अभ्यास और Viva

🏋️ Practical assignment

aps_lab नाम का नया database बनाएँ। दोनों sample tables अपने छह records से बनाएँ, Queries 9-54 को नए data पर लिखें और पाँच outputs तथा एक जानबूझकर उत्पन्न constraint error के screenshots रखें।

  1. 35000 और 50000 के बीच न आने वाली salaries दिखाएँ।
  2. Table बदले बिना दो highest salaries निकालें।
  3. Grade-wise employee count निकालें और कम-से-कम दो employees वाले grades ही दिखाएँ।
  4. ऐसा email column जोड़ें जिसमें duplicate value न आ सके।
  5. Foreign key invalid department number को क्यों रोकती है?
  6. COUNT(*), COUNT(job) और COUNT(DISTINCT job) का अंतर बताएँ।

त्वरित पुनरावृत्ति

  • DDL structure बनाता या बदलता है: CREATE, ALTER, TRUNCATE और DROP।
  • DML rows बदलता है: INSERT, UPDATE और DELETE; SELECT data पढ़ता है।
  • WHERE rows filter करता है; HAVING groups filter करता है।
  • BETWEEN दोनों limits शामिल करता है, IN list match करता है और LIKE में % तथा _ wildcards हैं।
  • NULL को IS NULL या IS NOT NULL से जाँचते हैं।
  • UPDATE और DELETE से पहले वही condition SELECT में जाँचें।

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

Class 12 practical के लिए कौन-से SQL commands महत्त्वपूर्ण हैं?
CREATE DATABASE, USE, CREATE TABLE, INSERT, SELECT, WHERE, DISTINCT, aliases, BETWEEN, IN, LIKE, IS NULL, ORDER BY, UPDATE, DELETE, ALTER TABLE, constraints, aggregate functions और GROUP BY अवश्य पढ़ें।
DELETE, TRUNCATE और DROP में क्या अंतर है?
DELETE चुनी हुई या सभी rows हटाता है और WHERE लगा सकता है। TRUNCATE सभी rows हटाकर table structure बचाता है। DROP table का data और structure दोनों हटा देता है।
UPDATE और DELETE से पहले SELECT क्यों चलाना चाहिए?
WHERE clause छूटने या गलत होने पर सभी rows बदल अथवा delete हो सकती हैं। पहले वही condition SELECT में चलाकर records जाँचें और सम्भव हो तो transaction में command चलाएँ।
क्या BETWEEN दोनों boundary values को शामिल करता है?
हाँ। SQL में BETWEEN inclusive होता है; इसलिए salary BETWEEN 40000 AND 50000 में 40000 और 50000 दोनों आते हैं।
COUNT(*) और COUNT(column) में क्या अंतर है?
COUNT(*) table की सभी rows गिनता है। COUNT(column) केवल वे rows गिनता है जिनमें उस column का value NULL नहीं है।
क्या एक table में एक से अधिक primary keys हो सकती हैं?
एक table में केवल एक PRIMARY KEY constraint होती है, लेकिन उसमें अनेक columns हो सकते हैं। इसे composite primary key कहते हैं।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.