📋 বিষয়সূচী (Table of Contents)

Student টেবিল — ১০ লক্ষ রেকর্ড থেকে একটা অংশ রাহাত করিমবাণিজ্য৩.২ সাদিয়া আক্তারCSE৩.৯ তানভীর হাসানEEE৩.৭ মিথিলা রহমানCSE৩.৮ আরও ৯,৯৯,৯৯৬ সারি WHERE Department = 'CSE' AND GPA > 3.5
যে সারিগুলো হলুদ রঙে চিহ্নিত, শুধু সেগুলোই শর্ত মেলে — WHERE ঠিক এই কাজটাই করে, বাকিদের বাদ দিয়ে দেয়।
01

আগে গল্প, তারপর কোড

⏱ ১৫ মিনিট
🎓 গল্প: বিশ্ববিদ্যালয়ের ডেটাবেজ একটা বিশ্ববিদ্যালয়ের ডেটাবেজে ৫০,০০০ শিক্ষার্থীর রেকর্ড আছে। অধ্যক্ষ (Principal) হঠাৎ জিজ্ঞেস করলেন — "শুধু CSE বিভাগের শিক্ষার্থী দেখাও", "যাদের GPA ৩.৭৫-এর বেশি তাদের দেখাও", "২০২৫ সালে ভর্তি হওয়াদের দেখাও"। গত ক্লাসে আমরা শিখেছি SELECT দিয়ে ডেটা আনতে হয় — কিন্তু SELECT একা তো সব রেকর্ড এনে দেয়, নির্দিষ্ট কয়েকজনকে বেছে দেয় না।
🙋 নিজেকে জিজ্ঞেস করো
  • ডেটাবেজে ১০ লক্ষ রেকর্ড থাকলে কি সবসময় সবগুলো দেখা দরকার?
  • শুধু CSE বিভাগের শিক্ষার্থী দরকার হলে বাকি সবাইকে কীভাবে বাদ দেব?
  • ৫০০ টাকার কমে পণ্য দরকার হলে ডেটাবেজকে কীভাবে সেটা বলব?

আমাদের চারপাশে "শর্ত দিয়ে বেছে নেওয়া" প্রতিনিয়ত ঘটছে:

রিয়েল-লাইফ ফিল্টারিং-এর উদাহরণ
প্রতিষ্ঠানকী শর্তে ফিল্টার করে
শিক্ষকশুধু ক্লাস ১০-এর শিক্ষার্থী খোঁজেন
হাসপাতালশুধু "O+" ব্লাড গ্রুপের রোগী খোঁজে
Amazonশুধু ৳১,০০০ টাকার কমের পণ্য দেখায়
Facebookশুধু তোমার বন্ধুদের পোস্ট দেখায়, সবার নয়
ব্যাংকশুধু ৳৫০,০০০-এর বেশি ব্যালেন্স আছে এমন গ্রাহক খোঁজে

প্রতিটা জায়গায় লক্ষ কোটি রেকর্ডের মধ্যে থেকে একটা শর্ত দিয়ে ঠিক দরকারি অংশটুকু বের করে আনা হচ্ছে। SQL-এ এই কাজটাই করে WHERE ক্লজ।

ডেটাবেজ
১০,০০,০০০ রেকর্ড
WHERE শর্ত
Department = 'CSE'
মিলে যাওয়া রেকর্ড
মাত্র কয়েকশো

অর্থাৎ, WHERE হলো ডেটাবেজকে দেওয়া একটা নিয়ম — "শুধু এই শর্ত মিললে তবেই দেখাও, নাহলে বাদ দাও"। বাকি ক্লাসে ধাপে ধাপে দেখব কতভাবে এই শর্ত লেখা যায়।

02

শূন্য থেকে শুরু

⏱ ১৫ মিনিট

WHERE হলো SQL-এর একটি ক্লজ (অংশ), যা SELECT স্টেটমেন্টের সাথে বসে বলে দেয় — "শুধু কোন কোন সারি (row) দেখাতে হবে"। এটা অনেকটা চালুনির (sieve) মতো কাজ করে — পুরো ডেটা চালুনির উপর দিয়ে ফেলা হয়, আর যেগুলো শর্ত মেলে শুধু সেগুলোই নিচে পড়ে।

টেবিল
সব সারি
শর্ত (Condition)
সত্যি না মিথ্যা যাচাই
মিলে যাওয়া সারি
আউটপুট

ধরে নিই আমাদের একটা Student টেবিল আছে (Student Management System-এর জন্য):

টেবিল: Student
IDNameDepartmentGPAAdmissionYear
1রাহাত করিমবাণিজ্য৩.২২০২৪
2সাদিয়া আক্তারCSE৩.৯২০২৫
3তানভীর হাসানEEE৩.৭২০২৪
4মিথিলা রহমানCSE৩.৮২০২৫

সিনট্যাক্স

SELECT column1, column2 FROM table_name WHERE condition;
💡 কেন এটা এত গুরুত্বপূর্ণ WHERE ছাড়া SELECT শুধু "সব দেখাও" বলতে পারে। কিন্তু বাস্তব প্রশ্নগুলো প্রায় সবসময়ই "নির্দিষ্ট কিছু দেখাও" ধরনের — তাই WHERE-ই SQL-এর সবচেয়ে বেশি ব্যবহৃত ক্লজগুলোর একটা।
03

একটা একটা করে সব অপারেটর

⏱ ২৫ মিনিট

Student টেবিল ব্যবহার করেই প্রতিটা অপারেটর শিখব।

= (সমান)

বাস্তব উদাহরণ "শুধু CSE বিভাগের শিক্ষার্থী দেখাও"
SELECT Name, Department FROM Student WHERE Department = 'CSE';
✔ Expected Output
NameDepartment
সাদিয়া আক্তারCSE
মিথিলা রহমানCSE

ব্যাখ্যা: WHERE-এর পরে Department = 'CSE' মানে — শুধু যাদের Department কলামের মান হুবহু 'CSE', তাদেরই আনো।

> (বড়)

বাস্তব উদাহরণ "যাদের GPA ৩.৭৫-এর বেশি"
SELECT Name, GPA FROM Student WHERE GPA > 3.75;
✔ Expected Output
NameGPA
সাদিয়া আক্তার৩.৯
মিথিলা রহমান৩.৮

< (ছোট)

বাস্তব উদাহরণ "যাদের GPA ৩.৫-এর কম"
SELECT Name, GPA FROM Student WHERE GPA < 3.5;
✔ Expected Output
NameGPA
রাহাত করিম৩.২

>= (বড় বা সমান)

বাস্তব উদাহরণ "GPA ৩.৭ বা তার বেশি"
SELECT Name, GPA FROM Student WHERE GPA >= 3.7;
✔ Expected Output
NameGPA
সাদিয়া আক্তার৩.৯
তানভীর হাসান৩.৭
মিথিলা রহমান৩.৮

<= (ছোট বা সমান)

বাস্তব উদাহরণ "GPA ৩.৭-এর মধ্যে (৩.৭ সহ)"
SELECT Name, GPA FROM Student WHERE GPA <= 3.7;
✔ Expected Output
NameGPA
রাহাত করিম৩.২
তানভীর হাসান৩.৭

!= এবং <> (সমান নয়)

বাস্তব উদাহরণ "CSE ছাড়া বাকি সব বিভাগ"
SELECT Name, Department FROM Student WHERE Department != 'CSE'; -- এভাবেও লেখা যায়: -- WHERE Department <> 'CSE';
✔ Expected Output
NameDepartment
রাহাত করিমবাণিজ্য
তানভীর হাসানEEE
💡 != আর <> দুটোই একই কাজ করে — "সমান নয়"। MySQL-এ দুটোই চলে, তবে != বেশি প্রচলিত।
04

একাধিক শর্ত একসাথে

⏱ ২৫ মিনিট

বাস্তব প্রশ্ন প্রায়ই একটার বেশি শর্ত নিয়ে আসে — "CSE বিভাগ এবং GPA ৩.৫-এর বেশি"। এই কাজের জন্য AND, OR, NOT ব্যবহার হয়।

AND — দুটো শর্তই সত্যি হতে হবে

Department = 'CSE'
GPA > 3.5
দুটোই সত্যি হলে
তবেই আসবে
SELECT Name, Department, GPA FROM Student WHERE Department = 'CSE' AND GPA > 3.50;
✔ Expected Output
NameDepartmentGPA
সাদিয়া আক্তারCSE৩.৯
মিথিলা রহমানCSE৩.৮

OR — যেকোনো একটা সত্যি হলেই হবে

SELECT Name, Department FROM Student WHERE Department = 'CSE' OR Department = 'EEE';
✔ Expected Output
NameDepartment
সাদিয়া আক্তারCSE
তানভীর হাসানEEE
মিথিলা রহমানCSE

NOT — শর্তটাকে উল্টে দেওয়া

SELECT Name, Department FROM Student WHERE NOT Department = 'CSE';
✔ Expected Output — উপরের != উদাহরণের মতোই ফল
NameDepartment
রাহাত করিমবাণিজ্য
তানভীর হাসানEEE
🧠 চিন্তা করো AND ব্যবহার করলে ফলাফল বাড়ে না কমে? আর OR ব্যবহার করলে? — দুটো একই ডেটার উপর প্রয়োগ করে পার্থক্যটা লক্ষ করো।
05

আরও স্মার্টভাবে শর্ত লেখা

⏱ ২০ মিনিট

BETWEEN — একটা রেঞ্জের মধ্যে

বাস্তব উদাহরণ "মার্কস ৭০ থেকে ৯০-এর মধ্যে যাদের"
SELECT Name, GPA FROM Student WHERE GPA BETWEEN 3.5 AND 3.9;
✔ Expected Output
NameGPA
সাদিয়া আক্তার৩.৯
তানভীর হাসান৩.৭
মিথিলা রহমান৩.৮

ব্যাখ্যা: BETWEEN দুই প্রান্তের মানও (৩.৫ এবং ৩.৯) হিসাবের মধ্যে ধরে নেয়।

IN — তালিকার মধ্যে যেকোনো একটা

বাস্তব উদাহরণ "CSE, EEE বা BBA — এই তিন বিভাগের যেকোনো একটা"
SELECT Name, Department FROM Student WHERE Department IN ('CSE', 'EEE', 'BBA');

ব্যাখ্যা: একই কাজ OR দিয়ে বারবার লিখেও করা যেত, কিন্তু IN দিয়ে লেখা অনেক ছোট ও পরিষ্কার।

NOT IN — তালিকার বাইরে

SELECT Name, Department FROM Student WHERE Department NOT IN ('CSE', 'EEE');
✔ Expected Output
NameDepartment
রাহাত করিমবাণিজ্য

LIKE — প্যাটার্ন মিলিয়ে খোঁজা

LIKE ব্যবহার হয় যখন পুরো মান না জেনেও শুধু একটা অংশ দিয়ে খুঁজতে চাই। এর জন্য দুটো বিশেষ চিহ্ন আছে:

চিহ্নঅর্থ
%যেকোনো সংখ্যক (শূন্য বা তার বেশি) অক্ষর
_ঠিক একটা অক্ষর
বাস্তব উদাহরণ "যাদের নাম 'স' দিয়ে শুরু" বা "যাদের ইমেইল '.edu' দিয়ে শেষ"
-- নাম 'স' দিয়ে শুরু SELECT Name FROM Student WHERE Name LIKE 'স%'; -- ইমেইল .edu দিয়ে শেষ SELECT Name FROM Student WHERE Email LIKE '%.edu';
✔ Expected Output (নাম 'স' দিয়ে শুরু)
Name
সাদিয়া আক্তার

IS NULL — খালি মান খোঁজা

বাস্তব উদাহরণ "যাদের ইমেইল এখনো দেওয়া হয়নি"
SELECT Name FROM Student WHERE Email IS NULL;

ব্যাখ্যা: NULL মানে "কোনো মান নেই" — শূন্য (0) বা ফাঁকা লেখা (' ') থেকে সম্পূর্ণ আলাদা। তাই = দিয়ে নয়, বিশেষভাবে IS NULL দিয়ে খুঁজতে হয়।

IS NOT NULL — যাদের মান আছে

SELECT Name FROM Student WHERE Email IS NOT NULL;
💡 সংক্ষেপে BETWEEN রেঞ্জের জন্য, IN তালিকার জন্য, LIKE প্যাটার্নের জন্য, IS NULL / IS NOT NULL খালি মান যাচাইয়ের জন্য — প্রতিটার নিজস্ব একটা কাজ আছে।
06

একটি অনলাইন শপিং সিস্টেম

⏱ ২০ মিনিট
🛒 গল্প ShopBD নামের একটা অনলাইন শপ তাদের Product ডেটাবেজে বিভিন্ন প্রশ্নের উত্তর খুঁজছে। আমরা একে একে SQL লিখব।

১. ৳১,০০০ টাকার কমের পণ্য

SELECT ProductName, Price FROM Product WHERE Price < 1000;

২. শুধু ইলেকট্রনিক্স পণ্য

SELECT ProductName, Category FROM Product WHERE Category = 'ইলেকট্রনিক্স';

৩. ৳৫০০ থেকে ৳২,০০০-এর মধ্যে

SELECT ProductName, Price FROM Product WHERE Price BETWEEN 500 AND 2000;

৪. স্টকে আছে এমন পণ্য

SELECT ProductName, Stock FROM Product WHERE Stock > 0;

৫. নাম "S" দিয়ে শুরু

SELECT ProductName FROM Product WHERE ProductName LIKE 'S%';

৬. নির্দিষ্ট কয়েকটা ব্র্যান্ডের পণ্য

SELECT ProductName, Brand FROM Product WHERE Brand IN ('Samsung', 'Walton', 'Xiaomi');
💡 লক্ষ্য করো প্রতিটা বিজনেস প্রশ্নই আসলে একটা করে শর্ত — শুধু ভাষাটা বাংলা থেকে SQL-এ অনুবাদ করতে হচ্ছে। এই "অনুবাদ করার" দক্ষতাই একজন Data Analyst-এর সবচেয়ে বড় স্কিল।
07

নিজে করে দেখা

⏱ Google Colab / MySQL Workbench

ধাপ ১ — Products টেবিল তৈরি

CREATE TABLE Product ( Product_ID INT, ProductName VARCHAR(50), Category VARCHAR(30), Brand VARCHAR(30), Price DECIMAL(10,2), Stock INT, Email VARCHAR(50) );

ধাপ ২ — নমুনা ডেটা যোগ

INSERT INTO Product VALUES (1, 'Smart Watch', 'ইলেকট্রনিক্স', 'Xiaomi', 1800, 12, NULL); INSERT INTO Product VALUES (2, 'কটন শার্ট', 'পোশাক', 'Local', 850, 40, 'shop1@shopbd.com'); INSERT INTO Product VALUES (3, 'Speaker Mini', 'ইলেকট্রনিক্স', 'Samsung', 950, 0, 'shop2@shopbd.com'); INSERT INTO Product VALUES (4, 'রাইস কুকার', 'হোম অ্যাপ্লায়েন্স', 'Walton', 2200, 10, NULL);

ধাপ ৩ থেকে ৯

ধাপSQLশেখা যায়
WHERE Price < 1000;কম্পারিজন অপারেটর
WHERE Category='ইলেকট্রনিক্স' AND Stock > 0;AND/OR/NOT
WHERE Price BETWEEN 500 AND 2000;BETWEEN
WHERE Brand IN ('Samsung','Walton');IN / NOT IN
WHERE ProductName LIKE 'S%';LIKE
WHERE Email IS NULL;IS NULL / IS NOT NULL
একাধিক শর্ত একসাথেসব একত্রে

ধাপ ৯ — সব একসাথে ব্যবহার

SELECT ProductName, Category, Price FROM Product WHERE Category = 'ইলেকট্রনিক্স' AND Price BETWEEN 500 AND 2000 AND Stock > 0;
✔ Expected Output
ProductNameCategoryPrice
Smart Watchইলেকট্রনিক্স১৮০০

ব্যাখ্যা: তিনটে শর্তই AND দিয়ে জোড়া, তাই একসাথে সবগুলো সত্যি হতে হবে। "Speaker Mini" বাদ পড়েছে কারণ Stock = 0, শর্ত মেলেনি।

⚠️ শুরুতে যা প্রায়ই ভুল হয়
  • লেখা মানের চারপাশে কোটেশন ভুলে যাওয়া
  • = কে == ভাবা
  • AND আর OR গুলিয়ে ফেলা
  • LIKE-এ % বা _ ভুল জায়গায় বসানো
✅ ভালো অভ্যাস একবারে একটা শর্ত যোগ করে টেস্ট করো, তারপর পরেরটা যোগ করো — পুরো জটিল শর্ত একসাথে না লিখে ধাপে ধাপে বানানো ভালো।
08

শুরুতে যেসব ভুল সবাই করে

⏱ শুরুর দিকে সবার হয়
ভুলসমাধান
লেখা মানে কোটেশন না দেওয়াটেক্সট মান সবসময় ' ' এর ভেতর লিখতে হবে, যেমন Department = 'CSE'
= এর জায়গায় ==SQL-এ সমান বোঝাতে একটাই = চিহ্ন
AND আর OR গুলিয়ে ফেলাAND মানে "দুটোই লাগবে", OR মানে "যেকোনো একটাই যথেষ্ট" — কাগজে লিখে যাচাই করে নাও
LIKE-এর wildcard ভুল ব্যবহার% মানে যেকোনো লম্বার লেখা, _ মানে ঠিক একটা অক্ষর — গুলিয়ে ফেলো না
= NULL লেখাNULL খুঁজতে সবসময় IS NULL লিখতে হয়, = NULL কখনো কাজ করে না
BETWEEN ভুলভাবে ব্যবহারছোট মান আগে, বড় মান পরে লিখতে হয় — BETWEEN 2000 AND 500 ভুল
অপারেটরের অগ্রাধিকার না বোঝাAND ও OR একসাথে থাকলে bracket () দিয়ে স্পষ্ট করে দাও কোনটা আগে হিসাব হবে
09

প্রফেশনালরা যেভাবে WHERE ব্যবহার করেন

⏱ প্রফেশনালরা যা করেন
  • আগেই ফিল্টার করো — যত আগে সম্ভব অপ্রয়োজনীয় ডেটা বাদ দিলে বাকি প্রসেসিং দ্রুত হয়।
  • পড়ার মতো শর্ত লেখো — জটিল শর্তকে একাধিক লাইনে ভেঙে, bracket দিয়ে গুছিয়ে লেখা।
  • অকারণে জটিলতা এড়াও — একটা সরল WHERE দিয়ে যা হয়, তা অহেতুক জটিল করার দরকার নেই।
  • ইনডেক্স করা কলাম ব্যবহার করো (কনসেপ্ট) — যে কলামে বারবার WHERE দেওয়া হয়, সেটাতে "ইনডেক্স" থাকলে খোঁজা অনেক দ্রুত হয় — বইয়ের সূচিপত্রের মতো।
  • ছোট ডেটাসেটে টেস্ট করো — বড় প্রোডাকশন ডেটাবেজে চালানোর আগে ছোট নমুনায় শর্তটা ঠিকমতো কাজ করছে কিনা যাচাই করে নাও।
10

করে দেখাও, বলে দেখাও

⏱ ক্লাসে একসাথে করার জন্য
🧠 অ্যাক্টিভিটি ১ — আউটপুট অনুমান করো SELECT Name FROM Student WHERE GPA >= 3.7 AND Department = 'CSE'; — কারা ফলাফলে থাকবে?
🧠 অ্যাক্টিভিটি ২ — গল্প থেকে SQL লেখো "শুধু তাদের দেখাও যাদের ইমেইল দেওয়া আছে এবং যারা ২০২৫ সালে ভর্তি হয়েছে" — SQL লেখো।
🧠 অ্যাক্টিভিটি ৩ — ভুল ধরো SELECT * FROM Product WHERE Price = '৫০০'; — এখানে সংখ্যার চারপাশে কোটেশন দেওয়া ঠিক হয়েছে কি?
🧠 অ্যাক্টিভিটি ৪ — সঠিক অপারেটর বলো "দাম ঠিক ৫০০ থেকে ১০০০-এর মধ্যে (দুই প্রান্তসহ)" — এর জন্য কোন অপারেটর মানানসই: BETWEEN নাকি শুধু > আর <?
🧠 অ্যাক্টিভিটি ৫ — মিলাও বাম কলামের প্রশ্নের সাথে ডান কলামের সঠিক SQL সমাধান মেলাও: (ক) "শুধু নির্দিষ্ট কয়েকটা শহর" (খ) "নাম দিয়ে খোঁজা" (গ) "খালি ইমেইল খোঁজা" — উত্তর: IN, LIKE, IS NULL।
11

এক নজরে সবকিছু

⏱ ক্লাস শেষের সারসংক্ষেপ

কুইক রিভিশন নোট

অপারেটর/কীওয়ার্ডকাজ
=, !=, >, <, >=, <=মান তুলনা করে
ANDসব শর্ত সত্যি হতে হয়
ORযেকোনো একটা শর্ত সত্যি হলেই হয়
NOTশর্ত উল্টে দেয়
BETWEENএকটা রেঞ্জের মধ্যে (দুই প্রান্তসহ)
IN / NOT INতালিকার মধ্যে আছে / নেই
LIKEপ্যাটার্ন মিলিয়ে খোঁজে (%, _)
IS NULL / IS NOT NULLখালি মান আছে কি নেই

মৌখিক (Viva) প্রশ্ন

  • WHERE ক্লজ কী কাজ করে?
  • AND আর OR-এর মধ্যে পার্থক্য কী?
  • BETWEEN কি দুই প্রান্তের মান ধরে রাখে?
  • = NULL কেন কাজ করে না?
  • LIKE-এ % আর _ এর পার্থক্য কী?

MCQ (উত্তরসহ)

১. NULL মান খুঁজতে কোনটি ব্যবহার করতে হয়? (ক) = NULL (খ) IS NULL (গ) == NULL (ঘ) LIKE NULL
উত্তর: (খ) IS NULL
২. দুটো শর্তই সত্যি হতে হলে কোনটি ব্যবহার হয়? (ক) OR (খ) NOT (গ) AND (ঘ) IN
উত্তর: (গ) AND
৩. "স" দিয়ে শুরু নাম খুঁজতে কোনটি ঠিক? (ক) LIKE 'স%' (খ) LIKE '%স' (গ) = 'স' (ঘ) IN 'স'
উত্তর: (ক) LIKE 'স%'
৪. তিনটি নির্দিষ্ট বিভাগের যেকোনো একটা খুঁজতে সবচেয়ে ছোট লেখা কোনটি? (ক) তিনবার OR (খ) IN (গ) BETWEEN (ঘ) LIKE
উত্তর: (খ) IN
৫. GPA ৩.৫ থেকে ৩.৯ (দুই প্রান্তসহ) খুঁজতে কোনটি সবচেয়ে মানানসই? (ক) BETWEEN 3.5 AND 3.9 (খ) IN (3.5, 3.9) (গ) LIKE '3.5-3.9' (ঘ) = 3.5
উত্তর: (ক) BETWEEN 3.5 AND 3.9

ক্লাসের অনুশীলন

  1. Student টেবিল থেকে শুধু "EEE" বিভাগের শিক্ষার্থীদের নাম আনো।
  2. যাদের GPA ৩.৫-এর বেশি এবং ২০২৫ সালে ভর্তি, তাদের দেখাও।
  3. নাম "ম" দিয়ে শুরু এমন শিক্ষার্থী খুঁজে বের করো।
  4. CSE অথবা BBA বিভাগের শিক্ষার্থীদের একসাথে দেখাও।

বাড়ির কাজ

নিজের একটা কাল্পনিক "Order" টেবিল কল্পনা করো (Order_ID, CustomerName, City, Amount, Status)। নিচের প্রতিটির জন্য SQL লেখো:
  1. শুধু ঢাকার অর্ডার দেখাও।
  2. যাদের Amount ৫০০-এর বেশি এবং Status = 'Delivered', তাদের দেখাও।
  3. যাদের নাম "র" দিয়ে শুরু, তাদের দেখাও।
  4. যেসব অর্ডারের City এখনো ফাঁকা (NULL), সেগুলো দেখাও।
12

ইউজার থেকে আউটপুট পর্যন্ত

⏱ শেখার অংশ
ইউজার
প্রশ্ন করে
WHERE শর্ত
লেখা হয়
ডেটাবেজ সার্চ
প্রতিটা সারি যাচাই
মিলে যাওয়া সারি
আউটপুট

একক শর্ত বনাম একাধিক শর্ত

একক শর্ত

WHERE GPA > 3.5;
একটামাত্র নিয়ম যাচাই হয় — সহজ, দ্রুত বোঝা যায়।

একাধিক শর্ত

WHERE GPA > 3.5 AND Department = 'CSE';
একাধিক নিয়ম AND/OR দিয়ে জোড়া লাগানো হয় — জটিল কিন্তু নির্ভুল ফিল্টারিং সম্ভব করে।
13

পাশাপাশি দেখে তফাত বোঝা

⏱ শেখার অংশ

AND বনাম OR

AND

সব শর্ত একসাথে সত্যি হতে হয় — ফলাফল সাধারণত কম আসে।

OR

যেকোনো একটা শর্ত সত্যি হলেই হয় — ফলাফল সাধারণত বেশি আসে।

IN বনাম BETWEEN

IN

নির্দিষ্ট কয়েকটা আলাদা মানের তালিকা থেকে মেলানোর জন্য — যেমন নির্দিষ্ট কয়েকটা বিভাগ।

BETWEEN

একটা ধারাবাহিক রেঞ্জের মধ্যে মেলানোর জন্য — যেমন দাম বা তারিখের সীমা।

LIKE বনাম =

LIKE

আংশিক মিল বা প্যাটার্ন খোঁজার জন্য, wildcard (%, _) সহ ব্যবহার হয়।

=

হুবহু সম্পূর্ণ মিল দরকার হলে ব্যবহার হয়, wildcard চলে না।

IS NULL বনাম = NULL

IS NULL

সঠিক পদ্ধতি — SQL-এ NULL মান শনাক্ত করার একমাত্র উপায়।

= NULL

ভুল ব্যবহার — এটা কখনো কোনো ফলাফল দেয় না, কারণ NULL-এর সাথে কোনো তুলনাই "সমান" হয় না।

!= বনাম <>

!=

"সমান নয়" বোঝাতে বহুল ব্যবহৃত, প্রায় সব ডেটাবেজেই কাজ করে।

<>

একই অর্থ বহন করে, SQL স্ট্যান্ডার্ডের মূল সংস্করণ — দুটোই সমানভাবে গ্রহণযোগ্য।
14

ShopBD — অনলাইন শপিং ডেটাবেজে সব WHERE অপারেশন

⏱ শেখার অংশ

আগের ক্লাসের মতোই ShopBD-এর Product টেবিল ব্যবহার করে আজকের শেখা সবগুলো WHERE অপারেশন একসাথে প্রয়োগ করি।

CREATE TABLE Product ( Product_ID INT, ProductName VARCHAR(50), Category VARCHAR(30), Brand VARCHAR(30), Price DECIMAL(10,2), Stock INT, Email VARCHAR(50) ); INSERT INTO Product VALUES (1, 'Smart Watch', 'ইলেকট্রনিক্স', 'Xiaomi', 1800, 12, NULL); INSERT INTO Product VALUES (2, 'কটন শার্ট', 'পোশাক', 'Local', 850, 40, 'shop1@shopbd.com'); INSERT INTO Product VALUES (3, 'Speaker Mini', 'ইলেকট্রনিক্স', 'Samsung', 950, 0, 'shop2@shopbd.com'); INSERT INTO Product VALUES (4, 'রাইস কুকার', 'হোম অ্যাপ্লায়েন্স', 'Walton', 2200, 10, NULL); INSERT INTO Product VALUES (5, 'Sneakers', 'পোশাক', 'Local', 1600, 8, 'shop3@shopbd.com');
কাজSQL
কম্পারিজন — ১০০০-এর কম দামWHERE Price < 1000;
AND — ইলেকট্রনিক্স + স্টকে আছেWHERE Category='ইলেকট্রনিক্স' AND Stock>0;
OR — দুই ক্যাটাগরির যেকোনোটাWHERE Category='পোশাক' OR Category='ইলেকট্রনিক্স';
BETWEEN — দামের রেঞ্জWHERE Price BETWEEN 800 AND 2000;
IN — নির্দিষ্ট ব্র্যান্ডWHERE Brand IN ('Samsung','Walton');
LIKE — 'S' দিয়ে শুরু নামWHERE ProductName LIKE 'S%';
IS NULL — ইমেইল নেই এমন পণ্যWHERE Email IS NULL;
কম্বাইন্ড — সব একসাথেWHERE Category='ইলেকট্রনিক্স' AND Price<2000 AND Stock>0;
🎯 চ্যালেঞ্জ নিজে চেষ্টা করো — "পোশাক ক্যাটাগরির মধ্যে যাদের ইমেইল দেওয়া আছে এবং দাম ১০০০ টাকার বেশি" — এই প্রশ্নের SQL লিখতে পারো?
15

প্রতিদিন যারা WHERE ব্যবহার করেন

⏱ শেখার অংশ
পেশাWHERE দিয়ে যা করেন
Data Analystনির্দিষ্ট সময়কাল, অঞ্চল বা গ্রাহক গোষ্ঠীর ডেটা বেছে নিয়ে রিপোর্ট বানান
Data Scientistমডেল ট্রেনিংয়ের আগে অপ্রাসঙ্গিক বা ভুল ডেটা বাদ দিয়ে ডেটাসেট পরিষ্কার করেন
Business Intelligence Analystনির্দিষ্ট শর্ত মেলা ডেটা দিয়ে ড্যাশবোর্ড ও KPI রিপোর্ট বানান
Database Administrator (DBA)নির্দিষ্ট শর্তে সমস্যাযুক্ত রেকর্ড খুঁজে বের করে সিস্টেম পরীক্ষা করেন

যেমন — একজন Data Analyst প্রতিদিন জিজ্ঞেস করতে পারেন: "গত সপ্তাহে কোন কোন অর্ডার ঢাকার বাইরে থেকে এসেছে এবং এখনো ডেলিভার হয়নি?" — এই প্রশ্নের উত্তরও একটা WHERE-ভিত্তিক query।

16

বড় ডেটাবেজে WHERE কেন গুরুত্বপূর্ণ

⏱ শেখার অংশ

যখন টেবিলে হাজার-লক্ষ নয়, বরং কোটি কোটি রেকর্ড থাকে, তখন WHERE কীভাবে লেখা হচ্ছে তা সরাসরি সিস্টেমের গতি ঠিক করে দেয়।

  • ফিল্টারিং এফিশিয়েন্সি — যত কম রেকর্ডের উপর হিসাব করতে হয়, ততই দ্রুত ফলাফল আসে। তাই যতটা সম্ভব নির্দিষ্ট শর্ত দেওয়া ভালো।
  • ইনডেক্স (কনসেপ্ট মাত্র) — বইয়ের সূচিপত্র যেমন পাতা উল্টে না গিয়েও নির্দিষ্ট বিষয় খুঁজে দেয়, ডেটাবেজের "ইনডেক্স" ঠিক তেমনই — নির্দিষ্ট কলামে ইনডেক্স থাকলে WHERE-এর খোঁজাখুঁজি অনেক দ্রুত হয়।
  • কেন ভালো WHERE লেখা গুরুত্বপূর্ণ — ভুল বা অতিরিক্ত জটিল শর্ত পুরো সিস্টেমকে ধীর করে দিতে পারে, বিশেষ করে লাইভ ওয়েবসাইট বা অ্যাপে যেখানে প্রতি সেকেন্ডে হাজারো query চলে।
💡 সহজ কথায় WHERE যত নির্দিষ্ট (specific) হবে, ডেটাবেজের কাজ তত কম হবে, ফলাফল তত দ্রুত আসবে।
17

বিগিনার লেভেল WHERE Clause ইন্টারভিউ প্রশ্ন

⏱ শেখার অংশ
১. WHERE ক্লজ কী?
টেবিলের সারিগুলোকে একটা শর্ত অনুযায়ী ফিল্টার করার SQL ক্লজ।
২. WHERE কি SELECT ছাড়া একা ব্যবহার করা যায়?
না, WHERE সবসময় SELECT, UPDATE বা DELETE-এর মতো কোনো স্টেটমেন্টের সাথে জোড়া লাগে।
৩. = আর LIKE-এর পার্থক্য কী?
= হুবহু মিল খোঁজে, LIKE আংশিক/প্যাটার্ন মিল খোঁজে।
৪. AND আর OR-এর মূল পার্থক্য কী?
AND-এ সব শর্ত সত্যি হতে হয়, OR-এ যেকোনো একটি সত্যি হলেই হয়। ফলো-আপ: "AND সবসময় OR-এর চেয়ে কম রেকর্ড দেয় কি?" — সাধারণত হ্যাঁ, কারণ AND-এ শর্ত কড়াকড়ি বেশি।
৫. BETWEEN কি প্রান্তের মানও অন্তর্ভুক্ত করে?
হ্যাঁ, BETWEEN দুই প্রান্তের মানও (inclusive) হিসাবে ধরে।
৬. IN অপারেটর কেন ব্যবহার হয়?
একাধিক OR শর্তের বদলে সংক্ষেপে একটা তালিকার সাথে মেলানোর জন্য।
৭. % আর _ এর পার্থক্য কী?
% যেকোনো সংখ্যক অক্ষর বোঝায়, _ ঠিক একটা অক্ষর বোঝায়।
৮. = NULL কেন কাজ করে না?
NULL মানে "অজানা/অনুপস্থিত" — তাই কোনো কিছুর সাথে NULL-এর তুলনা করলে ফলাফল কখনো "সত্যি" হয় না, তাই IS NULL ব্যবহার করতে হয়।
৯. NOT অপারেটরের কাজ কী?
একটা শর্তের ফলাফল উল্টে দেয় — সত্যিকে মিথ্যা, মিথ্যাকে সত্যি বানায়।
১০. WHERE ক্লজ query-তে কোথায় বসে?
SELECT ও FROM-এর পরে, ORDER BY-এর আগে।
১১. একাধিক শর্ত একসাথে ব্যবহার করা যায় কি?
হ্যাঁ, AND/OR দিয়ে যতগুলো ইচ্ছা শর্ত জোড়া লাগানো যায়।
১২. != আর <> কি একই কাজ করে?
হ্যাঁ, দুটোই "সমান নয়" বোঝায়, বেশিরভাগ ডেটাবেজে দুটোই সমর্থিত।
১৩. LIKE ব্যবহার করলে case-sensitivity নিয়ে কী মনে রাখতে হয়?
ডেটাবেজ ভেদে LIKE বড়/ছোট হাতের অক্ষর আলাদা ধরতে পারে বা নাও পারে — এটা নির্দিষ্ট ডেটাবেজের কনফিগারেশনের উপর নির্ভর করে।
১৪. NOT IN আর IN-এর পার্থক্য কী?
IN তালিকার মধ্যে থাকা মান খোঁজে, NOT IN তালিকার বাইরের মান খোঁজে।
১৫. একটা কমন বিগিনার ভুল কী?
টেক্সট মানের চারপাশে কোটেশন ভুলে যাওয়া, অথবা = দিয়ে NULL খোঁজার চেষ্টা করা।
১৬. WHERE কি ডেটা পরিবর্তন করে?
না, WHERE শুধু কোন সারি বাছাই হবে তা নির্ধারণ করে, ডেটা পরিবর্তন করে না।
১৭. BETWEEN কি তারিখের (date) জন্যও কাজ করে?
হ্যাঁ, সংখ্যা ছাড়াও তারিখ ও টেক্সটের রেঞ্জেও BETWEEN ব্যবহার করা যায়।
১৮. জটিল শর্তে bracket () কেন দরকার?
AND ও OR একসাথে থাকলে কোন অংশ আগে হিসাব হবে তা স্পষ্ট করতে, নাহলে ভুল ফলাফল আসতে পারে।
১৯. IS NOT NULL কখন ব্যবহার হয়?
যেসব সারিতে একটা কলামে মান আছে (খালি নয়), শুধু সেগুলো বাছাই করতে।
২০. Filtering আর Sorting কি একই জিনিস?
না — Filtering (WHERE) বাছাই করে কোন সারি থাকবে, Sorting (ORDER BY) ঠিক করে কোন ক্রমে দেখানো হবে।
২১. WHERE ক্লজ কি একাধিক টেবিলে কাজ করতে পারে?
JOIN ব্যবহার করলে একাধিক টেবিল একসাথে যুক্ত করে WHERE প্রয়োগ করা যায় (এটা পরের ক্লাসের বিষয়)।
২২. LIKE '%A%' এর অর্থ কী?
যেখানেই 'A' অক্ষরটা থাকুক (শুরুতে, মাঝে বা শেষে) — সেই সব মান মিলবে।
২৩. WHERE-এ সংখ্যার মানে কোটেশন লাগে কি?
না, সংখ্যাসূচক মানে কোটেশনের দরকার নেই, শুধু টেক্সট মানে লাগে।
২৪. কেন ফিল্টারিং প্রথমে করা ভালো?
অপ্রয়োজনীয় ডেটা আগেই বাদ দিলে বাকি প্রসেসিং (sorting, grouping) কম ডেটা নিয়ে দ্রুত হয়।
২৫. ইনডেক্স কী (সহজ কথায়)?
নির্দিষ্ট কলামে দ্রুত খোঁজার জন্য ডেটাবেজের তৈরি একটা "শর্টকাট" গঠন — বইয়ের সূচিপত্রের মতো।
২৬. একই কলামে একাধিক OR-এর বদলে কী ব্যবহার করা ভালো?
IN — কোড ছোট ও পরিষ্কার হয়।
২৭. WHERE-এ ভুল অপারেটর ব্যবহারের ফল কী হতে পারে?
ভুল বা অসম্পূর্ণ ফলাফল আসতে পারে, যা ভুল বিজনেস সিদ্ধান্তের কারণ হতে পারে।
২৮. Data Analyst-রা কেন WHERE নিয়ে এত সময় ব্যয় করেন?
সঠিক প্রশ্নের সঠিক উত্তর পেতে সঠিক ফিল্টারিং জরুরি — ভুল শর্ত মানেই ভুল ইনসাইট।
২৯. NOT BETWEEN বলে কিছু আছে কি?
হ্যাঁ, রেঞ্জের বাইরের মান খুঁজতে NOT BETWEEN ব্যবহার করা যায়।
৩০. নতুন শিক্ষার্থীদের WHERE শেখার সবচেয়ে ভালো উপায় কী?
সরাসরি সিনট্যাক্স মুখস্থ না করে, প্রথমে বাস্তব প্রশ্নটা বাংলায় স্পষ্ট করে বোঝা, তারপর ধাপে ধাপে SQL-এ অনুবাদ করা অভ্যাস করা।