Skip to content
DailySpark
Where Knowledge Sparks Success

SQL सीखिए, हिंदी में। Interview में आत्मविश्वास के साथ जाइए।

Notes, live practice sandbox, 10 interview questions और certificate वाला 50 सवालों का exam, सब एक ही जगह।

42+ Queries Live Sandbox Interview Prep 50-Question Exam
Limited Offer
🎁

Exam में 80%+ score करें और जीतें Certificate + Gifts!

  • ✅ पूरा course free
  • 🎓 Final Exam में 80%+ = Certificate
  • 📝 50 Questions
  • 🎁 Cheat Sheet + Gifts + बहुत कुछ

🧭 SQL बिल्कुल नहीं आता? बस ये 4 बातें समझ लीजिए!

SQL कोई कठिन programming नहीं है। सोचिए आपके पास एक Excel Sheet खुली है और आप उसे type करके बोल रहे हैं कि क्या करना है:

1. Database एक अलमारी या Folder जिसमें कई सारी अलग-अलग sheets रखी होती हैं।
2. Table Excel की एक Sheet जिसमें Columns (headings) और Rows (records) होते हैं।
3. Row vs Column Column = Header (जैसे Name, City)। Row = एक व्यक्ति का पूरा data।
4. Golden Formula SELECT (क्या देखना है) + FROM (किस sheet से) + WHERE (क्या filter है)।

⚡ Live Interactive SQL Sandbox (Browser Engine)

AlaSQL Engine Active

यहाँ आप live SQL queries चलाकर देख सकते हैं! नीचे दिए गए quick buttons पर click करें या अपना SQL code लिखकर Run Query (Ctrl + Enter) दबाएँ:

Quick Queries:
Results will appear here...

🗄️ Active Sandbox Data Tables (हमारा Sample Data)

Sheet 1: Customers 4 Rows

CustomerIDCustomerNameCityCountry
1Amit SharmaDelhiIndia
2Pooja VermaMumbaiIndia
3John MillerBerlinGermany
4Sara SmithLondonUK

Sheet 2: Employees 4 Rows

EmpIDNamedept_idSalary
101Rahul Roy1065000
102Sneha Rao2048000
103Vikas Jain1072000
104Karan MehtaNULL42000

Sheet 3: Products 4 Rows

ProductIDProductNamePriceSupplierID
1Mechanical Keyboard451
2Gaming Mouse251
3HD Monitor1802
4USB Hub153

1. SQL Basics & Queries (रोज़मर्रा की Basic Commands)

SQL SELECT & FROM

Sheet से मनपसंद columns का data देखने के लिए।

💡 सरल भाषा में: "Excel sheet खोलकर specific columns पर नज़र डालना।" अगर सभी columns देखने हैं तो * (star) लगाते हैं।
Syntax:SELECT column1, column2 FROM table_name;
Example:SELECT CustomerName, City FROM Customers;
Output:+---------------+--------+ | CustomerName | City | +---------------+--------+ | Amit Sharma | Delhi | | Pooja Verma | Mumbai | | John Miller | Berlin | | Sara Smith | London | +---------------+--------+ (4 records fetched)

SQL SELECT DISTINCT

सिर्फ़ unique (अनोखी) values देखना, duplicate हटाना।

💡 सरल भाषा में: "Excel का Remove Duplicates button।" जैसे 10 लोग India के हैं, तो India सिर्फ़ 1 बार दिखेगा।
Syntax:SELECT DISTINCT column_name FROM table_name;
Example:SELECT DISTINCT Country FROM Customers;
Output:+---------+ | Country | +---------+ | India | | Germany | | UK | +---------+ (India 2 बार था, पर सिर्फ़ 1 बार दिखा)

SQL WHERE

शर्त (condition) के आधार पर rows filter करना।

💡 सरल भाषा में: "Excel का Filter icon दबाकर कहना कि सिर्फ़ 'India' वाले लोग दिखाओ।"
Syntax:SELECT * FROM table WHERE condition;
Example:SELECT CustomerName, City FROM Customers WHERE Country = 'India';
Output:+---------------+--------+ | CustomerName | City | +---------------+--------+ | Amit Sharma | Delhi | | Pooja Verma | Mumbai | +---------------+--------+

SQL AND, OR, NOT

एक से ज़्यादा शर्तों (conditions) को एक साथ जोड़ना।

💡 सरल भाषा में: AND = दोनों बातें सच होनी चाहिए। OR = कोई एक भी चलेगी। NOT = यह वाला नहीं चाहिए।
Syntax:SELECT * FROM table WHERE cond1 AND cond2;
Example:SELECT * FROM Customers WHERE Country='India' AND City='Delhi';
Output:+----+-------------+-------+---------+ | ID | CustomerName| City | Country | +----+-------------+-------+---------+ | 1 | Amit Sharma | Delhi | India | +----+-------------+-------+---------+ (सिर्फ़ Amit दोनों शर्तों पर फ़िट बैठा)

SQL ORDER BY

Data को छोटे-से-बड़े या बड़े-से-छोटे क्रम में लगाना।

💡 सरल भाषा में: "Excel का Sort A-to-Z (ASC) या Z-to-A (DESC) button।"
Syntax:SELECT * FROM table ORDER BY column ASC|DESC;
Example:SELECT CustomerName, City FROM Customers ORDER BY CustomerName DESC;
Output:+---------------+--------+ | CustomerName | City | +---------------+--------+ | Sara Smith | London | | Pooja Verma | Mumbai | | John Miller | Berlin | | Amit Sharma | Delhi | +---------------+--------+ (Z से A alphabetical order)

SQL INSERT INTO

Sheet के अंदर बिल्कुल नई row जोड़ने के लिए।

💡 सरल भाषा में: "Register में नया page या नई line लिखकर add करना।"
Syntax:INSERT INTO table (col1, col2) VALUES (val1, val2);
Example:INSERT INTO Customers (CustomerName, City, Country) VALUES ('Rohan Das', 'Pune', 'India');
Output:Query OK, 1 row affected (0.01 sec) [नई row जुड़ गई: CustomerID 5, Rohan Das, Pune]

SQL UPDATE

पहले से मौजूद ग़लत data को ठीक करना।

💡 सरल भाषा में: "पहले से लिखे हुए नाम को eraser से मिटाकर ठीक करना।" (हमेशा WHERE लगाएँ वरना सबका data बदल जाएगा!)
Syntax:UPDATE table SET column = new_val WHERE condition;
Example:UPDATE Customers SET City = 'Noida' WHERE CustomerID = 1;
Output:Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 [Amit Sharma का city अब Delhi से बदलकर Noida हो गया]

SQL DELETE

Table से किसी पुरानी row को हमेशा के लिए हटाना।

💡 सरल भाषा में: "Excel row पर right click करके Delete Row दबाना।"
Syntax:DELETE FROM table WHERE condition;
Example:DELETE FROM Customers WHERE CustomerName = 'Amit Sharma';
Output:Query OK, 1 row affected (0.01 sec) [Amit Sharma का record table से completely delete हो गया]

SQL LIMIT / TOP

सिर्फ़ शुरुआत के गिने-चुने records देखना।

💡 सरल भाषा में: "लंबी list में से सिर्फ़ Top 2 या Top 5 बच्चे दिखाना।"
Syntax (MySQL):SELECT * FROM table LIMIT count;
Example:SELECT CustomerName, City FROM Customers LIMIT 2;
Output:+---------------+--------+ | CustomerName | City | +---------------+--------+ | Amit Sharma | Delhi | | Pooja Verma | Mumbai | +---------------+--------+ (सिर्फ़ पहले 2 records मिले)

SQL NULL Values

खाली (blank) box को check करना।

💡 सरल भाषा में: NULL का मतलब 0 नहीं, बल्कि 'खाली / Missing Data' होता है। इसे = NULL नहीं बल्कि IS NULL लिखते हैं।
Syntax:SELECT * FROM table WHERE column IS NULL;
Example:SELECT Name, dept_id FROM Employees WHERE dept_id IS NULL;
Output:+-------------+---------+ | Name | dept_id | +-------------+---------+ | Karan Mehta | NULL | +-------------+---------+ (Karan का कोई department assign नहीं था)

2. SQL Aggregate Functions (Automatic गणित और हिसाब)

SQL MIN() & MAX()

सबसे छोटा और सबसे बड़ा number ढूँढ़ना।

💡 सरल भाषा में: "दुकान में सबसे सस्ता item कौन सा है और सबसे महँगा कौन सा?"
Syntax:SELECT MIN(col), MAX(col) FROM table;
Example:SELECT MIN(Price) AS Sasta, MAX(Price) AS Mehnga FROM Products;
Output:+-------+--------+ | Sasta | Mehnga | +-------+--------+ | 15 | 180 | +-------+--------+ (USB Hub = 15, Monitor = 180)

SQL COUNT(), SUM(), AVG()

Total गिनना, जोड़ना और average निकालना।

💡 सरल भाषा में: COUNT = कितने लोग हैं, SUM = total कितना रुपया बना, AVG = हर व्यक्ति का औसत कितना है।
Syntax:SELECT COUNT(*), SUM(col), AVG(col) FROM table;
Example:SELECT COUNT(ProductID) AS Kul_Item, SUM(Price) AS Jod, AVG(Price) AS Ausat FROM Products;
Output:+----------+-----+-------+ | Kul_Item | Jod | Ausat | +----------+-----+-------+ | 4 | 265 | 66.25 | +----------+-----+-------+ (Total 4 items, Total rate 265, Average 66.25)

3. Advanced Querying & Joins (Smart Search और दो Sheets मिलाना)

SQL LIKE & Wildcards (%)

नाम के शुरू या आख़िरी अक्षरों से search करना।

💡 सरल भाषा में: Contact list में 'Del*' type करके search करना, ताकि Delhi, Dehradun सभी match हो जाएँ।
Syntax:SELECT * FROM table WHERE col LIKE 'text%';
Example:SELECT CustomerName, City FROM Customers WHERE City LIKE 'Del%';
Output:+---------------+-------+ | CustomerName | City | +---------------+-------+ | Amit Sharma | Delhi | +---------------+-------+

SQL BETWEEN & IN

किसी range या specific options के बीच ढूँढ़ना।

💡 सरल भाषा में: "मुझे 20 से लेकर 50 रुपये तक के बीच वाले सामान दिखाओ।"
Syntax:SELECT * FROM table WHERE col BETWEEN 20 AND 50;
Example:SELECT ProductName, Price FROM Products WHERE Price BETWEEN 20 AND 50;
Output:+---------------------+-------+ | ProductName | Price | +---------------------+-------+ | Mechanical Keyboard | 45 | | Gaming Mouse | 25 | +---------------------+-------+

SQL Aliases (AS)

Column का नाम temporary, सुंदर और आसान बनाना।

💡 सरल भाषा में: Code में column का नाम cust_first_nm था, screen पर दिखाते वक़्त उसे Client_Name बोल दिया।
Syntax:SELECT col AS Nickname FROM table;
Example:SELECT CustomerName AS Client_Name FROM Customers LIMIT 2;
Output:+---------------+ | Client_Name | +---------------+ | Amit Sharma | | Pooja Verma | +---------------+ (Header सुंदर और साफ़ दिखा)

SQL INNER JOIN

दो अलग-अलग sheets को Common ID से आपस में जोड़ना।

💡 सरल भाषा में: Sheet 1 में Employee का नाम है, Sheet 2 में Department। दोनों sheets को dept_id मिलाकर एक नई बड़ी sheet बना दी!
Syntax:SELECT t1.col, t2.col FROM t1 INNER JOIN t2 ON t1.id = t2.id;
Example:SELECT e.Name, d.DeptName FROM Employees e INNER JOIN Departments d ON e.dept_id = d.DeptID;
Output:+-----------+-------------+ | Name | DeptName | +-----------+-------------+ | Rahul Roy | Engineering | | Sneha Rao | Marketing | | Vikas Jain| Engineering | +-----------+-------------+ (Karan Mehta छूट गया क्योंकि उसका dept_id खाली था)

SQL GROUP BY & HAVING

Data के झुंड (Groups) बनाकर summary निकालना।

💡 सरल भाषा में: "Excel का Pivot Table!" देश के हिसाब से count करो कि किस देश से 2 या उससे ज़्यादा लोग हैं।
Syntax:SELECT col, COUNT(*) FROM t GROUP BY col HAVING COUNT(*) >= 2;
Example:SELECT Country, COUNT(CustomerID) AS Total FROM Customers GROUP BY Country HAVING COUNT(CustomerID) >= 2;
Output:+---------+-------+ | Country | Total | +---------+-------+ | India | 2 | +---------+-------+ (UK और Germany filter हो गए)

SQL CASE Statement

Conditions के हिसाब से decision लेना (IF-THEN-ELSE)।

💡 सरल भाषा में: "अगर salary 60,000 से ऊपर है तो उसे 'Senior' बोलो, वरना 'Associate' बोलो।"
Syntax:CASE WHEN cond THEN 'A' ELSE 'B' END;
Example:SELECT Name, CASE WHEN Salary >= 60000 THEN 'Senior' ELSE 'Associate' END AS Level FROM Employees;
Output:+-------------+-----------+ | Name | Level | +-------------+-----------+ | Rahul Roy | Senior | | Sneha Rao | Associate | | Vikas Jain | Senior | | Karan Mehta | Associate | +-------------+-----------+

SQL COALESCE / IFNULL

खाली (NULL) जगह पर कोई default number या text दिखाना।

💡 सरल भाषा में: अगर किसी का department number खाली हो, तो error मत दिखाओ, वहाँ सीधा '0' या 'Not Assigned' लिख दो।
Syntax:SELECT COALESCE(col, default_val) FROM table;
Example:SELECT Name, COALESCE(dept_id, 0) AS SafeDept FROM Employees;
Output:+-------------+----------+ | Name | SafeDept | +-------------+----------+ | Rahul Roy | 10 | | Sneha Rao | 20 | | Karan Mehta | 0 | <-- NULL की जगह 0 आ गया! +-------------+----------+

SQL UNION

दो अलग-अलग lists को एक लंबी list में जोड़ना।

💡 सरल भाषा में: एक Delhi की दुकान की list और दूसरी Mumbai की दुकान की list—दोनों को एक के नीचे एक चिपका देना।
Syntax:SELECT col FROM t1 UNION SELECT col FROM t2;
Example:SELECT City FROM Customers UNION SELECT 'Jaipur' AS City;
Output:+--------+ | City | +--------+ | Delhi | | Mumbai | | Berlin | | London | | Jaipur | +--------+ (सभी शहरों की एक single list बन गई)

4. Database & Table Management (नई File और Sheet बनाना)

SQL CREATE TABLE

एक बिल्कुल नई खाली table (sheet) तैयार करना।

💡 सरल भाषा में: "Excel में नई sheet open करके पहली row में headers define करना जैसे ID, Name, Salary।"
Syntax:CREATE TABLE table_name (col1 type, col2 type);
Example:CREATE TABLE Users (UserID INT, FullName VARCHAR(100));
Output:Query OK, 0 rows affected (0.02 sec) [Table 'Users' बन गई, अब इसमें data डाला जा सकता है]

SQL ALTER TABLE

बनी हुई table में नया column जोड़ना या हटाना।

💡 सरल भाषा में: "पहले से चल रही sheet में आगे चलकर एक नया 'Email' column insert करना।"
Syntax:ALTER TABLE table_name ADD col_name datatype;
Example:ALTER TABLE Customers ADD Email VARCHAR(255);
Output:Query OK, 0 rows affected (0.02 sec) [Customers sheet में 'Email' का नया column successfully जुड़ गया]

SQL Primary Key

हर row को पहचानने के लिए एक अनोखा ID number।

💡 सरल भाषा में: "School का Roll Number या Registration ID" — दो लोगों का कभी same नहीं हो सकता और न ही खाली छोड़ा जा सकता है।
Syntax:ID INT NOT NULL PRIMARY KEY
Example:CREATE TABLE Students (RollNo INT PRIMARY KEY, Name VARCHAR(50));
Output:Query OK, 0 rows affected (0.03 sec) [Primary Key active: duplicate RollNo आते ही database मना कर देगा]

SQL AUTO_INCREMENT

हर नई entry के साथ ID का automatic 1, 2, 3 बढ़ते जाना।

💡 सरल भाषा में: Token machine की तरह — नया customer आते ही उसे अगला number अपने-आप मिल जाएगा।
Syntax:ID INT AUTO_INCREMENT PRIMARY KEY
Example:INSERT INTO Users (FullName) VALUES ('David Miller');
Output:Query OK, 1 row affected (0.01 sec) [System generated: UserID = 101 अपने-आप allot हो गया]

5. Stored Procedures & Security (Shortcut और सुरक्षा)

SQL Stored Procedure

बड़ी query को shortcut नाम देकर save करना।

💡 सरल भाषा में: "Excel का Macro!" 20 line की query बार-बार type मत करो, एक बार save कर लो और एक click से चलाओ।
Syntax:CREATE PROCEDURE ProcName AS query; EXEC ProcName;
Example:CREATE PROCEDURE AllCustomers AS SELECT CustomerName, Country FROM Customers; EXEC AllCustomers;
Output:+---------------+---------+ | CustomerName | Country | +---------------+---------+ | Amit Sharma | India | | Pooja Verma | India | +---------------+---------+ (Procedure instantly executed)

SQL Comments (--)

Code के साथ अपनी समझ के लिए notes लिखना।

💡 सरल भाषा में: Sticky note लगाना। Database इसे query run करते वक़्त ignore कर देता है।
Syntax:-- Single Line Note /* Multi Line Note */
Example:-- सिर्फ़ active employees चाहिए SELECT Name FROM Employees WHERE dept_id IS NOT NULL;
Output:+------------+ | Name | +------------+ | Rahul Roy | | Sneha Rao | +------------+ (Green text ignore हो गया और query execute हो गई)

🎯 Top 10 Technical SQL Interview Questions

ये 10 सवाल हर technical round (Amazon, Flipkart, Google, TCS, Infosys, Data Analyst, Software Engineer) में बार-बार पूछे जाते हैं:

Q1: How do you find the 2nd Highest Salary in an Employee table? Most Frequent #1
💼 Interviewer यह क्यों पूछता है: यह देखने के लिए कि क्या आपको Subqueries या Window Functions का concept समझ है या आप सिर्फ़ basic LIMIT पर निर्भर हैं।
Solution A (Using Subquery - Standard SQL): सबसे पहले सबसे बड़ी salary निकालो, फिर उससे छोटी जो सबसे बड़ी salary हो उसे select करो:
SELECT MAX(Salary) AS SecondHighestSalary FROM Employees WHERE Salary < (SELECT MAX(Salary) FROM Employees);
Solution B (Using LIMIT & OFFSET - MySQL/PostgreSQL):
SELECT DISTINCT Salary FROM Employees ORDER BY Salary DESC LIMIT 1 OFFSET 1;
Result on Employees Table:+---------------------+ | SecondHighestSalary | +---------------------+ | 65000 | (Top is Vikas: 72000, 2nd is Rahul: 65000) +---------------------+
Q2: How do you find duplicate records in a table? Data Cleaning
💼 Interviewer यह क्यों पूछता है: Data cleaning और deduplication हर data analyst का रोज़ का काम है।
जब किसी column पर GROUP BY लगाकर HAVING COUNT(*) > 1 check करते हैं, तो सारे duplicate records निकलकर आ जाते हैं:
SELECT Country, COUNT(*) AS DuplicateCount FROM Customers GROUP BY Country HAVING COUNT(*) > 1;
Output:+---------+----------------+ | Country | DuplicateCount | +---------+----------------+ | India | 2 | +---------+----------------+
Q3: What is the exact difference between DELETE, TRUNCATE, and DROP? Core Concept
💼 Interviewer यह क्यों पूछता है: क्या आपको पता है कि कौन सा operation rollback हो सकता है और कौन सा table structure ही मिटा देता है।
FeatureDELETE (DML)TRUNCATE (DDL)DROP (DDL)
करता क्या हैRows को एक-एक करके हटाता हैसारी rows को एक झटके में खाली करता हैTable और उसके structure दोनों को मिटा देता है
WHERE Clauseहाँ (Specific rows filter कर सकते हैं)नहीं (पूरी sheet साफ़ होगी)नहीं
Rollbackहाँ (Transactions के साथ वापस आ सकता है)नहीं (बहुत मुश्किल / Engine dependent)नहीं (Permanently delete)
SpeedSlow (हर row का log बनता है)Very Fast (Storage de-allocate करता है)Fastest
Q4: Find customers who NEVER placed any order (Unmatched Records). Joins & Subqueries
💼 Interviewer यह क्यों पूछता है: छूटे हुए या Inactive data को निकालने के लिए LEFT JOIN के NULL behavior की समझ test करने के लिए।
-- Approach 1: LEFT JOIN with NULL check SELECT u.name, u.city FROM Users u LEFT JOIN Orders o ON u.user_id = o.user_id WHERE o.order_id IS NULL; -- Approach 2: Using NOT EXISTS SELECT u.name, u.city FROM Users u WHERE NOT EXISTS (SELECT 1 FROM Orders o WHERE o.user_id = u.user_id);
Output:+-------------+--------+ | name | city | +-------------+--------+ | Varun Joshi | Jaipur | +-------------+--------+ (Varun ने अभी तक 1 भी order नहीं किया)
Q5: What is a SELF JOIN and when do we use it? (Manager-Employee Hierarchy) Advanced Join
💼 Interviewer यह क्यों पूछता है: जब एक ही table के अंदर data एक दूसरे से जुड़ा हो (जैसे Employee का Manager भी उसी table में employee है)।
एक ही table को दो अलग नाम (Aliases e और m) देकर आपस में जोड़ने को SELF JOIN कहते हैं:
SELECT e.Name AS EmployeeName, m.Name AS ManagerName FROM Employees e LEFT JOIN Employees m ON e.ManagerID = m.EmpID;
Concept Result:+--------------+-------------+ | EmployeeName | ManagerName | +--------------+-------------+ | Sneha Rao | Rahul Roy | | Vikas Jain | Rahul Roy | | Rahul Roy | NULL (CEO) | +--------------+-------------+
Q6: What is the difference between WHERE and HAVING clause? Fundamental Filter
💼 Interviewer यह क्यों पूछता है: 90% beginners WHERE और HAVING में confuse होते हैं।
• WHERE: Data के group बनने से पहले individual rows पर filter लगाता है। इसमें SUM(), AVG() नहीं चलते।
• HAVING: GROUP BY होने के बाद calculated summary पर filter लगाता है (जैसे HAVING COUNT(*) > 2)।
SELECT City, COUNT(*) AS Total FROM Customers WHERE Country = 'India' -- पहले सिर्फ़ India छाँटा (WHERE) GROUP BY City HAVING COUNT(*) >= 1; -- Group बनने के बाद filter किया (HAVING)
Q7: What is the difference between PRIMARY KEY and UNIQUE KEY? Schema Design
1. Count: एक table में सिर्फ़ 1 Primary Key हो सकती है, लेकिन कई सारी Unique Keys हो सकती हैं।
2. NULL Value: Primary key कभी भी NULL नहीं हो सकती। लेकिन Unique key में NULL allow होता है (database के हिसाब से 1 या ज़्यादा)।
3. उपयोग: Primary Key row की पहचान होती है (जैसे Roll No)। Unique key extra unique data के लिए होती है (जैसे Email, Phone Number)।
Q8: What is the difference between ROW_NUMBER(), RANK(), and DENSE_RANK()? Window Functions
💼 Interviewer यह क्यों पूछता है: Senior SQL / Data Analyst interview में ranking functions सबसे ज़्यादा पूछे जाते हैं जब 2 लोगों के number same होते हैं!
मान लीजिए दो लोगों के marks बराबर (90, 90) हैं:
  • ROW_NUMBER(): हमेशा लगातार अलग number देगा: 1, 2, 3, 4 (कोई tie नहीं मानता)।
  • RANK(): बराबर आने पर rank repeat करेगा, फिर अगला number skip करेगा: 1, 2, 2, 4 (3 छूट गया!)।
  • DENSE_RANK(): बराबर आने पर rank repeat करेगा, और कोई number skip नहीं करेगा: 1, 2, 2, 3.
SELECT Name, Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS SalaryRank FROM Employees;
Q9: What is SQL Injection and how do you protect against it? Security & Best Practices
💼 Interviewer यह क्यों पूछता है: Production apps में security सबसे पहली priority होती है।
SQL Injection: जब कोई hacker login form में ' OR '1'='1 लिखकर बिना password के पूरा database hack कर लेता है।
बचाव (Defense): कभी भी query में string जोड़कर (concat करके) SQL न चलाएँ। हमेशा Parameterized Queries (Prepared Statements) का use करें जहाँ input को query नहीं बल्कि raw data की तरह treat किया जाता है।
Secure Pattern:-- Safe: Parameterized Placeholder SELECT * FROM Users WHERE Username = ? AND Password = ?;
Q10: What is a Database INDEX, and what are its pros and cons? Performance Tuning
💼 Interviewer यह क्यों पूछता है: अगर database में 1 करोड़ rows हैं, तो query fast कैसे चलेगी?
Index: किताब के आख़िर में बने Index की तरह होता है। बिना index के SQL को पूरी 1 करोड़ rows पढ़नी पड़ेंगी (Full Table Scan), जबकि index होने पर वो 1 millisecond में data ढूँढ़ लेता है।
• फ़ायदा (Pros): SELECT और WHERE search speed 100x fast हो जाती है।
• नुकसान (Cons): नया record डालने (INSERT/UPDATE) पर index को भी update करना पड़ता है, इसलिए write operation थोड़ा slow हो जाता है और extra disk memory लगती है।
CREATE INDEX idx_city ON Customers(City);

🚀 Capstone Mini Project: "QuickCart" Online Store Analytics

अब जब आपने सारी basic और advanced commands सीख ली हैं, चलिए देखते हैं कि real company में data analyst बनकर आप इनका उपयोग कैसे करते हैं। QuickCart store के owner के पास 5 ज़रूरी business questions हैं, जिनका उत्तर हम SQL से निकालेंगे!

📁 इस Project की 3 आपस में जुड़ी हुई Tables (Database Schema):

1. Users (ग्राहक) 5 Rows

user_idnamecity
1Aman GuptaDelhi
2Riya SenMumbai
3Kabir DasDelhi
4Neha SharmaBangalore
5Varun JoshiJaipur

2. Items (सामान) 4 Rows

item_idtitleprice (₹)
101Wireless Earbuds1200
102Fast Charger500
103Smart Watch2500
104Laptop Stand800

3. Orders (Sales Record) 5 Rows

order_iduser_iditem_idstatus
5011101Delivered
5022103Delivered
5031102Delivered
5043103Cancelled
5054104Delivered
* Note: Varun Joshi (user_id 5) ने अभी तक कोई order नहीं किया।
🔹 Step 1: महँगे सामान की List निकालना Concepts: SELECT + WHERE + ORDER BY
💼 मालिक का सवाल: "हमारी दुकान में ₹1,000 या उससे ज़्यादा क़ीमत के कौन से products हैं? उन्हें सबसे महँगे से सस्ते order में arrange करके दिखाओ।"
SQL Query:SELECT title, price FROM Items WHERE price >= 1000 ORDER BY price DESC;
Output:+------------------+-------+ | title | price | +------------------+-------+ | Smart Watch | 2500 | | Wireless Earbuds | 1200 | +------------------+-------+ 2 items found.
💡 यह कैसे काम किया: WHERE price >= 1000 ने 500 और 800 वाले items को छानकर हटा दिया, और ORDER BY price DESC ने सबसे महँगे item Smart Watch (2500) को top पर set कर दिया।
🔹 Step 2: Total Sales (कमाई) का हिसाब निकालना Concepts: COUNT + SUM + INNER JOIN
💼 मालिक का सवाल: "Successfully deliver हुए orders से हमारी कुल कितनी कमाई (Revenue) हुई और total कितने orders deliver हुए?"
SQL Query:SELECT COUNT(o.order_id) AS total_orders_delivered, SUM(i.price) AS total_revenue_inr FROM Orders o INNER JOIN Items i ON o.item_id = i.item_id WHERE o.status = 'Delivered';
Output:+------------------------+-------------------+ | total_orders_delivered | total_revenue_inr | +------------------------+-------------------+ | 4 | 5000 | +------------------------+-------------------+ (Earbuds: 1200 + Watch: 2500 + Charger: 500 + Stand: 800)
💡 यह कैसे काम किया: INNER JOIN ने Orders और Items table को item_id से मिलाया ताकि rate पता चल सके। WHERE status = 'Delivered' ने cancelled order को बाहर रखा, जिससे exact sale ₹5,000 calculate हुई।
🔹 Step 3: Complete Invoice Report (3 Tables का Join) Concepts: 3-Table INNER JOIN + Aliases
💼 मालिक का सवाल: "मुझे एक ऐसी summary report चाहिए जिसमें साफ़ दिखे कि किस customer ने कौन सा product ख़रीदा है और उसका delivery status क्या है?"
SQL Query:SELECT o.order_id, u.name AS customer_name, u.city, i.title AS product_name, i.price, o.status FROM Orders o INNER JOIN Users u ON o.user_id = u.user_id INNER JOIN Items i ON o.item_id = i.item_id ORDER BY o.order_id ASC;
Output:+----------+---------------+-----------+------------------+-------+-----------+ | order_id | customer_name | city | product_name | price | status | +----------+---------------+-----------+------------------+-------+-----------+ | 501 | Aman Gupta | Delhi | Wireless Earbuds | 1200 | Delivered | | 502 | Riya Sen | Mumbai | Smart Watch | 2500 | Delivered | | 503 | Aman Gupta | Delhi | Fast Charger | 500 | Delivered | | 504 | Kabir Das | Delhi | Smart Watch | 2500 | Cancelled | | 505 | Neha Sharma | Bangalore | Laptop Stand | 800 | Delivered | +----------+---------------+-----------+------------------+-------+-----------+
💡 यह कैसे काम किया: हमने Orders sheet को बीच में रखा, एक तरफ़ से Users का नाम जोड़ दिया और दूसरी तरफ़ से Items की details जोड़ दीं। अब पूरा invoice readable बन गया!
🔹 Step 4: शहर के अनुसार कमाई (City Analytics) Concepts: GROUP BY + SUM + ORDER BY
💼 मालिक का सवाल: "किस शहर से हमें कितने रुपये की delivered sales आई है? सबसे ज़्यादा कमाई करवाने वाले शहर को top पर दिखाओ।"
SQL Query:SELECT u.city, COUNT(o.order_id) AS orders_count, SUM(i.price) AS city_revenue FROM Orders o INNER JOIN Users u ON o.user_id = u.user_id INNER JOIN Items i ON o.item_id = i.item_id WHERE o.status = 'Delivered' GROUP BY u.city ORDER BY city_revenue DESC;
Output:+-----------+--------------+--------------+ | city | orders_count | city_revenue | +-----------+--------------+--------------+ | Mumbai | 1 | 2500 | | Delhi | 2 | 1700 | | Bangalore | 1 | 800 | +-----------+--------------+--------------+
💡 यह कैसे काम किया: GROUP BY u.city ने शहर के हिसाब से अलग-अलग packets बना दिए और SUM(i.price) ने हर packet का total जोड़कर दिखा दिया। Mumbai ₹2500 के साथ top पर आ गया।
🔹 Step 5: शांत रहने वाले Customers और VIP Tagging Concepts: LEFT JOIN + COALESCE + CASE
💼 मालिक का सवाल: "सभी registered customers को list करो। अगर किसी ने ₹2,000 से ऊपर ख़र्च किया है तो 'VIP' लिखो, कम ख़र्च वाले को 'Regular', और जिसने एक भी order नहीं किया उसे 'Inactive' tag दो ताकि offer भेज सकें।"
SQL Query:SELECT u.name, u.city, COALESCE(SUM(CASE WHEN o.status = 'Delivered' THEN i.price ELSE 0 END), 0) AS total_spent, CASE WHEN COUNT(o.order_id) = 0 THEN 'Inactive (Send Coupon)' WHEN SUM(CASE WHEN o.status = 'Delivered' THEN i.price ELSE 0 END) >= 2000 THEN '⭐ VIP Customer' ELSE 'Regular Customer' END AS customer_tag FROM Users u LEFT JOIN Orders o ON u.user_id = o.user_id LEFT JOIN Items i ON o.item_id = i.item_id GROUP BY u.user_id, u.name, u.city ORDER BY total_spent DESC;
Output:+-------------+-----------+-------------+------------------------+ | name | city | total_spent | customer_tag | +-------------+-----------+-------------+------------------------+ | Riya Sen | Mumbai | 2500 | ⭐ VIP Customer | | Aman Gupta | Delhi | 1700 | Regular Customer | | Neha Sharma | Bangalore | 800 | Regular Customer | | Kabir Das | Delhi | 0 | Regular Customer | | Varun Joshi | Jaipur | 0 | Inactive (Send Coupon) | +-------------+-----------+-------------+------------------------+
💡 यह कैसे काम किया: 1. LEFT JOIN लगाने से Varun Joshi list से बाहर नहीं हुआ।
2. COALESCE ने खाली राशि को 0 कर दिया।
3. CASE ने condition के हिसाब से automatic VIP और Inactive tags लगा दिए!

🎁 Free Sign Up

Details भरें, फिर Final Exam (50 Questions) दें और Certificate जीतें।
एक Email और एक Phone number से सिर्फ़ एक बार Sign Up हो सकता है। पहले से registered हैं? Login करें

🔑 Login

Sign up के समय दिया गया Email और Phone number डालें।

📊 Students & Marks