Home › Lectures › Data Analysis

🗄️ এসকিউএল ও ডাটাবেস · SQL & Databases

ডাটাবেস থেকে ডেটা বের করার সার্বজনীন ভাষা।

The universal language for querying databases.

📅 ২. ডেটা বিশ্লেষণ⏳ ~3 সপ্তাহ📘 12 টপিক🧩 36 সাব-টপিক🎬 0 ভিডিও💻 রানযোগ্য কোড

🎯 যা শিখবেন / Outcomes

Joins, aggregates, window functions, schema design

🧰 টুলস / Tools

MySQL, PostgreSQL, SQLite

🏁 প্রজেক্ট / Capstone

Sales/health database with 20 analytical queries

📌 পূর্বশর্ত / Prerequisites

🐍 Python Programming

📅

সাপ্তাহিক পরিকল্পনা · Weekly plan

~২ ঘণ্টা/দিন ধরে
1

Relational Database Concepts

Tables, rows, columns and keys.
Beginner
📘 বাংলা: টেবিল, রো, কলাম, প্রাইমারি কি।
🌐 English: Tables, rows, columns and keys.

💡 প্রতিষ্ঠানের বেশিরভাগ ডেটা রিলেশনাল ডাটাবেসে থাকে—এর কাঠামো বুঝলে কুয়েরি লেখা সহজ।

  1. 1
    টেবিল = একটি বিষয় (রোগী, হাসপাতাল); সারি = রেকর্ড, কলাম = বৈশিষ্ট্য
  2. 2
    Primary Key: প্রতিটি সারির অনন্য পরিচয় (patient_id)
  3. 3
    Foreign Key: অন্য টেবিলের PK-র রেফারেন্স—টেবিলের সম্পর্ক তৈরি করে
  4. 4
    সম্পর্কের ধরন: এক-এক, এক-বহু (এক হাসপাতাল—বহু রোগী), বহু-বহু (সংযোগ টেবিল)
টেবিল ও রেকর্ডসারি = রেকর্ড, কলাম = অ্যাট্রিবিউট
Primary Keyঅনন্য পরিচয়
Foreign Keyটেবিলের মধ্যে সম্পর্ক
2

SELECT & WHERE

Retrieve and filter rows.
Beginner
📘 বাংলা: ডেটা খোঁজা ও ফিল্টার।
🌐 English: Retrieve and filter rows.

💡 ডাটাবেস থেকে প্রয়োজনীয় ডেটা বের করার মূল বাক্য।

  1. 1
    SELECT col1, col2 FROM table — কোন কলাম কোন টেবিল থেকে
  2. 2
    WHERE দিয়ে শর্ত: =, <>, >, BETWEEN 10 AND 20, IN ('A','B')
  3. 3
    টেক্সট প্যাটার্ন: LIKE 'Dha%' (% = যেকোনো অক্ষর)
  4. 4
    NULL যাচাই: IS NULL / IS NOT NULL; AND, OR, বন্ধনী দিয়ে জটিল শর্ত
SELECTকলাম নির্বাচন
WHERE=, >, BETWEEN, LIKE, IN
NULLIS NULL দিয়ে যাচাই
3

ORDER BY & LIMIT

Sort and limit results.
Beginner
📘 বাংলা: সাজানো ও সীমিত ফলাফল।
🌐 English: Sort and limit results.

💡 শীর্ষ ১০, সাম্প্রতিক রেকর্ড, পেজিনেশন—সাজানো ও সীমিত ফল দরকার।

  1. 1
    ORDER BY col ASC/DESC; একাধিক কলাম: ORDER BY district, cases DESC
  2. 2
    LIMIT n দিয়ে প্রথম n সারি
  3. 3
    LIMIT 10 OFFSET 20 — তৃতীয় পাতা
  4. 4
    DISTINCT দিয়ে অনন্য মান: SELECT DISTINCT district
ORDER BYASC/DESC
LIMIT/OFFSETপেজিনেশন
DISTINCTঅনন্য মান
4

Aggregate Functions

COUNT, SUM, AVG, MIN, MAX.
Beginner
📘 বাংলা: COUNT, SUM, AVG, MIN, MAX।
🌐 English: COUNT, SUM, AVG, MIN, MAX.

💡 হাজার সারিকে একটি সংখ্যায় সারাংশ—মোট, গড়, সংখ্যা।

  1. 1
    COUNT(*) সব সারি, COUNT(col) শুধু non-NULL, COUNT(DISTINCT col) অনন্য
  2. 2
    SUM, AVG সংখ্যাগত কলামে
  3. 3
    MIN, MAX সংখ্যা ও তারিখে
  4. 4
    AS দিয়ে ফলাফলের নাম: SELECT AVG(age) AS avg_age
COUNT(*) বনাম COUNT(col)NULL পার্থক্য
SUM, AVGসংখ্যাগত সারাংশ
MIN, MAXসীমা
5

GROUP BY & HAVING

Aggregate per group and filter groups.
Intermediate
📘 বাংলা: গ্রুপভিত্তিক হিসাব।
🌐 English: Aggregate per group and filter groups.

💡 গ্রুপভিত্তিক সারাংশ—প্রতি জেলা, প্রতি মাস, প্রতি বিভাগ।

  1. 1
    GROUP BY district — প্রতিটি অনন্য মানের জন্য একটি সারি
  2. 2
    SELECT-এ শুধু গ্রুপের কলাম ও অ্যাগ্রিগেট ফাংশন রাখুন
  3. 3
    HAVING দিয়ে গ্রুপের ফলের উপর শর্ত: HAVING COUNT(*) > 100
  4. 4
    ক্রম: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
GROUP BYগ্রুপভিত্তিক
HAVINGগ্রুপের উপর শর্ত
WHERE বনাম HAVINGকখন কোনটা
6

SQL Joins

Combining tables by keys.
Intermediate
📘 বাংলা: INNER, LEFT, RIGHT, FULL JOIN।
🌐 English: Combining tables by keys.

💡 সম্পর্কিত টেবিল একত্র করা—SQL-এর সবচেয়ে গুরুত্বপূর্ণ দক্ষতা।

  1. 1
    INNER JOIN: দুই টেবিলেই মিল থাকা সারি
  2. 2
    LEFT JOIN: বাম টেবিলের সব + ডানের মিল (না মিললে NULL)
  3. 3
    ON দিয়ে মিলের শর্ত; টেবিল alias (p, h) দিয়ে সংক্ষেপ
  4. 4
    SELF JOIN (একই টেবিল), CROSS JOIN (সব সমন্বয়)
INNER JOINমিল থাকা সারি
LEFT JOINবাম টেবিলের সব
SELF ও CROSS JOINবিশেষ ক্ষেত্র
7

Subqueries

A query inside a query.
Intermediate
📘 বাংলা: কুয়েরির ভেতরে কুয়েরি।
🌐 English: A query inside a query.

💡 একটি কুয়েরির ফলকে আরেকটির ইনপুট হিসেবে ব্যবহার।

  1. 1
    WHERE-এ: WHERE age > (SELECT AVG(age) FROM patients)
  2. 2
    IN-এ: WHERE id IN (SELECT patient_id FROM tests WHERE result='positive')
  3. 3
    FROM-এ: (SELECT ...) AS t — অস্থায়ী টেবিল
  4. 4
    correlated: ভেতরের কুয়েরি বাইরের সারির মান ব্যবহার করে (ধীর হতে পারে)
WHERE-এ সাবকুয়েরিIN (SELECT ...)
FROM-এ সাবকুয়েরিডেরাইভড টেবিল
Correlated সাবকুয়েরিপ্রতি সারিতে চলে
8

Window Functions

Rankings and running totals over rows.
Intermediate
📘 বাংলা: ROW_NUMBER, RANK, রানিং টোটাল।
🌐 English: Rankings and running totals over rows.

💡 র‍্যাঙ্কিং, রানিং টোটাল, আগের মাসের তুলনা—সারি না কমিয়েই।

  1. 1
    কাঠামো: FUNCTION() OVER (PARTITION BY group ORDER BY col)
  2. 2
    ROW_NUMBER, RANK, DENSE_RANK — ক্রমিক নম্বর
  3. 3
    LAG(col) / LEAD(col) — আগের/পরের সারির মান
  4. 4
    SUM(col) OVER (ORDER BY date) — রানিং টোটাল; AVG ... ROWS BETWEEN 6 PRECEDING AND CURRENT ROW — চলমান গড়
ROW_NUMBER, RANK, DENSE_RANKর‍্যাঙ্কিং
LAG/LEADআগের/পরের সারি
SUM() OVERরানিং টোটাল
9

CTE

Readable queries with WITH.
Advanced
📘 বাংলা: WITH দিয়ে পাঠযোগ্য কুয়েরি।
🌐 English: Readable queries with WITH.

💡 জটিল কুয়েরি ধাপে ধাপে পাঠযোগ্যভাবে লেখা।

  1. 1
    WITH step1 AS (SELECT ...) SELECT ... FROM step1
  2. 2
    একাধিক CTE কমা দিয়ে: WITH a AS (...), b AS (SELECT ... FROM a)
  3. 3
    প্রতিটি CTE একটি যুক্তির ধাপ—ডিবাগ সহজ
  4. 4
    RECURSIVE CTE দিয়ে হায়ারার্কি (বিভাগ → জেলা → উপজেলা)
WITH cte AS (...)নামকৃত অস্থায়ী ফল
একাধিক CTEধাপে ধাপে যুক্তি
Recursive CTEহায়ারার্কি
10

Indexes & Optimization

Make queries fast.
Advanced
📘 বাংলা: কুয়েরি দ্রুত করার কৌশল।
🌐 English: Make queries fast.

💡 লক্ষ সারির টেবিলে কুয়েরি সেকেন্ডের বদলে মিলিসেকেন্ডে।

  1. 1
    ইনডেক্স = বইয়ের সূচি; WHERE, JOIN, ORDER BY-র কলামে তৈরি করুন: CREATE INDEX idx ON cases(district, date)
  2. 2
    EXPLAIN দিয়ে দেখুন কুয়েরি ইনডেক্স ব্যবহার করছে কিনা
  3. 3
    SELECT * এড়ান, দরকারি কলাম নিন; কলামে ফাংশন দিলে ইনডেক্স কাজ করে না
  4. 4
    বেশি ইনডেক্স = INSERT/UPDATE ধীর—ভারসাম্য রাখুন
ইনডেক্সB-Tree দিয়ে দ্রুত খোঁজ
EXPLAINকুয়েরি প্ল্যান
ভালো অভ্যাসSELECT * এড়ানো
11

Normalization

Reduce redundancy in schema design.
Advanced
📘 বাংলা: ডেটাবেস ডিজাইনে পুনরাবৃত্তি কমানো।
🌐 English: Reduce redundancy in schema design.

💡 ভালো স্কিমা ডিজাইন ডেটার অসংগতি ও পুনরাবৃত্তি ঠেকায়।

  1. 1
    1NF: প্রতিটি ঘরে একটি মান (কমা দিয়ে তালিকা নয়)
  2. 2
    2NF: প্রতিটি কলাম পুরো কী-র উপর নির্ভরশীল
  3. 3
    3NF: নন-কী কলাম অন্য নন-কী কলামের উপর নির্ভর করবে না (জেলার নাম হাসপাতাল টেবিলে নয়, জেলা টেবিলে)
  4. 4
    রিপোর্ট দ্রুত করতে কখনো ইচ্ছাকৃত ডিনর্মালাইজেশন
1NFঅ্যাটমিক মান
2NF ও 3NFনির্ভরতা দূর
ডিনর্মালাইজেশনরিপোর্টিংয়ে গতি
12

MySQL with Python

Connect to a database from Python.
Advanced
📘 বাংলা: পাইথন থেকে ডাটাবেসে সংযোগ।
🌐 English: Connect to a database from Python.

💡 ডাটাবেস থেকে সরাসরি pandas-এ ডেটা এনে বিশ্লেষণ বা মডেল।

  1. 1
    pip install sqlalchemy pymysql
  2. 2
    engine = create_engine("mysql+pymysql://user:pass@host/db")
  3. 3
    df = pd.read_sql("SELECT ...", engine); লেখা: df.to_sql("table", engine, if_exists="append", index=False)
  4. 4
    প্যারামিটার: pd.read_sql(text("... WHERE d = :d"), engine, params={"d": "Dhaka"})
সংযোগmysql-connector / SQLAlchemy
pd.read_sqlকুয়েরি থেকে DataFrame
প্যারামিটারাইজড কুয়েরিSQL Injection প্রতিরোধ
💻

হাতে-কলমে কোড · Hands-on code

Run চাপুন — পাইথন আপনার ব্রাউজারেই চলবে (Ctrl+Enter)
import sqlite3
con=sqlite3.connect(":memory:")
con.executescript('''CREATE TABLE s(id INT, name TEXT, dept TEXT, marks INT);
INSERT INTO s VALUES(1,'Rafi','CSE',88),(2,'Mim','EEE',92),(3,'Tanvir','CSE',75),(4,'Nabila','EEE',81),(5,'Sakib','CSE',95);''')
q='''SELECT name, dept, marks, RANK() OVER(PARTITION BY dept ORDER BY marks DESC) AS rnk,
 ROUND(AVG(marks) OVER(PARTITION BY dept),1) AS dept_avg FROM s ORDER BY dept, rnk'''
for r in con.execute(q): print(r)
📝

অনুশীলন · Practice tasks

  1. প্রতি বিভাগের শীর্ষ ছাত্র বের করুন (window function)
  2. LEFT JOIN দিয়ে যাদের কোনো অর্ডার নেই তাদের খুঁজুন
  3. একটি ৩-টেবিলের নর্মালাইজড স্কিমা ডিজাইন করুন
  4. ক্যাপস্টোন: Sales/health database with 20 analytical queries
❓

কুইজ · Quick quiz

1. গ্রুপের উপর শর্ত দিতে?

2. বাম টেবিলের সব সারি রাখে?

🎬

ভিডিও লাইব্রেরি · Videos

সাইটের ভেতরে ফ্লোটিং প্লেয়ারে চলবে
এই শাখার ভিডিও এখনো সংরক্ষিত হয়নি। যেকোনো টপিক পেজ খুললে ভিডিও স্বয়ংক্রিয়ভাবে খুঁজে MySQL-এ সংরক্ষিত হবে (API key থাকলে)।

📺 Reference channels

🔗

সংযুক্ত বিষয় · Connected

← আগের শাখা📈 Data Visualizationপরের শাখা →📑 Excel & BI
🎬 Video