বিষয়সূচী

01

কেন IN — আগে গল্প

১৫ মিনিট
জিজ্ঞেস করো

যদি আমাদের 1,000 জন student থাকে এবং আমরা শুধু CSE, EEE অথবা BBA department-এর student দেখতে চাই, তাহলে কীভাবে করব?

গল্প ১ — University (৫০,০০০ student)

VC: “CSE, EEE এবং BBA department-এর student list দাও।”

CSE EEE BBA MBA LAW English Economics

IN ছাড়া — লম্বা OR

WHERE department = 'CSE' OR department = 'EEE' OR department = 'BBA';
ক্লাসকে জিজ্ঞেস

একই কাজ যদি আরও সহজভাবে লেখা যায়? list আরও লম্বা হলে কী হবে?

WHERE department IN ('CSE', 'EEE', 'BBA');
মনে রাখো: IN = এই list-এর যেকোনো একটি value হলে record-টি নাও।

গল্প ২ — E-commerce

Electronics / Mobile / Laptop ↓ IN ↓ Matching Products

গল্প ৩ — Customer Cities

Marketing: Dhaka, Chittagong, Sylhet, Rajshahi — multiple OR-এর বদলে IN।

গল্প ৪ — Employee Departments

HR: IT, HR, Finance, Marketing — একই column, নির্দিষ্ট list।

Multiple specific values ↓ IN ↓ Any one of these values ↓ Matching rows
02

IN কী?

১০ মিনিট

IN = একই column-এর জন্য একাধিক নির্দিষ্ট value check করার operator।

  • কেন: অনেকগুলো = … OR = … ছোট ও পরিষ্কার করে
  • কখন: নির্দিষ্ট list জানা (city, dept, category)
  • কীভাবে: value list-এর যেকোনো একটিতে সমান হলে TRUE
  • Range নয়: continuous range-এর জন্য BETWEEN
  • Exact values: শুধু তালিকার মান
Teacher Tip: “যাদের নাম Rahim, Karim অথবা Hasan — শুধু তাদের ডাকো।” এটা list, range নয়।
One value → = Several specific values → IN Continuous range → BETWEEN
03

Basic IN সিনট্যাক্স

১০ মিনিট
SELECT * FROM students WHERE department IN ('CSE', 'EEE', 'BBA');
SELECT → কী দেখতে চাই? FROM → কোন table? WHERE → কোন condition? department → কোন column? IN → list-এ আছে কিনা ('CSE'…) → Allowed values
শুধু CSE / EEE / BBA rows — MBA, LAW বাদ
04

IN vs OR

১৫ মিনিট

OR (লম্বা)

WHERE city = 'Dhaka' OR city = 'Chittagong' OR city = 'Sylhet';

IN (ছোট)

WHERE city IN ('Dhaka', 'Chittagong', 'Sylhet');

একই column-এর একই ধরনের exact match-এ দুটো প্রায় একই result দিতে পারে।

ORIN
Multiple conditionsList of values
LongShort
Harder to read (long lists)Easier to read
Good for mixed conditionsBest for same-column value lists
IN সব OR প্রতিস্থাপন করে না।
WHERE city = 'Dhaka' OR salary > 80000;

এখানে conditions আলাদা ধরনের — সাধারণ IN use case নয়।

05

Numeric IN

১৫ মিনিট
student_idnameagemarks
1Rahim1880
2Karim2075
3Hasan1990
4Nila2185
5Sumi2070
SELECT * FROM students WHERE age IN (18, 20, 21);
Rahim 18, Karim 20, Nila 21, Sumi 20 — Hasan 19 বাদ
WHERE marks IN (70, 80, 90);
গুরুত্বপূর্ণ: marks IN (70, 80, 90) মানে শুধু ৭০ বা ৮০ বা ৯০ — ৭০ থেকে ৯০ সব নয়।
IN → 70 OR 80 OR 90 BETWEEN → 70, 71, 72, … 90
06

Text / String IN

১৫ মিনিট
WHERE department IN ('CSE', 'EEE', 'BBA'); WHERE city IN ('Dhaka', 'Sylhet', 'Rajshahi'); WHERE category IN ('Laptop', 'Mobile', 'Tablet');

String-এ quotes লাগে।

Wrong

WHERE city IN (Dhaka, Sylhet);

Correct

WHERE city IN ('Dhaka', 'Sylhet');
07

NOT IN

১০ মিনিট
SELECT * FROM students WHERE department NOT IN ('CSE', 'EEE');
IN → list-এর মধ্যে আছে NOT IN → list-এর মধ্যে নেই CSE ❌ EEE ❌ BBA ✅ MBA ✅ LAW ✅

Use: exclude cities / departments / categories / test accounts।

08

IN + AND / OR

১০ মিনিট
SELECT * FROM employees WHERE department IN ('IT', 'Finance') AND salary > 60000;
Department IT OR Finance ↓ AND Salary > 60000 ↓ Final Result
SELECT * FROM products WHERE category IN ('Laptop', 'Mobile') OR price > 100000;

Laptop/Mobile অথবা খুব দামি যেকোনো category — OR-এর অর্থ সাবধানে পড়ো।

09

IN + ORDER BY + LIMIT

১০ মিনিট

“Laptop, Mobile এবং Tablet-এর সবচেয়ে দামি 10টি product দেখাও।”

SELECT * FROM products WHERE category IN ('Laptop', 'Mobile', 'Tablet') ORDER BY price DESC LIMIT 10;
Products → IN categories → Sort price DESC → LIMIT 10
10

IN + GROUP BY

১০ মিনিট

“CSE, EEE এবং BBA-এ কতজন student?”

SELECT department, COUNT(*) AS student_count FROM students WHERE department IN ('CSE', 'EEE', 'BBA') GROUP BY department;
FROM → WHERE + IN → GROUP BY → COUNT → Result
11

IN + DISTINCT

৫ মিনিট
SELECT DISTINCT city FROM customers WHERE city IN ('Dhaka', 'Sylhet', 'Rajshahi');

IN = allowed cities filter · DISTINCT = duplicate city নাম সরানো।

12

= / IN / BETWEEN / LIKE / REGEXP

১৫ মিনিট
OperatorMain PurposeExample
=One exact valuecity = 'Dhaka'
INMultiple specific valuescity IN ('Dhaka','Sylhet')
BETWEENContinuous rangeage BETWEEN 18 AND 25
LIKESimple text patternname LIKE 'A%'
REGEXPComplex text patternname REGEXP '^A'
  • শুধু Dhaka/Sylhet/Rajshahi → IN
  • Age 18–25 → BETWEEN
  • Names starting with A → LIKE (বা REGEXP)
  • ৩ অক্ষর + ৩ সংখ্যা → REGEXP
13

IN vs BETWEEN — সবচেয়ে গুরুত্বপূর্ণ পার্থক্য

১০ মিনিট

IN — selected values

18 20 22 25 শুধু এগুলো

BETWEEN — continuous range

18 ───────────── 25 18 19 20 21 22 23 24 25
IN = Specific Values · BETWEEN = Continuous Range · LIKE = Simple Pattern · REGEXP = Complex Pattern
14

E-commerce Business Case Study

২০ মিনিট

Customers

idnamecitycountrytype
C01RahimDhakaBDRetail
C02KarimSylhetBDRetail
C03SaraChittagongBDWholesale
C04JohnKolkataINRetail
C05NilaRajshahiBDRetail
C06AliDhakaBDVIP
C07MinaKhulnaBDRetail
C08PriyaDelhiINWholesale

Products

idnamecategorybrandprice
P01Galaxy AMobileSamsung28000
P02iPhone SEMobileApple55000
P03IdeaPadLaptopLenovo62000
P04MacBook AirLaptopApple120000
P05iPadTabletApple45000
P06MouseAccessoriesLogitech1200
P07KeyboardAccessoriesLogitech2500
P08Tab MTabletLenovo22000
P09BudsAudioSamsung4500
P10ThinkPadLaptopLenovo95000

Employees

idnamedeptsalary
E01ArifIT65000
E02BelaHR48000
E03ChayanFinance72000
E04DipaSales55000
E05EmonIT90000
E06FariaMarketing50000

Orders

idcustomer_idcitypaymentamount
O01C01DhakaCard28000
O02C02SylhetbKash1200
O03C03ChittagongCard62000
O04C06DhakaCOD4500
O05C05RajshahiNagad22000
O06C07KhulnaCard95000
O07C01DhakabKash2500
O08C03ChittagongCOD120000

১২টি প্রশ্নের সমাধান

  1. city IN ('Dhaka','Sylhet','Chittagong')
  2. country IN ('BD','IN') (বা নির্দিষ্ট দেশ list)
  3. city NOT IN ('Khulna','Rajshahi')
  4. category IN ('Laptop','Mobile','Tablet')
  5. brand IN ('Apple','Samsung')
  6. category NOT IN ('Accessories','Audio')
  7. department IN ('IT','HR','Finance')
  8. department IN (…) AND salary > 60000
  9. city IN ('Dhaka','Sylhet','Chittagong') on orders
  10. payment_method IN ('Card','bKash')
  11. IN cities + GROUP BY city + COUNT
  12. IN cities + ORDER BY total_amount DESC LIMIT 10
15

MySQL Workbench Practical

২০ মিনিট
CREATE DATABASE in_lab; USE in_lab; CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(80), category VARCHAR(40), brand VARCHAR(40), price DECIMAL(10,2) ); INSERT INTO products VALUES (1,'Galaxy A','Mobile','Samsung',28000), (2,'iPhone SE','Mobile','Apple',55000), (3,'IdeaPad','Laptop','Lenovo',62000), (4,'MacBook Air','Laptop','Apple',120000), (5,'iPad','Tablet','Apple',45000), (6,'Mouse','Accessories','Logitech',1200), (7,'Keyboard','Accessories','Logitech',2500), (8,'Tab M','Tablet','Lenovo',22000), (9,'Buds','Audio','Samsung',4500), (10,'ThinkPad','Laptop','Lenovo',95000);

Practice checklist

  1. SELECT * FROM products;
  2. Text IN (category)
  3. Numeric IN (price IN (1200, 2500, 4500))
  4. NOT IN
  5. IN + AND (brand)
  6. IN + OR (price)
  7. ORDER BY price DESC
  8. LIMIT 5
  9. GROUP BY category with IN
  10. DISTINCT brand with IN
SELECT * FROM products WHERE category IN ('Laptop', 'Mobile', 'Tablet') ORDER BY price DESC LIMIT 5;
MacBook Air, ThinkPad, IdeaPad, iPhone SE, iPad …
Mistake: IN ('A%','B%') — % wildcard কাজ করে না।
Best practice: একই column-এর list → IN; continuous range → BETWEEN।
16

Common Beginner Mistakes

১০ মিনিট

1 — IN কে BETWEEN ভাবা

age IN (18, 25) = শুধু ১৮ বা ২৫ — ১৮ থেকে ২৫ সব নয়।

2 — Quotes ভুলে যাওয়া

-- Wrong city IN (Dhaka, Sylhet); -- Correct city IN ('Dhaka', 'Sylhet');

3 — LIKE syntax ভিতরে IN

-- Wrong: % is literal here WHERE name IN ('A%', 'B%'); -- Better for starts with A or B WHERE name LIKE 'A%' OR name LIKE 'B%';

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)।

-- Professional caution: avoid NULLs in NOT IN lists WHERE city NOT IN ('Dhaka', 'Sylhet'); -- Prefer clean lists; handle NULL later in NULL Handling module
আজ শুধু জেনে রাখো: NOT IN + NULL = সাবধান। বিস্তারিত পরের NULL lecture-এ।
17

SQL Execution Flow (simplified)

৫ মিনিট
FROM → WHERE (IN Filter) → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
IN সাধারণত WHERE-এর ভিতরে filter। এটি teaching model — optimizer আলাদা হতে পারে।
18

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
19

Performance Tips (beginner)

৫ মিনিট
  • একই column-এ অনেক OR-এর চেয়ে IN প্রায়ই পরিষ্কার
  • Filter column-এ index সাহায্য করতে পারে
  • অতিরিক্ত বিশাল IN list এড়াও — অন্য strategy লাগতে পারে
  • Range → BETWEEN; pattern → LIKE/REGEXP
  • প্রথমে clear & correct SQL — optimizer অনেক সময় নিজেই সাজায়
20

Interactive Classroom Activities

১৫ মিনিট

কার্ডে ক্লিক করে উত্তর দেখো।

Activity 1 — Predict: city IN ('Dhaka','Sylhet')
শুধু ঐ দুই city-এর rows
Activity 2 — age IN (18,20,22) মানে?
শুধু ১৮ বা ২০ বা ২২ — মাঝের সব নয়
Activity 3 — Age 18 to 25: IN or BETWEEN?
BETWEEN
Activity 4 — Name starts with A: IN or LIKE?
LIKE 'A%' (বা REGEXP)
Activity 5 — Mistake? city IN (Dhaka, Sylhet)
Quotes নেই — 'Dhaka','Sylhet' লাগে
Activity 6 — Mistake? name IN ('A%','B%')
IN-এ % wildcard নয় — LIKE ব্যবহার করো
Activity 7 — Convert OR → IN: dept IT/HR/Finance
department IN ('IT','HR','Finance')
Activity 8 — Convert IN → OR: city IN ('Dhaka','Sylhet')
city='Dhaka' OR city='Sylhet'
Activity 9 — NOT IN ('CSE','EEE'): BBA?
হ্যাঁ — list-এ নেই তাই আসে
Activity 10 — Choose: specific / range / pattern / complex
IN / BETWEEN / LIKE / REGEXP
Activity 11 — NL: Dhaka+Chittagong customers
WHERE city IN ('Dhaka','Chittagong')
Activity 12 — IN + AND: IT/Finance and salary>60k
department IN ('IT','Finance') AND salary > 60000
Activity 13 — IN + ORDER + LIMIT top 10 Laptop/Mobile/Tablet
category IN (…) ORDER BY price DESC LIMIT 10
Activity 14 — IN + GROUP BY CSE/EEE/BBA counts
WHERE department IN (…) GROUP BY department
Activity 15 — Fix: WHERE brand IN (Apple, Samsung)
Quotes: IN ('Apple','Samsung')
21

Mini Project — Filtering System

১৫ মিনিট

Part 14 tables ব্যবহার করে Data Analyst task:

  1. Customers selected cities
  2. Customers selected countries
  3. Products selected categories
  4. Products selected brands
  5. Employees selected departments
  6. Orders selected payments
  7. Exclude categories
  8. IN + AND
  9. IN + GROUP BY
  10. IN + ORDER BY + LIMIT
  11. IN + DISTINCT
  12. Compare IN vs BETWEEN (write both examples)
22

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 pattern
Need filtering → WHERE → Multiple specific values → IN → city IN ('Dhaka','Sylhet','Chittagong')
23

MCQ (২০+)

১৫ মিনিট
MCQ 1. IN মানে? A) range B) specific list C) pattern D) sort
B
MCQ 2. IN vs OR same column? A) কখনো এক নয় B) প্রায়ই সমতুল্য C) শুধু DATE D) error
B
MCQ 3. age IN (18,25)? A) 18–25 সব B) শুধু 18 বা 25 C) 19–24 D) error
B
MCQ 4. Age 18–25 best? A) IN B) BETWEEN C) LIKE D) REGEXP
B
MCQ 5. Starts with A? A) IN ('A%') B) LIKE 'A%' C) BETWEEN D) = 'A'
B
MCQ 6. NOT IN করে? A) list ভিতরে B) list বাইরে C) sort D) join
B
MCQ 7. Strings-এ quotes? A) না B) হ্যাঁ C) শুধু number D) কখনো না
B
MCQ 8. Numbers-এ quotes? A) সাধারণত না B) অবশ্যই C) শুধু IN D) error
A
MCQ 9. Mixed OR city=Dhaka OR salary>80000 → IN?
না — আলাদা condition types
MCQ 10. IN + AND মানে?
list match এবং অন্য condition
MCQ 11. Top N in categories?
IN + ORDER BY + LIMIT
MCQ 12. Counts per selected dept?
IN + GROUP BY + COUNT
MCQ 13. DISTINCT + IN?
filter list তারপর unique values
MCQ 14. % inside IN?
literal — wildcard নয়
MCQ 15. NOT IN + NULL caution?
unexpected empty results possible
MCQ 16. Long 18..25 as IN?
কাজ করে কিন্তু BETWEEN ভালো
MCQ 17. IN hosts in flow?
WHERE
MCQ 18. Best for brands Apple/Samsung?
IN
MCQ 19. Complex EMP code pattern?
REGEXP
MCQ 20. Exact one city Dhaka?
=
MCQ 21. Exclude two cities?
NOT IN
MCQ 22. Payment Card or bKash?
payment IN ('Card','bKash')
24

Viva Questions

১০ মিনিট
Viva 1. IN কী?
একাধিক নির্দিষ্ট value list match
Viva 2. কেন ব্যবহার?
লম্বা OR ছোট ও পরিষ্কার
Viva 3. IN vs OR?
same-column lists-এ IN সহজ; mixed OR আলাদা
Viva 4. IN vs BETWEEN?
specific vs continuous range
Viva 5. Numbers-এ IN?
হ্যাঁ
Viva 6. Strings-এ IN?
হ্যাঁ — quotes সহ
Viva 7. NOT IN?
list-এ নেই এমন rows
Viva 8. AND সাথে?
হ্যাঁ
Viva 9. GROUP BY সাথে?
হ্যাঁ — আগে WHERE IN
Viva 10. ORDER BY সাথে?
হ্যাঁ
Viva 11. LIMIT সাথে?
হ্যাঁ
Viva 12. IN-এ %?
wildcard নয়
Viva 13. Names starting A?
LIKE 'A%'
Viva 14. NULL + NOT IN?
সাবধান — surprising results
Viva 15. Teaching flow-এ কোথায়?
WHERE
Viva 16. কখন IN নয়?
range বা pattern চাইলে
Viva 17. Conceptual?
value list-এর যেকোনো একটিতে equal
Viva 18. Quotes mistake?
unquoted string → error/wrong
Viva 19. Core memory?
IN=specific · BETWEEN=range · LIKE=simple · REGEXP=complex
Viva 20. Industry?
multi-select filters, exclude lists
Viva 21. DISTINCT + IN?
allowed set then unique
Viva 22. Huge IN lists?
clear থাকলে ঠিক; খুব বড় হলে অন্য design
25

Interview Top 30

১৫ মিনিট
IV 1. Employees IT/HR/Finance
department IN ('IT','HR','Finance') · ভুল: BETWEEN · ফলো: NOT IN? · ইউজ: HR
IV 2. OR → IN
same column ORs collapse to IN · ভুল: mixed OR · ফলো: show rewrite · ইউজ: cleanup
IV 3. IN → OR
expand list to OR equals · ভুল: add AND · ফলো: readability · ইউজ: mentoring
IV 4. IN vs BETWEEN
list vs range · ভুল: age IN(18,25)=18–25 · ফলো: example · ইউজ: analytics
IV 5. IN vs LIKE
exact list vs pattern · ভুল: IN ('A%') · ফলো: starts with · ইউজ: search
IV 6. NOT IN
exclude list · ভুল: != only one · ফলো: NULL · ইউজ: cleansing
IV 7. NULL with NOT IN
three-valued logic surprise · ভুল: ignore NULL · ফলো: IS NULL · ইউজ: data quality
IV 8. IN + GROUP BY
filter then group · ভুল: HAVING IN always · ফলো: COUNT · ইউজ: dashboards
IV 9. IN + ORDER BY
filter then sort · ভুল: sort before filter mentally · ফলো: DESC · ইউজ: reports
IV 10. IN + LIMIT
filter+sort+top N · ভুল: LIMIT first · ফলো: pagination · ইউজ: UI
IV 11. When not IN
range/pattern/mixed predicates · ভুল: force IN · ফলো: choose op · ইউজ: review
IV 12. How IN works
membership test any equal · ভুল: fuzzy match · ফলো: optimizer · ইউজ: interviews
IV 13. Cities multi-select
city IN (…) · ভুল: LIKE '%Dhaka%' · ফলো: NOT IN · ইউজ: marketing
IV 14. Brands filter
brand IN (…) · ভুল: REGEXP · ফলো: + price · ইউজ: catalog
IV 15. Payments filter
payment_method IN (…) · ভুল: BETWEEN · ফলো: GROUP BY · ইউজ: finance
IV 16. Quotes on strings
required · ভুল: bare words · ফলো: numbers · ইউজ: debugging
IV 17. Numeric exact scores
marks IN (70,80,90) · ভুল: BETWEEN · ফলো: why · ইউজ: exams
IV 18. Long consecutive ages
prefer BETWEEN · ভুল: giant IN · ফলো: maintainability · ইউজ: code quality
IV 19. IN + AND salary
dept list AND salary> · ভুল: OR · ফলো: multiple depts · ইউজ: payroll
IV 20. IN + OR price
category IN OR price> · ভুল: misread OR · ফলো: parentheses · ইউজ: promos
IV 21. DISTINCT cities in set
SELECT DISTINCT city WHERE city IN · ভুল: GROUP without need · ফলো: count · ইউজ: QA
IV 22. Exclude categories
NOT IN · ভুল: LIKE · ফলো: NULL · ইউজ: merchandising
IV 23. Performance tip
clear IN; index; avoid huge lists · ভুল: always faster myth · ফলো: EXPLAIN · ইউজ: DBA
IV 24. Teaching memory
IN specific · ভুল: pattern · ফলো: compare table · ইউজ: training
IV 25. Convert requirement NL→SQL
multi cities → IN · ভুল: BETWEEN · ফলো: write query · ইউজ: BA handoff
IV 26. Same as many OR?
yes for same-column equals · ভুল: always · ফলো: counterexample · ইউজ: rewrite
IV 27. Test accounts exclude
user_type NOT IN ('test','bot') · ভুল: delete prod · ফলো: ETL · ইউজ: engineering
IV 28. Dashboard multi-filter
IN from UI multi-select · ভুল: one = only · ফলো: empty list · ইউজ: BI
IV 29. Common bug % in IN
use LIKE/REGEXP · ভুল: hope wildcard · ফলো: fix · ইউজ: support
IV 30. Final rule
IN=list membership · ভুল: range/pattern substitute · ফলো: pick tool · ইউজ: daily SQL
26

Homework

বাড়ি

প্রশ্ন (আগে নিজে করো):

  1. Customers from Dhaka, Sylhet, Chittagong
  2. Products Laptop/Mobile/Tablet
  3. Products from selected brands
  4. Employees IT/HR/Finance
  5. Orders selected payment methods
  6. Exclude cities with NOT IN
  7. IN + AND
  8. IN + GROUP BY
  9. IN + ORDER BY + LIMIT
  10. Explain IN vs BETWEEN with examples
উত্তর ১
WHERE city IN ('Dhaka','Sylhet','Chittagong');
উত্তর ২
WHERE category IN ('Laptop','Mobile','Tablet');
উত্তর ৩
WHERE brand IN ('Apple','Samsung','Lenovo');
উত্তর ৪
WHERE department IN ('IT','HR','Finance');
উত্তর ৫
WHERE payment_method IN ('Card','bKash');
উত্তর ৬
WHERE city NOT IN ('Khulna','Rajshahi');
উত্তর ৭
department IN ('IT','Finance') AND salary > 60000;
উত্তর ৮
WHERE department IN (…) GROUP BY department;
উত্তর ৯
WHERE category IN (…) ORDER BY price DESC LIMIT 10;
উত্তর ১০
IN = specific values (18 OR 25); BETWEEN = continuous 18–25 inclusive।