Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
🛢️ Week 6 – Data Science के लिए SQL  ·  दिन 32

दिन 32: SQLite के साथ SQL Basics

⏱ 2 hours📶 Beginner🎯 100% self-study
दिन 32 / 60

✅ आज आप सीखेंगे

  • हर data job SQL क्यों माँगती है
  • CSV files से database बनाना
  • SELECT, aliases और calculated columns
  • WHERE, IN, BETWEEN, LIKE, IS NULL से filter
  • Sort, limit, DISTINCT और CASE WHEN

🏢 असली दुनिया में

असली company में data आपके laptop की CSV files में नहीं – करोड़ों rows वाले databases में होता है। pandas इस्तेमाल करने से पहले SQL से सही हिस्सा निकालना पड़ता है। India में data-analyst job descriptions की यह #1 skill है।

एक तस्वीर में SQL

Database (MySQL, PostgreSQL, BigQuery…)SQL query ज़रूरी हिस्सा निकालती हैpandas DataFrameAnalysis, charts, models
SQL कहाँ आता है

हम SQLite लेंगे – एक file में पूरा SQL database जो Python के साथ आता है। यहाँ लिखा SQL MySQL और PostgreSQL में लगभग बिना बदलाव चलता है।

Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
pd.read_csv("sales_data.csv").to_sql("sales", con, if_exists="replace", index=False)
pd.read_csv("employees.csv").to_sql("employees", con, if_exists="replace", index=False)
pd.read_csv("departments.csv").to_sql("departments", con, if_exists="replace", index=False)
def q(sql):
    return pd.read_sql(sql, con)
print(q("SELECT name, type FROM sqlite_master WHERE type = 'table'"))
name type 0 sales table 1 employees table 2 departments table

SELECT

Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("SELECT order_id, city, product, unit_price FROM sales LIMIT 5"))
order_id city product unit_price 0 BK100359 Delhi Jeans 1220 1 BK100422 Mumbai Sneakers 2327 2 BK100744 Mumbai Tea 1kg 525 3 BK100830 Mumbai Pen Set 154 4 BK100947 Bengaluru T-Shirt 515
Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""
SELECT order_id,
       product,
       quantity * unit_price                      AS gross,
       ROUND(quantity * unit_price * (1 - discount), 2) AS revenue
FROM sales
LIMIT 5
"""))
order_id product gross revenue 0 BK100359 Jeans 2440 2440.0 1 BK100422 Sneakers 2327 2094.3 2 BK100744 Tea 1kg 2625 2625.0 3 BK100830 Pen Set 154 138.6 4 BK100947 T-Shirt 515 463.5
💡 SQL style

Keywords CAPITALS में, हर clause नई line में, और calculated columns को AS से नाम दें। SQL case और line breaks नहीं देखता, पर आपके साथी शुक्रिया कहेंगे।

WHERE – rows filter करना

Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""
SELECT order_id, city, product, unit_price, payment_mode
FROM sales
WHERE city = 'Mumbai' AND unit_price > 20000
"""))
order_id city product unit_price payment_mode 0 BK100862 Mumbai Laptop 52754 Cash on Delivery 1 BK101584 Mumbai Laptop 57852 Cash on Delivery 2 BK101257 Mumbai Laptop 56481 Cash on Delivery 3 BK101778 Mumbai Laptop 59044 Card 4 BK101487 Mumbai Laptop 50851 Card 5 BK101943 Mumbai Laptop 56438 Cash on Delivery
Operatorउदाहरणpandas में
= , <>, <, >=city = 'Delhi'df.city == "Delhi"
AND / OR / NOTa > 1 AND b = 'x'(a > 1) & (b == "x")
INcity IN ('Pune', 'Delhi')df.city.isin([...])
BETWEENcustomer_age BETWEEN 25 AND 35between(25, 35)
LIKEproduct LIKE '%Phone%'str.contains("Phone")
IS NULLrating IS NULLdf.rating.isna()
Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""
SELECT COUNT(*) AS orders
FROM sales
WHERE city IN ('Delhi', 'Mumbai', 'Bengaluru')
  AND customer_age BETWEEN 25 AND 35
  AND product LIKE '%Phone%'
"""))
print(q("SELECT COUNT(*) AS missing_ratings FROM sales WHERE rating IS NULL"))
orders 0 19 missing_ratings 0 35
⚠️ NULL किसी के बराबर नहीं

WHERE rating = NULL कुछ नहीं लौटाता, भले ratings missing हों। हमेशा IS NULL / IS NOT NULL लिखें।

ORDER BY, LIMIT, DISTINCT

Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""
SELECT order_id, city, product,
       ROUND(quantity * unit_price * (1 - discount)) AS revenue
FROM sales
ORDER BY revenue DESC
LIMIT 5
"""))
print(q("SELECT DISTINCT region, city FROM sales ORDER BY region, city"))
order_id city product revenue 0 BK100824 Chennai Laptop 114432.0 1 BK101257 Mumbai Laptop 112962.0 2 BK101612 Delhi Laptop 105232.0 3 BK101943 Mumbai Laptop 90301.0 4 BK101042 Delhi Laptop 88006.0 region city 0 East Kolkata 1 East Patna 2 North Delhi 3 North Jaipur 4 North Lucknow 5 South Bengaluru 6 South Chennai 7 South Hyderabad 8 West Ahmedabad 9 West Mumbai 10 West Pune

CASE WHEN – SQL के अंदर if/else

Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""
SELECT order_id, unit_price,
       CASE WHEN unit_price >= 20000 THEN 'Premium'
            WHEN unit_price >= 2000  THEN 'Mid'
            ELSE 'Budget' END AS price_band,
       CASE WHEN payment_mode = 'Cash on Delivery' THEN 0 ELSE 1 END AS prepaid
FROM sales
ORDER BY unit_price DESC
LIMIT 6
"""))
order_id unit_price price_band prepaid 0 BK101778 59044 Premium 1 1 BK100738 58065 Premium 1 2 BK101584 57852 Premium 0 3 BK100725 57677 Premium 1 4 BK100855 57420 Premium 1 5 BK100824 57216 Premium 1

Dates के साथ काम

Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""
SELECT DISTINCT order_date,
       strftime('%m', order_date) AS month,
       CASE strftime('%w', order_date) WHEN '0' THEN 'Weekend' WHEN '6' THEN 'Weekend' ELSE 'Weekday' END AS day_type
FROM sales
WHERE order_date BETWEEN '2024-10-01' AND '2024-10-31'
ORDER BY order_date
LIMIT 7
"""))
order_date month day_type 0 2024-10-01 10 Weekday 1 2024-10-02 10 Weekday 2 2024-10-03 10 Weekday 3 2024-10-04 10 Weekday 4 2024-10-05 10 Weekend 5 2024-10-06 10 Weekend 6 2024-10-07 10 Weekday

SQL query कैसे चलती है

  1. 1FROM (कौन सी table)
  2. 2WHERE (rows filter)
  3. 3GROUP BY (Day 33)
  4. 4HAVING (Day 33)
  5. 5SELECT (columns)
  6. 6ORDER BY
  7. 7LIMIT
लिखने का क्रम ≠ चलने का क्रम
🧠 यह क्यों ज़रूरी

क्योंकि WHERE, SELECT से पहले चलता है, ज़्यादातर databases में WHERE में SELECT alias नहीं लिख सकते (WHERE revenue > 5000 fail)। Expression दोहराएँ या sub-query/CTE (Day 34) लें। ORDER BY, SELECT के बाद चलता है, इसलिए वहाँ aliases चलते हैं।

🏅 आज के Job Skills

✔ CSVs को SQL database में load करना✔ Calculated columns के साथ SELECT✔ WHERE operators और NULL checks से filter✔ Sort, limit और CASE से categorise

Practice tasks

🏋️ Practice – ख़ुद करें

Task 1: South region के 5 सबसे सस्ते Electronics orders की list।
Solution देखें
Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""SELECT order_id, city, product, unit_price FROM sales
WHERE category = 'Electronics' AND region = 'South' ORDER BY unit_price LIMIT 5"""))
order_id city product unit_price 0 BK101236 Chennai Power Bank 1111 1 BK101875 Hyderabad Power Bank 1125 2 BK100129 Hyderabad Power Bank 1126 3 BK101127 Chennai Power Bank 1126 4 BK101494 Chennai Power Bank 1145
Task 2: ₹60,000 से ₹1,00,000 के बीच कितने employees कमाते हैं?
Solution देखें
Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("SELECT COUNT(*) AS n FROM employees WHERE salary BETWEEN 60000 AND 100000"))
n 0 14
Task 3: हर employee का name, salary और band दिखाएँ: “Senior” (≥ ₹1 lakh), “Mid” (≥ ₹60k), बाकी “Junior”, सबसे ज़्यादा salary पहले।
Solution देखें
Python
import sqlite3
import pandas as pd
con = sqlite3.connect("bazaar.db")
q = lambda sql: pd.read_sql(sql, con)
print(q("""SELECT name, salary, CASE WHEN salary >= 100000 THEN 'Senior' WHEN salary >= 60000 THEN 'Mid' ELSE 'Junior' END AS band
FROM employees ORDER BY salary DESC LIMIT 8"""))
name salary band 0 Kunal 146000 Senior 1 Tanvi 135000 Senior 2 Neha 122000 Senior 3 Kabir 118000 Senior 4 Meera 115000 Senior 5 Manav 111000 Senior 6 Aditya 94000 Mid 7 Diya 89000 Mid

Quick quiz

🧠 Quick Quiz – ख़ुद को जाँचें

1. Rows कौन सा keyword filter करता है?
WHERE condition से मेल खाने वाली rows रखता है।
2. product LIKE 'Smart%' किससे match करता है?
% मतलब कोई भी characters।
3. Missing ratings ढूँढने का सही तरीका?
NULL के लिए IS।
4. पहले क्या चलता है?
FROM → WHERE → … → SELECT → ORDER BY → LIMIT।
5. pd.read_sql(query, con) क्या लौटाता है?
SQL result सीधे pandas में।

Interview corner

💼 Interview Corner

WHERE और HAVING में क्या फ़र्क है?

WHERE grouping से पहले अलग-अलग rows filter करता है; HAVING, GROUP BY के बाद aggregates से groups filter करता है (जैसे HAVING SUM(revenue) > 100000)। Day 33 में।

WHERE में column alias क्यों नहीं लिख सकते?

Logical execution order के कारण – SELECT के alias बनाने से पहले WHERE चलता है। Expression दोहराएँ या query को sub-query/CTE में लपेटें।

सारांश

  • SELECT columns FROM table WHERE condition ORDER BY col LIMIT n।
  • IN, BETWEEN, LIKE, IS NULL ज़्यादातर filters cover करते हैं।
  • CASE WHEN categories बनाता है; AS columns को नाम देता है।
  • pd.read_sql results को pandas में लाता है।
➡️ आगे

Day 33: GROUP BY, HAVING और JOINs – tables को pro की तरह जोड़ें और summarise करें।

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

कौन सा database सीखूँ?
SQL हर जगह ~95% एक जैसा है। यहाँ SQLite से सीखें, फिर MySQL या PostgreSQL का अभ्यास करें – दोनों मुफ़्त और Indian companies में आम।
pandas को MySQL से कैसे जोड़ें?
SQLAlchemy लें: create_engine("mysql+pymysql://user:pass@host/db") और engine को pd.read_sql में दें। Passwords environment variables में रखें।
← Data Science (60 Days)
🔗

Share this topic with a friend

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

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

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

अगला topicदिन 33: SQL Joins, GROUP BY और HAVING आपकी प्रगति: 32 / 60 (53%) · Lesson 33 / 60 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें