কেন IN — আগে গল্প
যদি আমাদের 1,000 জন student থাকে এবং আমরা শুধু CSE, EEE অথবা BBA department-এর student দেখতে চাই, তাহলে কীভাবে করব?
গল্প ১ — University (৫০,০০০ student)
VC: “CSE, EEE এবং BBA department-এর student list দাও।”
IN ছাড়া — লম্বা OR
একই কাজ যদি আরও সহজভাবে লেখা যায়? list আরও লম্বা হলে কী হবে?
গল্প ২ — E-commerce
গল্প ৩ — Customer Cities
Marketing: Dhaka, Chittagong, Sylhet, Rajshahi — multiple OR-এর বদলে IN।
গল্প ৪ — Employee Departments
HR: IT, HR, Finance, Marketing — একই column, নির্দিষ্ট list।
IN কী?
IN = একই column-এর জন্য একাধিক নির্দিষ্ট value check করার operator।
- কেন: অনেকগুলো
= … OR = …ছোট ও পরিষ্কার করে - কখন: নির্দিষ্ট list জানা (city, dept, category)
- কীভাবে: value list-এর যেকোনো একটিতে সমান হলে TRUE
- Range নয়: continuous range-এর জন্য BETWEEN
- Exact values: শুধু তালিকার মান
Basic IN সিনট্যাক্স
IN vs OR
OR (লম্বা)
IN (ছোট)
একই column-এর একই ধরনের exact match-এ দুটো প্রায় একই result দিতে পারে।
| OR | IN |
|---|---|
| Multiple conditions | List of values |
| Long | Short |
| Harder to read (long lists) | Easier to read |
| Good for mixed conditions | Best for same-column value lists |
এখানে conditions আলাদা ধরনের — সাধারণ IN use case নয়।
Numeric IN
| student_id | name | age | marks |
|---|---|---|---|
| 1 | Rahim | 18 | 80 |
| 2 | Karim | 20 | 75 |
| 3 | Hasan | 19 | 90 |
| 4 | Nila | 21 | 85 |
| 5 | Sumi | 20 | 70 |
marks IN (70, 80, 90) মানে শুধু ৭০ বা ৮০ বা ৯০ — ৭০ থেকে ৯০ সব নয়।Text / String IN
String-এ quotes লাগে।
Wrong
Correct
NOT IN
Use: exclude cities / departments / categories / test accounts।
IN + AND / OR
Laptop/Mobile অথবা খুব দামি যেকোনো category — OR-এর অর্থ সাবধানে পড়ো।
IN + ORDER BY + LIMIT
“Laptop, Mobile এবং Tablet-এর সবচেয়ে দামি 10টি product দেখাও।”
IN + GROUP BY
“CSE, EEE এবং BBA-এ কতজন student?”
IN + DISTINCT
IN = allowed cities filter · DISTINCT = duplicate city নাম সরানো।
= / IN / BETWEEN / LIKE / REGEXP
| Operator | Main Purpose | Example |
|---|---|---|
= | One exact value | city = 'Dhaka' |
IN | Multiple specific values | city IN ('Dhaka','Sylhet') |
BETWEEN | Continuous range | age BETWEEN 18 AND 25 |
LIKE | Simple text pattern | name LIKE 'A%' |
REGEXP | Complex text pattern | name REGEXP '^A' |
- শুধু Dhaka/Sylhet/Rajshahi → IN
- Age 18–25 → BETWEEN
- Names starting with A → LIKE (বা REGEXP)
- ৩ অক্ষর + ৩ সংখ্যা → REGEXP
IN vs BETWEEN — সবচেয়ে গুরুত্বপূর্ণ পার্থক্য
IN — selected values
BETWEEN — continuous range
E-commerce Business Case Study
Customers
| id | name | city | country | type |
|---|---|---|---|---|
| C01 | Rahim | Dhaka | BD | Retail |
| C02 | Karim | Sylhet | BD | Retail |
| C03 | Sara | Chittagong | BD | Wholesale |
| C04 | John | Kolkata | IN | Retail |
| C05 | Nila | Rajshahi | BD | Retail |
| C06 | Ali | Dhaka | BD | VIP |
| C07 | Mina | Khulna | BD | Retail |
| C08 | Priya | Delhi | IN | Wholesale |
Products
| id | name | category | brand | price |
|---|---|---|---|---|
| P01 | Galaxy A | Mobile | Samsung | 28000 |
| P02 | iPhone SE | Mobile | Apple | 55000 |
| P03 | IdeaPad | Laptop | Lenovo | 62000 |
| P04 | MacBook Air | Laptop | Apple | 120000 |
| P05 | iPad | Tablet | Apple | 45000 |
| P06 | Mouse | Accessories | Logitech | 1200 |
| P07 | Keyboard | Accessories | Logitech | 2500 |
| P08 | Tab M | Tablet | Lenovo | 22000 |
| P09 | Buds | Audio | Samsung | 4500 |
| P10 | ThinkPad | Laptop | Lenovo | 95000 |
Employees
| id | name | dept | salary |
|---|---|---|---|
| E01 | Arif | IT | 65000 |
| E02 | Bela | HR | 48000 |
| E03 | Chayan | Finance | 72000 |
| E04 | Dipa | Sales | 55000 |
| E05 | Emon | IT | 90000 |
| E06 | Faria | Marketing | 50000 |
Orders
| id | customer_id | city | payment | amount |
|---|---|---|---|---|
| O01 | C01 | Dhaka | Card | 28000 |
| O02 | C02 | Sylhet | bKash | 1200 |
| O03 | C03 | Chittagong | Card | 62000 |
| O04 | C06 | Dhaka | COD | 4500 |
| O05 | C05 | Rajshahi | Nagad | 22000 |
| O06 | C07 | Khulna | Card | 95000 |
| O07 | C01 | Dhaka | bKash | 2500 |
| O08 | C03 | Chittagong | COD | 120000 |
১২টি প্রশ্নের সমাধান
city IN ('Dhaka','Sylhet','Chittagong')country IN ('BD','IN')(বা নির্দিষ্ট দেশ list)city NOT IN ('Khulna','Rajshahi')category IN ('Laptop','Mobile','Tablet')brand IN ('Apple','Samsung')category NOT IN ('Accessories','Audio')department IN ('IT','HR','Finance')department IN (…) AND salary > 60000city IN ('Dhaka','Sylhet','Chittagong')on orderspayment_method IN ('Card','bKash')- IN cities +
GROUP BY city+ COUNT - IN cities +
ORDER BY total_amount DESC LIMIT 10
MySQL Workbench Practical
Practice checklist
SELECT * FROM products;- Text IN (category)
- Numeric IN (price IN (1200, 2500, 4500))
- NOT IN
- IN + AND (brand)
- IN + OR (price)
- ORDER BY price DESC
- LIMIT 5
- GROUP BY category with IN
- DISTINCT brand with IN
IN ('A%','B%') — % wildcard কাজ করে না।Common Beginner Mistakes
1 — IN কে BETWEEN ভাবা
age IN (18, 25) = শুধু ১৮ বা ২৫ — ১৮ থেকে ২৫ সব নয়।
2 — Quotes ভুলে যাওয়া
3 — LIKE syntax ভিতরে IN
4 — Continuous range-এ লম্বা IN
age IN (18,19,…,25) কাজ করে কিন্তু লম্বা — বরং BETWEEN 18 AND 25।
5 — NOT IN এবং NULL (বিগিনার সতর্কতা)
SQL-এ NULL মানে “অজানা”। list বা column-এ NULL থাকলে NOT IN কখনো কখনো অপ্রত্যাশিত খালি result দিতে পারে (three-valued logic)।
SQL Execution Flow (simplified)
Industry Use Cases
- Analyst: selected cities / departments / segments
- Data Scientist: experiment groups, category filters
- BI: dashboard multi-select filters
- Data Engineer: ETL include/exclude lists, drop test records
- Finance: account types, branches, txn types
- E-commerce: brands, categories, payment methods
Performance Tips (beginner)
- একই column-এ অনেক OR-এর চেয়ে IN প্রায়ই পরিষ্কার
- Filter column-এ index সাহায্য করতে পারে
- অতিরিক্ত বিশাল IN list এড়াও — অন্য strategy লাগতে পারে
- Range → BETWEEN; pattern → LIKE/REGEXP
- প্রথমে clear & correct SQL — optimizer অনেক সময় নিজেই সাজায়
Interactive Classroom Activities
কার্ডে ক্লিক করে উত্তর দেখো।
Mini Project — Filtering System
Part 14 tables ব্যবহার করে Data Analyst task:
- Customers selected cities
- Customers selected countries
- Products selected categories
- Products selected brands
- Employees selected departments
- Orders selected payments
- Exclude categories
- IN + AND
- IN + GROUP BY
- IN + ORDER BY + LIMIT
- IN + DISTINCT
- Compare IN vs BETWEEN (write both examples)
IN Cheat Sheet
IN
city IN ('Dhaka', 'Sylhet', 'Rajshahi')
→ Dhaka OR Sylhet OR Rajshahi
age IN (18, 20, 25)
city NOT IN ('Dhaka', 'Sylhet')
IN → Specific values
BETWEEN → Range
LIKE → Simple text pattern
REGEXP → Complex text patternMCQ (২০+)
Viva Questions
Interview Top 30
Homework
প্রশ্ন (আগে নিজে করো):
- Customers from Dhaka, Sylhet, Chittagong
- Products Laptop/Mobile/Tablet
- Products from selected brands
- Employees IT/HR/Finance
- Orders selected payment methods
- Exclude cities with NOT IN
- IN + AND
- IN + GROUP BY
- IN + ORDER BY + LIMIT
- Explain IN vs BETWEEN with examples