গল্প — Employee & Manager
| employee_id | employee_name | manager_id |
|---|---|---|
| 101 | Rahim | NULL |
| 102 | Karim | 101 |
| 103 | Hasan | 101 |
| 104 | Nila | 102 |
| 105 | Sumi | 102 |
Rahim ≈ CEO · Karim/Hasan → Rahim · Nila/Sumi → Karim।
Manager-এর নাম কোথায়? → employees table-এ।
Employee-এর নাম? → একই table।
সমস্যা: manager_id=101 আছে, কিন্তু manager name column নেই।
The Big Question
Family Analogy
| person_id | name | parent_id |
|---|---|---|
| 1 | Rahim | NULL |
| 2 | Karim | 1 |
| 3 | Nila | 1 |
| 4 | Sumi | 2 |
SELF JOIN কী?
SELF JOIN = একই table-কে নিজের সাথে JOIN করে বিভিন্ন row-এর relationship বের করা।
কেন Aliases?
প্রথম SELF JOIN Query
Animated Frames
| employee | manager |
|---|---|
| Rahim | NULL |
| Karim | Rahim |
| Hasan | Rahim |
| Nila | Karim |
| Sumi | Karim |
কেন LEFT JOIN?
সব employee রাখতে হবে → e LEFT JOIN m। INNER হলে Rahim বাদ যেতে পারে।
INNER
LEFT
SELF vs Normal JOIN
| Feature | Normal JOIN | SELF JOIN |
|---|---|---|
| Tables | Usually different | Same table |
| Example | Emp + Dept | Emp + Manager |
| Aliases | Helpful | Critical |
| Purpose | Connect tables | Connect rows inside table |
Dual-role Diagram
Hierarchical Data
CEO → Manager → Lead → Employee · Category parent · Folder parent · Comment reply · Org tree।
Org Chart Visual
Hierarchy এক table-এ manager_id দিয়ে store।
SELF JOIN + WHERE
Employees Without Managers
Who Manages Others
Employee + Manager + Senior Manager
একই table তিনবার — e / m / mm।
Same-dept Comparison
e1.id < e2.id → Rahim vs Karim এবং Karim vs Rahim duplicate এড়ায়।Compare Challenge
একই dept-এ pairs — id< দিয়ে unique pairs।
Category → Parent
Product → Replacement
Hospital — Supervisor
Doctor → Supervisor → Senior: d LEFT JOIN s ON d.supervisor_id=s.doctor_id LEFT JOIN ss ON s.supervisor_id=ss.doctor_id।
Comment → Parent
Nested replies: c LEFT JOIN p ON c.parent_comment_id = p.comment_id।
Conceptual Playground
Row Matching Steps
Predict the Output (২০+)
Common Mistakes (১৫)
- SELF JOIN = special keyword ভাবা
- Alias না দেওয়া
- একই alias দুবার
- e/m roles গুলিয়ে
- Wrong ON columns
- ON ভুলে
- সব emp চাইলে INNER
- NULL ignore
- Parent-child না বোঝা
- Duplicate compare pairs
id <ভুলে- Physical duplicate ভাবা
- SELECT *
- Ambiguous columns
- Relationship না বুঝে join
SELF vs INNER/LEFT/RIGHT
| Concept | Meaning |
|---|---|
| INNER | Matching only |
| LEFT | Keep left |
| RIGHT | Keep right |
| SELF | Same table, multiple roles (uses INNER/LEFT…) |
e LEFT JOIN m এবং e JOIN m — দুটোই SELF JOIN technique।
Mental Model
Workbench Lab
- Emp → Manager
- No managers
- Managers list
- Emp → Mgr → Senior
- Category parent
- Product replacement
- Doctor supervisor
- Comment parent
- Same dept pairs
- Salary compare
Mini Project — Org Analytics
- Employee + Manager
- Without managers
- Managers + report counts
- Emp + Mgr + Senior
- Salary > manager
- Same department employees
- Salary difference pairs
- Department hierarchy notes
- Manager hierarchy
- Top-level employees
Salary > Manager
Same Manager Pairs
Performance Basics
- SELF JOIN large tables-এ costly হতে পারে
- Index
manager_id/ relationship columns - PK usually indexed
- Select needed columns
- Avoid unnecessary repeated SELF JOINs
- Watch row multiplication
Classroom Activities (২০)
MCQ (২৫+)
Viva
Interview Top 30
Homework
প্রশ্ন (১৫):
- Employee + manager
- Without managers
- All managers
- Direct reports count
- Emp + mgr + senior
- Salary > manager
- Same manager pairs
- Duplicate pair control
- Category-parent
- Root categories
- Child categories
- Product-replacement
- Doctor-supervisor
- Comment-parent
- Org hierarchy report
Cheat Sheet + Playground Blueprint
SELF JOIN
SAME TABLE → TWO+ ALIASES → ROLES → JOIN ROWS
SELECT e.employee_name AS employee, m.employee_name AS manager
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.employee_id;
e = Employee · m = Manager
e.manager_id = m.employee_id
Use cases: Emp→Mgr · Child→Parent · Cat→Parent · Product→Replace · Comment→Parent · Emp↔Emp