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

হাজিরা রেজিস্টার — Student_ID | Name | Class | Dept | GPA 101রাহাত করিম৯মবিজ্ঞান৩.৪ 102সাদিয়া আক্তার৯মবিজ্ঞান৩.৯ 103তানভীর হাসান৯মবাণিজ্য৩.৭ 104মিথিলা রহমান৯মমানবিক৩.১ আরও ৪৯,৯৯৬ জন SELECT * WHERE Student_ID = 103
৫০,০০০ রেকর্ড থেকে ১ জনকে টেনে বের করাই হলো SELECT-এর কাজ — ঠিক যেমন শিক্ষক আঙুল দিয়ে খাতায় একটি নাম দাগ দেন।
01

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

⏱ ১৫ মিনিট
🏫 গল্প: স্কুলের রেজিস্টার ধরা যাক, তোমাদের স্কুলে ৫০,০০০ শিক্ষার্থীর তথ্য একটা মোটা রেজিস্টারে লেখা আছে — রোল, নাম, ক্লাস, বিভাগ, রেজাল্ট। এখন প্রধান শিক্ষক শুধু Student_ID 10342-এর রেজাল্ট জানতে চান। তিনি কি পুরো রেজিস্টার প্রথম পাতা থেকে শেষ পাতা পর্যন্ত পড়বেন?
🙋 নিজেকে জিজ্ঞেস করো
  • ৫০,০০০ রেকর্ড থাকলে একজনকে কীভাবে খুঁজে বের করা যায়?
  • প্রতিবার কি পুরো রেজিস্টার পড়তে হবে?
  • Google Search যখন এক সেকেন্ডে লক্ষ কোটি পেজ থেকে উত্তর দেয় — সেটা কীভাবে সম্ভব?

বাস্তব জীবনে এই "খুঁজে বের করার" কাজটা প্রতিদিন হাজারো জায়গায় হচ্ছে:

রিয়েল-লাইফ ডেটা রিট্রিভালের উদাহরণ
প্রতিষ্ঠানকী খোঁজেকতজনের মধ্যে থেকে
শিক্ষকএকজন নির্দিষ্ট শিক্ষার্থীর রেজাল্টপুরো ক্লাস/স্কুলের রেকর্ড
হাসপাতালএকজন রোগীর ফাইলহাজারো রোগীর রেকর্ড
Amazonতোমার অর্ডার হিস্টরিকোটি কোটি অর্ডার
Facebookতোমার প্রোফাইল তথ্যশত কোটি ইউজার
ব্যাংকএকটি অ্যাকাউন্টের ব্যালেন্সলক্ষ লক্ষ অ্যাকাউন্ট

এই প্রতিটি জায়গায় তথ্যগুলো একটা ডেটাবেজ-এ (Database) সাজানো থাকে — অনেকটা ডিজিটাল রেজিস্টারের মতো, কিন্তু হাজার গুণ দ্রুত খোঁজা যায়। আর এই "খোঁজার" কাজটা করার জন্য ডেটাবেজের নিজস্ব একটা ভাষা আছে, নাম SQL (Structured Query Language)। আর SQL-এর সবচেয়ে বেশি ব্যবহৃত কমান্ডটাই হলো — SELECT

ডেটাবেজ
৫০,০০০ রেকর্ড
SELECT
কী খুঁজছি বলো
ফলাফল
শুধু যা দরকার

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

02

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

⏱ ১৫ মিনিট

SELECT হলো SQL-এর একটি কমান্ড যা দিয়ে আমরা ডেটাবেজের একটি টেবিল থেকে তথ্য "বেছে" (select করে) বের করে আনি। ইংরেজি শব্দ SELECT মানেই তো "বেছে নেওয়া" — এখানেও ঠিক তাই, অনেক ডেটার মধ্যে থেকে আমরা যেটুকু দরকার সেটুকু বেছে নিচ্ছি।

💡 কেন SELECT সবচেয়ে বেশি ব্যবহৃত কমান্ড ডেটা যোগ করা (INSERT), পরিবর্তন করা (UPDATE), মুছে ফেলা (DELETE) — এসব কাজ মাঝেমধ্যে হয়। কিন্তু ডেটা দেখা/পড়া হয় প্রতিনিয়ত, প্রতি মুহূর্তে — অ্যাপ খোলা থেকে শুরু করে রিপোর্ট বানানো পর্যন্ত সবকিছুর পেছনে থাকে SELECT। তাই একজন Data Analyst-এর দিনের ৮০%-এরও বেশি সময় যায় SELECT লিখেই।

ধরে নিই আমাদের একটা Student নামের টেবিল আছে:

টেবিল: Student
Student_IDNameClassDepartmentGPA
101রাহাত করিমবিজ্ঞান৩.৪
102সাদিয়া আক্তারবিজ্ঞান৩.৯
103তানভীর হাসানবাণিজ্য৩.৭
104মিথিলা রহমানমানবিক৩.১

দুই ধরনের প্রয়োজন

সব ডেটা দরকার

সব শিক্ষার্থীর সব তথ্য একসাথে দেখতে চাই — রিপোর্ট বানানোর সময় যেমনটা লাগে।

নির্দিষ্ট ডেটা দরকার

শুধু নাম আর বিভাগ জানতে চাই — বাকি কিছুর দরকার নেই।

দুটোই SELECT দিয়েই সম্ভব — শুধু লেখার ধরন আলাদা হবে। এখন থেকে আমরা একে একে দুটোই শিখব।

03

তারকা চিহ্ন (*) মানে "সবকিছু"

⏱ ১৫ মিনিট

SQL-এ * চিহ্নের মানে হলো "সব কলাম"। তাই SELECT * লিখলে ডেটাবেজ টেবিলের সবগুলো কলাম ফেরত দেয়।

সিনট্যাক্স

SELECT * FROM Student;
Student টেবিল
৫ কলাম
SELECT *
সব কলাম
সব সারি
✔ Expected Output
Student_IDNameClassDepartmentGPA
101রাহাত করিমবিজ্ঞান৩.৪
102সাদিয়া আক্তারবিজ্ঞান৩.৯
103তানভীর হাসানবাণিজ্য৩.৭
104মিথিলা রহমানমানবিক৩.১
⚠️ প্রফেশনালরা কেন সবসময় SELECT * ব্যবহার করেন না কল্পনা করো, টেবিলে ৫ কলামের বদলে ৫০টা কলাম আছে, আর তুমি শুধু নাম দেখতে চাও। তাহলে অহেতুক বাকি ৪৯টা কলাম টেনে আনা মানেই — সময় নষ্ট, মেমরি নষ্ট, আর নেটওয়ার্কে বাড়তি চাপ। বড় প্রজেক্টে এই ছোট অভ্যাসটাই সিস্টেমকে ধীরগতির করে দেয়।
04

যা দরকার শুধু তা-ই আনো

⏱ ১৫ মিনিট

শুধু নাম আর বিভাগ জানতে চাইলে কলামের নাম কমা (,) দিয়ে আলাদা করে লিখতে হয়:

SELECT Name, Department FROM Student;
✔ Expected Output
NameDepartment
রাহাত করিমবিজ্ঞান
সাদিয়া আক্তারবিজ্ঞান
তানভীর হাসানবাণিজ্য
মিথিলা রহমানমানবিক

একাধিক বিজনেস উদাহরণ

বিভিন্ন প্রয়োজনে ভিন্ন কলাম
প্রয়োজনSQL
শুধু নাম দেখাSELECT Name FROM Student;
নাম ও GPA দেখাSELECT Name, GPA FROM Student;
কাস্টমারের নাম ও শহরSELECT Name, City FROM Customer;
প্রোডাক্টের নাম ও দামSELECT ProductName, Price FROM Product;
💡 কেন এটা দ্রুত ও পরিষ্কার কম কলাম মানে কম ডেটা টানা, কম মেমরি খরচ, আর রেজাল্টও পড়তে সহজ। যে প্রশ্নের উত্তর দরকার, ঠিক ততটুকুই আনা — এটাই ভালো অভ্যাস।
05

একই জিনিস বারবার কেন আসে?

⏱ ১৫ মিনিট

আমাদের Student টেবিলে অনেক শিক্ষার্থী একই বিভাগে আছে — যেমন অনেকেই "বিজ্ঞান" বিভাগের। তাই যদি আমরা শুধু Department কলাম SELECT করি, তাহলে "বিজ্ঞান" শব্দটা বহুবার রিপিট হয়ে আসবে।

SELECT Department FROM Student;
Before — ডুপ্লিকেটসহ
Department
বিজ্ঞান
বিজ্ঞান
বাণিজ্য
মানবিক

এখন যদি শুধু জানতে চাই — "স্কুলে মোট কয়টি ভিন্ন বিভাগ আছে?", তাহলে ডুপ্লিকেট বাদ দিতে হবে। এর জন্য DISTINCT কীওয়ার্ড ব্যবহার করি:

SELECT DISTINCT Department FROM Student;
✔ After — শুধু ইউনিক মান
Department
বিজ্ঞান
বাণিজ্য
মানবিক

আরও উদাহরণ

  • SELECT DISTINCT City FROM Customer; — কাস্টমাররা কোন কোন শহরে থাকে
  • SELECT DISTINCT BloodGroup FROM Donor; — কোন কোন ব্লাড গ্রুপ ডেটাবেজে আছে
💡 মনে রাখার সহজ উপায় DISTINCT মানে "একবার করে" — যতবার একই মান আসুক, তালিকায় সেটা মাত্র একবার দেখাবে।
06

নির্দিষ্ট শর্তে রেকর্ড বাছাই

⏱ ২০ মিনিট

এখন পর্যন্ত আমরা সব রেকর্ড দেখেছি। কিন্তু বাস্তবে প্রশ্নগুলো হয় এমন — "শুধু বিজ্ঞান বিভাগের শিক্ষার্থী দেখাও", "GPA ৩.৫-এর বেশি যাদের", "শুধু ঢাকার কাস্টমার"। এই কাজটাই করে WHERE ক্লজ।

সিনট্যাক্স

SELECT column1, column2 FROM table_name WHERE condition;

কম্পারিজন অপারেটর

অপারেটরঅর্থউদাহরণ
=সমানCity = 'Dhaka'
>বড়Age > 20
<ছোটMarks < 40
>=বড় বা সমানGPA >= 3.5
<=ছোট বা সমানPrice <= 500
!= / <>সমান নয়Status != 'Cancelled'

লজিক্যাল অপারেটর

অপারেটরব্যবহার
ANDএকাধিক শর্ত একসাথে সত্যি হতে হবে
ORশর্তগুলোর যেকোনো একটি সত্যি হলেই হবে
NOTশর্তটিকে উল্টে দেয়

উদাহরণ ১ — বিভাগ অনুযায়ী ফিল্টার

SELECT Name, Department FROM Student WHERE Department = 'বিজ্ঞান';
✔ Expected Output
NameDepartment
রাহাত করিমবিজ্ঞান
সাদিয়া আক্তারবিজ্ঞান

ব্যাখ্যা: প্রথম দুই লাইন কোন কলাম, কোন টেবিল বলছে। তৃতীয় লাইনের WHERE শর্ত দিচ্ছে — শুধু যাদের Department কলামের মান 'বিজ্ঞান', তাদেরই আনো।

উদাহরণ ২ — GPA অনুযায়ী

SELECT Name, GPA FROM Student WHERE GPA > 3.5;
✔ Expected Output
NameGPA
সাদিয়া আক্তার৩.৯
তানভীর হাসান৩.৭

উদাহরণ ৩ — AND দিয়ে একাধিক শর্ত

SELECT Name, Department, GPA FROM Student WHERE Department = 'বিজ্ঞান' AND GPA > 3.5;
✔ Expected Output
NameDepartmentGPA
সাদিয়া আক্তারবিজ্ঞান৩.৯

ব্যাখ্যা: দুটো শর্তই — বিজ্ঞান বিভাগ এবং GPA ৩.৫-এর বেশি — একসাথে সত্যি হতে হবে, তাই মাত্র একজন শিক্ষার্থী মিলেছে।

উদাহরণ ৪ — OR দিয়ে

SELECT Name, Department FROM Student WHERE Department = 'বাণিজ্য' OR Department = 'মানবিক';
✔ Expected Output
NameDepartment
তানভীর হাসানবাণিজ্য
মিথিলা রহমানমানবিক
🧠 চিন্তা করো WHERE City = 'Dhaka' AND Age > 20 — এই শর্তে কারা আসবে? আর যদি AND-এর জায়গায় OR হতো, তাহলে ফলাফল কি বাড়ত না কমত?
07

ছোট থেকে বড়, বড় থেকে ছোট

⏱ ১৫ মিনিট

রেজিস্টারের রেকর্ডগুলো প্রায়ই একটা নির্দিষ্ট ক্রমে দেখতে চাই — যেমন GPA অনুযায়ী সবচেয়ে ভালো ছাত্র থেকে শুরু করে, বা নাম বর্ণানুক্রমে। এই কাজটা করে ORDER BY

কীওয়ার্ডঅর্থ
ASCছোট থেকে বড় (Ascending) — এটাই ডিফল্ট
DESCবড় থেকে ছোট (Descending)

উদাহরণ — GPA অনুযায়ী সাজানো (বেশি থেকে কম)

SELECT Name, GPA FROM Student ORDER BY GPA DESC;
✔ Expected Output
NameGPA
সাদিয়া আক্তার৩.৯
তানভীর হাসান৩.৭
রাহাত করিম৩.৪
মিথিলা রহমান৩.১

উদাহরণ — নাম বর্ণানুক্রমে

SELECT Name FROM Student ORDER BY Name ASC;
💡 বাস্তব ব্যবহার বেতন অনুযায়ী কর্মচারী সাজানো (Salary DESC), পণ্যের দাম অনুযায়ী সাজানো (Price ASC) — এগুলো e-commerce আর HR সিস্টেমে প্রতিদিন ব্যবহার হয়।
08

সব নয়, শুধু উপরের কয়েকটা

⏱ ১০ মিনিট

প্রায়ই ব্যবসায় সব ডেটা দরকার হয় না — শুধু "টপ ৫" বা "সাম্প্রতিক ২০টা" দরকার হয়। যেমন — সেরা ৫ জন শিক্ষার্থী, সর্বশেষ ২০টা অর্ডার। এর জন্য LIMIT ব্যবহার হয়।

SELECT Name, GPA FROM Student ORDER BY GPA DESC LIMIT 5;
✔ Expected Output — সেরা ৫ জন শিক্ষার্থী

উপরের queryটা প্রথমে GPA অনুযায়ী বড় থেকে ছোট সাজাবে, তারপর প্রথম ৫টা সারি দেখাবে।

ব্যবসায়িক প্রয়োজনSQL
সেরা ৫ শিক্ষার্থী... ORDER BY GPA DESC LIMIT 5;
প্রথম ১০ কাস্টমারSELECT * FROM Customer LIMIT 10;
সাম্প্রতিক ২০ অর্ডার... ORDER BY OrderDate DESC LIMIT 20;
09

একটি বিশ্ববিদ্যালয়ের ডেটা বিশ্লেষণ

⏱ ২০ মিনিট
🎓 গল্প একটি বিশ্ববিদ্যালয় তাদের শিক্ষার্থীদের ডেটা বিশ্লেষণ করতে চায়। Registrar অফিস থেকে একে একে কিছু প্রশ্ন আসছে — আমরা প্রতিটার জন্য SQL লিখব।

১. সব শিক্ষার্থী দেখাও

SELECT * FROM Student;

২. শুধু নাম দেখাও

SELECT Name FROM Student;

৩. শুধু CSE বিভাগের শিক্ষার্থী

SELECT Name, Department FROM Student WHERE Department = 'CSE';

৪. যাদের GPA ৩.৫০-এর বেশি

SELECT Name, GPA FROM Student WHERE GPA > 3.50;

৫. কতগুলো ভিন্ন বিভাগ আছে

SELECT DISTINCT Department FROM Student;

৬. GPA অনুযায়ী সাজানো

SELECT Name, GPA FROM Student ORDER BY GPA DESC;

৭. সেরা ৫ শিক্ষার্থী

SELECT Name, GPA FROM Student ORDER BY GPA DESC LIMIT 5;
💡 লক্ষ্য করো প্রতিটা প্রশ্নের উত্তর আমরা আগে শেখা কমান্ডগুলো (SELECT, WHERE, DISTINCT, ORDER BY, LIMIT) একে একে জোড়া লাগিয়ে দিতে পারছি। এটাই SQL শেখার আসল মজা — ছোট ছোট টুকরো জোড়া দিয়ে বড় প্রশ্নের উত্তর বের করা।
10

নিজে করে দেখা

⏱ Google Colab / MySQL Workbench

ধরে নিচ্ছি তোমরা এখনো কোনোদিন SQL লেখোনি — তাই প্রতিটা ধাপ একদম শুরু থেকে দেখানো হলো।

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

CREATE TABLE Student ( Student_ID INT, Name VARCHAR(50), Class INT, Department VARCHAR(30), GPA DECIMAL(3,2) );

লাইন-বাই-লাইন: CREATE TABLE মানে নতুন টেবিল বানাও। কোন কলামের নাম কী হবে আর তাতে কী ধরনের ডেটা (সংখ্যা/লেখা/দশমিক) থাকবে, তা বন্ধনীর ভেতর লেখা হয়েছে।

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

INSERT INTO Student VALUES (101, 'রাহাত করিম', 9, 'বিজ্ঞান', 3.4); INSERT INTO Student VALUES (102, 'সাদিয়া আক্তার', 9, 'বিজ্ঞান', 3.9); INSERT INTO Student VALUES (103, 'তানভীর হাসান', 9, 'বাণিজ্য', 3.7); INSERT INTO Student VALUES (104, 'মিথিলা রহমান', 9, 'মানবিক', 3.1);

ধাপ ৩ থেকে ৯ — একে একে সব কমান্ড চালানো

ধাপSQLশেখা যায়
SELECT * FROM Student;সব ডেটা দেখা
SELECT Name, GPA FROM Student;নির্দিষ্ট কলাম
SELECT DISTINCT Department FROM Student;ডুপ্লিকেট বাদ
... WHERE GPA > 3.5;ফিল্টার করা
... ORDER BY GPA DESC;সাজানো
... LIMIT 2;সীমিত ফলাফল
WHERE...ORDER BY...LIMITসব একসাথে

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

SELECT Name, Department, GPA FROM Student WHERE Department = 'বিজ্ঞান' ORDER BY GPA DESC LIMIT 2;
✔ Expected Output
NameDepartmentGPA
সাদিয়া আক্তারবিজ্ঞান৩.৯
⚠️ শুরুতে যা প্রায়ই ভুল হয়
  • কমান্ডের ক্রম ভুল হওয়া — সঠিক ক্রম সবসময় SELECT → FROM → WHERE → ORDER BY → LIMIT
  • লেখা মানের চারপাশে কোটেশন (' ') না দেওয়া — Department = বিজ্ঞান ভুল, Department = 'বিজ্ঞান' ঠিক
  • প্রতিটা statement-এর শেষে সেমিকোলন (;) ভুলে যাওয়া
✅ ভালো অভ্যাস প্রতিবার একটা কমান্ড লিখেই রান করো, ফলাফল না বুঝে পরের লাইনে যেয়ো না। ভুল হলে error message পড়ো — সেখানেই বলা থাকে কোথায় সমস্যা।
11

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

⏱ শুরুর দিকে সবার হয়
ভুলসমাধান
FROM লিখতে ভুলে যাওয়ামনে রাখো — SELECT একা অচল, তাকে সবসময় বলতে হয় কোন টেবিল থেকে আনবে (FROM)
কলামের নাম বানান ভুলটেবিল বানানোর সময় যে বানানে কলাম লেখা হয়েছিল, ঠিক সেই বানানই ব্যবহার করো
= কে == ভাবাSQL-এ সমান বোঝাতে একটাই = চিহ্ন, প্রোগ্রামিং-এর মতো == নয়
কোটেশন ভুল ব্যবহারলেখা (text) মান সবসময় ' ' এর ভেতর, কিন্তু সংখ্যার দরকার নেই
অকারণে SELECT *যা দরকার শুধু সেই কলাম নাম লেখো
ORDER BY ভুল জায়গায় বসানোক্রম মনে রাখো: SELECT → FROM → WHERE → ORDER BY → LIMIT
DISTINCT না বুঝে ব্যবহারDISTINCT পুরো সারিকে ইউনিক করে, শুধু একটা কলামকে নয় — একাধিক কলাম দিলে পুরো কম্বিনেশন ইউনিক হবে
WHERE-এ ভুল শর্তপ্রথমে কাগজে লিখে শর্তটা যাচাই করো, তারপর SQL-এ অনুবাদ করো
12

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

⏱ প্রফেশনালরা যা করেন
  • শুধু দরকারি কলাম আনো — Data Analyst-রা কখনোই অকারণে সব কলাম টানেন না।
  • প্রোডাকশনে SELECT * এড়িয়ে চলো — লাইভ সিস্টেমে এটা পারফরম্যান্স কমিয়ে দেয়।
  • পড়ার মতো করে লেখো — প্রতিটা ক্লজ নতুন লাইনে লেখা, বড় হাতের কীওয়ার্ড (SELECT, WHERE) — এতে পরে অন্য কেউ কোড বুঝতে পারে।
  • Alias ব্যবহারের প্রাথমিক পরিচয় — SELECT Name AS StudentName FROM Student; — কলামকে সাময়িক নতুন নাম দেওয়া যায়, রিপোর্ট বেশি পরিষ্কার দেখায়।
  • আগেই ফিল্টার করো — WHERE দিয়ে যত আগে সম্ভব অপ্রয়োজনীয় ডেটা বাদ দাও, তাতে বাকি কাজ দ্রুত হয়।
  • পারফরম্যান্স মাথায় রাখো (কনসেপ্ট) — বড় টেবিলে দ্রুত খোঁজার জন্য ডেটাবেজে "ইনডেক্স" ব্যবহার হয় — অনেকটা বইয়ের সূচিপত্রের মতো, যেটা পরের ক্লাসে বিস্তারিত শেখা যাবে।
13

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

⏱ ক্লাসে একসাথে করার জন্য
🧠 অ্যাক্টিভিটি ১ — আউটপুট অনুমান করো SELECT Name FROM Student WHERE GPA >= 3.5; — উপরের Student টেবিল থেকে ফলাফলে কারা কারা থাকবে বলো তো?
🧠 অ্যাক্টিভিটি ২ — গল্প থেকে SQL লেখো "একটা দোকানের মালিক জানতে চান — কোন কোন প্রোডাক্টের দাম ৫০০ টাকার কম, আর সেগুলো দাম অনুযায়ী কম থেকে বেশি সাজানো থাকুক।" — এই বাক্যের জন্য SQL লেখো।
🧠 অ্যাক্টিভিটি ৩ — ভুল ধরো SELECT Name FROM WHERE Department = 'CSE'; — এই queryটায় কী ভুল আছে?
🧠 অ্যাক্টিভিটি ৪ — সঠিক WHERE বলো "শুধু তাদের দেখাও যাদের বয়স ১৮-এর বেশি কিন্তু ২৫-এর কম" — এর জন্য কোন WHERE শর্ত লিখব?
🧠 অ্যাক্টিভিটি ৫ — হাতে সাজাও, তারপর SQL লেখো কাগজে Student তালিকাটা GPA অনুযায়ী হাতে সাজাও, তারপর সেই একই ফলাফল দেওয়ার SQL query লেখো এবং মিলিয়ে দেখো।
14

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

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

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

কমান্ডকাজ
SELECT *সব কলাম আনে
SELECT col1, col2নির্দিষ্ট কলাম আনে
DISTINCTডুপ্লিকেট বাদ দেয়
WHEREশর্ত দিয়ে ফিল্টার করে
ORDER BYফলাফল সাজায় (ASC/DESC)
LIMITফলাফলের সংখ্যা সীমিত করে

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

  • SELECT কী কাজ করে?
  • SELECT * কেন সবসময় ভালো অভ্যাস না?
  • DISTINCT আর সাধারণ SELECT-এর পার্থক্য কী?
  • WHERE ক্লজ কোথায় বসে — SELECT-এর আগে না পরে?
  • ORDER BY-তে ASC আর DESC-এর পার্থক্য কী?

MCQ (উত্তরসহ)

১. কোনটি দিয়ে ডুপ্লিকেট মান বাদ দেওয়া যায়? (ক) WHERE (খ) DISTINCT (গ) LIMIT (ঘ) FROM
উত্তর: (খ) DISTINCT
২. SELECT * FROM Student; — এই queryর কাজ কী? (ক) নির্দিষ্ট কলাম আনা (খ) সব কলাম আনা (গ) টেবিল মুছে ফেলা (ঘ) নতুন টেবিল বানানো
উত্তর: (খ) সব কলাম আনা
৩. ফলাফল সংখ্যায় সীমিত করতে কোন কীওয়ার্ড ব্যবহার হয়? (ক) LIMIT (খ) WHERE (গ) DISTINCT (ঘ) ORDER BY
উত্তর: (ক) LIMIT
৪. GPA বড় থেকে ছোট সাজাতে কোনটি লিখতে হবে? (ক) ORDER BY GPA ASC (খ) ORDER BY GPA DESC (গ) SORT GPA (ঘ) LIMIT GPA
উত্তর: (খ) ORDER BY GPA DESC
৫. দুটো শর্তই সত্যি হতে হলে কোন অপারেটর দরকার? (ক) OR (খ) NOT (গ) AND (ঘ) LIMIT
উত্তর: (গ) AND

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

  1. Student টেবিল থেকে শুধু "মানবিক" বিভাগের শিক্ষার্থীদের নাম আনো।
  2. GPA অনুযায়ী ছোট থেকে বড় সাজিয়ে সবাইকে দেখাও।
  3. প্রথম ৩ জন শিক্ষার্থীর নাম ও GPA আনো।
  4. কতটি ভিন্ন Class আছে তা বের করো।

বাড়ির কাজ

নিজের একটা কাল্পনিক "Customer" টেবিল কল্পনা করো (Customer_ID, Name, City, TotalOrder)। তারপর নিচের প্রতিটির জন্য SQL লেখো:
  1. সব কাস্টমার দেখাও।
  2. শুধু ঢাকার কাস্টমার দেখাও।
  3. যাদের TotalOrder ৫-এর বেশি, তাদের নাম দেখাও, বেশি থেকে কম সাজিয়ে।
  4. কতগুলো ভিন্ন শহর আছে বের করো।
15

SELECT কীভাবে ডেটা রিট্রিভালের ভিত্তি হয়ে উঠল

⏱ শেখার অংশ

১৯৭০ সালে IBM-এর গবেষক Edgar F. Codd "Relational Model" নামে একটা ধারণা প্রকাশ করেন — ডেটাকে সারি ও কলামের টেবিলে সাজানোর পদ্ধতি। এর ভিত্তিতে তৈরি হয় SQL (প্রথমে নাম ছিল SEQUEL), যেখানে ডেটা আনার মূল কমান্ড হিসেবে বেছে নেওয়া হয় SELECT

SELECT এতটা গুরুত্বপূর্ণ হয়ে ওঠার কারণ সহজ — যেকোনো সফটওয়্যার, ওয়েবসাইট বা অ্যাপের পেছনে সবচেয়ে বেশিবার যে কাজটা হয়, তা হলো "ডেটা দেখানো"। তুমি Facebook খুললে, ব্যাংকের অ্যাপে লগইন করলে, বা Google-এ কিছু সার্চ করলে — প্রতিটার পেছনেই লক্ষ লক্ষ বার SELECT চলে। তাই আজ প্রায় ৫০ বছর পরেও SELECT-ই থেকে গেছে ডেটা রিট্রিভালের ভিত্তি — কারণ এর ধারণাটা (শর্ত দিয়ে দরকারি ডেটা বেছে আনা) এখনো সবচেয়ে কার্যকর ও সরল সমাধান।

16

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

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

ফিল্টারিং ও সর্টিং ওয়ার্কফ্লো

ডেটাবেজ ভেতরে ভেতরে একটা নির্দিষ্ট ক্রমে কাজ করে — এই ক্রমটা বুঝলে query লেখা অনেক সহজ হয়ে যায়:

FROM
টেবিল বেছে নাও
WHERE
শর্তে ফিল্টার করো
SELECT
কলাম বেছে নাও
ORDER BY
সাজাও
LIMIT
সংখ্যা সীমিত করো
💡 মনে রাখার কৌশল আমরা query লিখি SELECT দিয়ে শুরু করে, কিন্তু ডেটাবেজ ভেতরে ভেতরে কাজ করে FROM থেকে শুরু করে। লেখার ক্রম আর কাজ করার ক্রম এক নয় — এটা বুঝলে অনেক confusion দূর হয়ে যায়।
17

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

⏱ শেখার অংশ

SELECT * বনাম নির্দিষ্ট কলাম

SELECT *

সব কলাম আনে, লেখা সহজ কিন্তু বড় টেবিলে ধীরগতির ও অপচয়ী।

SELECT col1, col2

শুধু দরকারি কলাম আনে, দ্রুত ও প্রোডাকশনে নিরাপদ।

WHERE বনাম HAVING (প্রাথমিক পরিচয়)

WHERE

টেবিলের আসল সারিগুলোকে গ্রুপ করার আগে ফিল্টার করে।

HAVING

GROUP BY দিয়ে গ্রুপ করার পরে সেই গ্রুপগুলোকে ফিল্টার করে (এটা আমরা পরের ক্লাসে বিস্তারিত শিখব)।

DISTINCT বনাম GROUP BY (প্রাথমিক পরিচয়)

DISTINCT

শুধু ডুপ্লিকেট বাদ দিয়ে ইউনিক মান দেখায়।

GROUP BY

ইউনিক মান অনুযায়ী সারিগুলোকে দলবদ্ধ করে, যাতে প্রতিটা দলের উপর হিসাব (যোগফল, গড়) করা যায়।

ASC বনাম DESC

ASC

ছোট থেকে বড়। যেমন GPA ১.০ থেকে ৪.০।

DESC

বড় থেকে ছোট। যেমন GPA ৪.০ থেকে ১.০।

LIMIT বনাম সব রেকর্ড আনা

LIMIT ব্যবহার

নির্দিষ্ট সংখ্যক ফলাফল — যেমন টপ ১০ — দ্রুত ও হালকা।

সব রেকর্ড

পূর্ণ বিশ্লেষণের জন্য দরকার, কিন্তু বড় টেবিলে অনেক ধীর হতে পারে।
18

ShopBD — একটি ছোট ই-কমার্স ডেটাবেজ

⏱ শেখার অংশ

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

CREATE TABLE Product ( Product_ID INT, ProductName VARCHAR(50), Category VARCHAR(30), Price DECIMAL(10,2), Stock INT ); INSERT INTO Product VALUES (1, 'কটন শার্ট', 'পোশাক', 850, 40); INSERT INTO Product VALUES (2, 'ব্লুটুথ হেডফোন', 'ইলেকট্রনিক্স', 1200, 15); INSERT INTO Product VALUES (3, 'রাইস কুকার', 'হোম অ্যাপ্লায়েন্স', 2200, 10); INSERT INTO Product VALUES (4, 'জিন্স প্যান্ট', 'পোশাক', 1450, 25); INSERT INTO Product VALUES (5, 'পাওয়ার ব্যাংক', 'ইলেকট্রনিক্স', 950, 60);
কাজSQL
সব প্রোডাক্ট দেখাSELECT * FROM Product;
নাম ও দাম দেখাSELECT ProductName, Price FROM Product;
কতগুলো ক্যাটাগরি আছেSELECT DISTINCT Category FROM Product;
শুধু ইলেকট্রনিক্স পণ্যSELECT * FROM Product WHERE Category = 'ইলেকট্রনিক্স';
১০০০ টাকার কমে যা আছেSELECT * FROM Product WHERE Price < 1000;
দাম অনুযায়ী কম থেকে বেশিSELECT * FROM Product ORDER BY Price ASC;
সবচেয়ে দামি ৩টি পণ্যSELECT * FROM Product ORDER BY Price DESC LIMIT 3;
Stock কম (২০-এর নিচে) এমন পণ্যSELECT ProductName, Stock FROM Product WHERE Stock < 20;
🎯 চ্যালেঞ্জ নিজে চেষ্টা করো — "পোশাক ক্যাটাগরির মধ্যে যেগুলোর দাম ১০০০ টাকার বেশি, সেগুলো দাম অনুযায়ী বড় থেকে ছোট সাজিয়ে দেখাও" — এই প্রশ্নের SQL লিখতে পারো?
19

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

⏱ শেখার অংশ
পেশাSELECT দিয়ে যা করেন
Data Analystবিক্রয়, কাস্টমার আচরণ নিয়ে প্রশ্নের উত্তর খুঁজে রিপোর্ট বানান
Data Scientistমডেল তৈরির আগে ডেটাবেজ থেকে প্রয়োজনীয় ডেটাসেট বের করে আনেন
Business Intelligence Analystড্যাশবোর্ড ও ম্যানেজমেন্ট রিপোর্টের জন্য দৈনিক/মাসিক সংখ্যা টেনে আনেন
Database Administrator (DBA)সিস্টেমের সমস্যা খুঁজতে ও পারফরম্যান্স পরীক্ষা করতে SELECT ব্যবহার করেন

একটা সাধারণ দিনে একজন Data Analyst হয়তো জিজ্ঞেস করেন — "গত মাসে কোন প্রোডাক্ট সবচেয়ে বেশি বিক্রি হয়েছে?", "কোন শহরে সবচেয়ে বেশি অর্ডার এসেছে?" — এই প্রতিটা প্রশ্নের উত্তর একটা করে SELECT query।

20

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

⏱ শেখার অংশ
১. SELECT স্টেটমেন্ট কী?
ডেটাবেজের টেবিল থেকে নির্দিষ্ট ডেটা বেছে আনার SQL কমান্ড।
২. SELECT * এর অর্থ কী?
টেবিলের সব কলাম আনো।
৩. FROM ক্লজের কাজ কী?
কোন টেবিল থেকে ডেটা আনা হবে তা নির্দিষ্ট করে।
৪. SELECT এবং SELECT DISTINCT-এর পার্থক্য কী?
DISTINCT ডুপ্লিকেট মান বাদ দিয়ে শুধু ইউনিক মান দেখায়।
৫. WHERE ক্লজ কেন ব্যবহার হয়?
নির্দিষ্ট শর্ত পূরণ করা সারিগুলোকে ফিল্টার করতে।
৬. AND আর OR-এর পার্থক্য কী?
AND-এ সব শর্ত সত্যি হতে হয়, OR-এ যেকোনো একটি সত্যি হলেই হয়। কমন ফলো-আপ: "একসাথে AND ও OR ব্যবহার করলে কী হয়?" — তখন bracket দিয়ে অগ্রাধিকার ঠিক করতে হয়।
৭. ORDER BY-এর ডিফল্ট ক্রম কী?
ASC (ছোট থেকে বড়)।
৮. LIMIT কী কাজ করে?
ফলাফলে কতগুলো সারি দেখানো হবে তা সীমিত করে।
৯. SELECT * সবসময় ব্যবহার না করার কারণ কী?
অপ্রয়োজনীয় কলাম টানায় সময় ও রিসোর্স নষ্ট হয়, পারফরম্যান্স কমে।
১০. একাধিক কলাম SELECT করার সিনট্যাক্স কী?
SELECT col1, col2 FROM table_name; — কলামগুলো কমা দিয়ে আলাদা।
১১. WHERE-এ টেক্সট ভ্যালুর চারপাশে কোটেশন লাগে কেন?
ডেটাবেজ বুঝবে এটা একটা লেখা (string) মান, সংখ্যা নয় বা কমান্ড নয়। ফলো-আপ: সংখ্যার জন্য কোটেশন লাগে না।
১২. = আর != এর পার্থক্য কী?
= সমান বোঝায়, != (বা <>) অসমান বোঝায়।
১৩. ORDER BY একাধিক কলামে দেওয়া যায় কি?
হ্যাঁ — ORDER BY col1, col2; প্রথমে col1 অনুযায়ী সাজাবে, সমান হলে col2 অনুযায়ী।
১৪. DISTINCT একাধিক কলামে দিলে কী হয়?
কলামগুলোর সম্পূর্ণ কম্বিনেশন ইউনিক করে, একক কলাম নয়।
১৫. LIMIT আর ORDER BY একসাথে কেন ব্যবহার হয়?
নির্দিষ্টভাবে সাজানো ফলাফলের উপরের বা নিচের কয়েকটা আনতে — যেমন "টপ ৫" বের করতে দুটোই দরকার।
১৬. একটি কলামকে নতুন নামে দেখাতে কী ব্যবহার হয়?
Alias — AS কীওয়ার্ড দিয়ে, যেমন SELECT Name AS StudentName।
১৭. SELECT স্টেটমেন্টের সাধারণ ক্রম কী?
SELECT → FROM → WHERE → ORDER BY → LIMIT।
১৮. WHERE এবং HAVING-এর মূল পার্থক্য কী?
WHERE গ্রুপ করার আগে সারি ফিল্টার করে, HAVING গ্রুপ করার পরে গ্রুপ ফিল্টার করে।
১৯. NULL মান WHERE দিয়ে কীভাবে খুঁজব?
= NULL দিয়ে নয়, বরং IS NULL ব্যবহার করতে হয় (এটা পরের ক্লাসে বিস্তারিত)।
২০. NOT অপারেটরের কাজ কী?
একটা শর্তকে উল্টে দেয় — যা সত্যি তা মিথ্যা করে দেখায়।
২১. একটা কমন বিগিনার ভুল কী?
FROM ক্লজ বাদ দেওয়া অথবা কলামের বানান ভুল লেখা।
২২. SELECT কি ডেটা পরিবর্তন করে?
না, SELECT শুধু ডেটা পড়ে/দেখায়, কোনো পরিবর্তন করে না।
২৩. টেবিল ছাড়া কি SELECT চালানো যায়?
সাধারণত না — SELECT-এর জন্য FROM দিয়ে একটা উৎস (টেবিল) লাগে।
২৪. ছোট টেবিলে আর বড় টেবিলে SELECT * ব্যবহারের পার্থক্য কী?
ছোট টেবিলে সমস্যা কম দেখা দেয়, কিন্তু বড় টেবিলে (লক্ষ-কোটি সারি) এটা সিস্টেমকে ধীর করে দিতে পারে।
২৫. WHERE-এ একাধিক শর্ত জোড়া লাগাতে কী ব্যবহার হয়?
AND, OR, NOT — এবং জটিল শর্তে bracket () দিয়ে অগ্রাধিকার ঠিক করা হয়।
২৬. ORDER BY না দিলে ফলাফলের ক্রম কেমন থাকে?
নির্দিষ্ট কোনো নিশ্চয়তা থাকে না — ডেটাবেজ যেভাবে সহজে খুঁজে পায় সেভাবে দেখাতে পারে।
২৭. LIMIT না দিলে কী হয়?
শর্ত মেলা সব সারিই ফেরত আসে, সংখ্যা যত বড়ই হোক।
২৮. দুইটা আলাদা টেবিল থেকে একসাথে ডেটা আনা যায় কি শুধু SELECT দিয়ে?
JOIN ছাড়া সরাসরি না — এটা পরবর্তী ক্লাসে শেখানো হবে।
২৯. একজন Data Analyst দিনে কতবার SELECT ব্যবহার করেন মোটামুটি?
নির্দিষ্ট সংখ্যা নেই, তবে এটাই তাদের সবচেয়ে বেশি ব্যবহৃত কমান্ড — প্রতিটা প্রশ্ন-উত্তর, রিপোর্ট, ড্যাশবোর্ডের পেছনে থাকে।
৩০. নতুন শিক্ষার্থীদের SELECT শেখার সবচেয়ে ভালো উপায় কী?
সরাসরি সিনট্যাক্স মুখস্থ না করে, বাস্তব প্রশ্ন থেকে শুরু করে ধীরে ধীরে SQL-এ অনুবাদ করা অভ্যাস করা।