intermediate#query#select#where#join#sqlUpdated: 2026-05-12

কোয়েরি (Query)


১. ভূমিকা — ডেটাবেজকে প্রশ্ন করো!

ধরো তুমি লাইব্রেরিতে গেলে এবং লাইব্রেরিয়ানকে জিজ্ঞেস করলে, "হুমায়ূন আহমেদ এর নতুন বই আছে?" — এটা একটা প্রশ্ন। লাইব্রেরিয়ান রেজিস্টার দেখে উত্তর দিলেন।

ডেটাবেজেও ঠিক এভাবে প্রশ্ন করা যায় — এই প্রশ্নকেই বলে Query (কোয়েরি)!

"বিজ্ঞান বিভাগের যেসব ছাত্র ৮০০ এর বেশি পেয়েছে তাদের নাম এবং নম্বর বড় থেকে ছোট ক্রমে দেখাও" — এটি একটি Query!

মজার তথ্য: Google এর সার্চ ইঞ্জিন প্রতি সেকেন্ডে ৮৫,০০০ এরও বেশি Query প্রক্রিয়া করে! প্রতিটি সার্চ একটি Query — ডেটাবেজকে জিজ্ঞাসা "এই কীওয়ার্ড সম্পর্কিত পেজগুলো দেখাও।"


২. সমস্যা — হাজারো ডেটা থেকে দরকারি তথ্য কীভাবে পাব?

সমস্যা:
Students Table: ১০,০০০ রেকর্ড
প্রয়োজন: শুধু বিজ্ঞান বিভাগের, ৮০০+ নম্বর, নাম ও মার্কস দেখাও

কাগজে: ১০,০০০ রেকর্ড পড়তে হবে — ঘণ্টা লাগবে!
Query দিয়ে:
SELECT name, marks FROM Students
WHERE division='Science' AND marks > 800;
→ মিলিসেকেন্ডে ফলাফল!

৩. চিত্রের মাধ্যমে বোঝো

SELECT Statement এর কাঠামো:

SELECT column1, column2, ...    ← কী দেখাবে
FROM table_name                 ← কোন টেবিল থেকে
WHERE condition                 ← কোন শর্তে
GROUP BY column                 ← কীভাবে গ্রুপ করবে
HAVING group_condition          ← গ্রুপের শর্ত
ORDER BY column ASC/DESC        ← কোন ক্রমে সাজাবে
LIMIT n;                        ← কতটা দেখাবে

উদাহরণ:
SELECT name, marks              ← নাম ও নম্বর দেখাও
FROM Students                   ← Students টেবিল থেকে
WHERE division = 'Science'      ← বিজ্ঞান বিভাগের
  AND marks > 800               ← এবং ৮০০ এর বেশি
ORDER BY marks DESC             ← বেশি নম্বর আগে
LIMIT 5;                        ← শুধু প্রথম ৫ জন

৪. বাস্তব জীবনের সাথে মিল

উপমা: Query হলো ঠিক যেমন Google এ Search করা। তুমি "ঢাকার ভালো রেস্টুরেন্ট" লিখলে Google ডেটাবেজে Query করে: "শহর=ঢাকা এবং ধরন=রেস্টুরেন্ট" — এবং রেটিং অনুসারে সাজিয়ে দেখায়। তুমি SQL লেখ, Database মেনে চলে!


Module 1: Query কী? (What is a Query?)

📌 সংজ্ঞা

Query হলো ডেটাবেজকে দেওয়া একটি অনুরোধ বা প্রশ্ন যা নির্দিষ্ট শর্তে তথ্য বের করে, পরিবর্তন করে বা পরিচালনা করে। SQL এ Query সাধারণত SELECT Statement দিয়ে শুরু হয়।

Query এর ধরন

ধরনকাজউদাহরণ
Select Queryতথ্য দেখানোSELECT ... FROM ...
Action Queryতথ্য পরিবর্তনINSERT/UPDATE/DELETE
Parameter Queryশর্তসহ তথ্যWHERE দিয়ে
Aggregate Queryগণনা করাCOUNT, SUM, AVG

Module 2: SELECT বিস্তারিত

সহজ থেকে জটিল SELECT

-- সব কিছু দেখাও:
SELECT * FROM Students;

-- নির্দিষ্ট Column:
SELECT name, division FROM Students;

-- Column এর নাম পরিবর্তন (Alias):
SELECT name AS ছাত্রের_নাম, marks AS মোট_নম্বর
FROM Students;

-- DISTINCT — একই মান একবার দেখাও:
SELECT DISTINCT division FROM Students;
-- ফলাফল: Science, Commerce, Arts (পুনরাবৃত্তি নেই)

WHERE — শর্ত দেওয়া

-- সমান:
SELECT * FROM Students WHERE division = 'Science';

-- বড়/ছোট:
SELECT * FROM Students WHERE marks > 800;
SELECT * FROM Students WHERE marks <= 700;

-- AND/OR:
SELECT * FROM Students
WHERE division = 'Science' AND marks > 800;

SELECT * FROM Students
WHERE marks > 850 OR division = 'Arts';

-- NOT:
SELECT * FROM Students WHERE NOT division = 'Commerce';

-- BETWEEN:
SELECT * FROM Students WHERE marks BETWEEN 800 AND 900;

-- LIKE (আংশিক মিল):
SELECT * FROM Students WHERE name LIKE 'র%';
-- র দিয়ে শুরু সব নাম: রাহেলা, রফিক...

SELECT * FROM Students WHERE name LIKE '%আক্তর';
-- আক্তর দিয়ে শেষ: রাহেলা আক্তর, নাসরিন আক্তর...

-- IN:
SELECT * FROM Students WHERE division IN ('Science', 'Commerce');

Module 3: Aggregate Functions

-- COUNT — কতজন:
SELECT COUNT(*) FROM Students;           -- মোট ছাত্র সংখ্যা
SELECT COUNT(*) FROM Students
WHERE division = 'Science';              -- বিজ্ঞান বিভাগে কতজন

-- SUM — মোট:
SELECT SUM(marks) FROM Students;         -- সব নম্বরের যোগফল

-- AVG — গড়:
SELECT AVG(marks) FROM Students;         -- গড় নম্বর

-- MAX/MIN — সর্বোচ্চ/সর্বনিম্ন:
SELECT MAX(marks) FROM Students;         -- সর্বোচ্চ নম্বর
SELECT MIN(marks) FROM Students;         -- সর্বনিম্ন নম্বর

-- একসাথে অনেক:
SELECT
  COUNT(*) AS মোট_ছাত্র,
  AVG(marks) AS গড়_নম্বর,
  MAX(marks) AS সর্বোচ্চ,
  MIN(marks) AS সর্বনিম্ন
FROM Students;

Module 4: ORDER BY ও GROUP BY

ORDER BY — সাজানো

-- বেশি নম্বর আগে (DESC = বড় থেকে ছোট):
SELECT name, marks FROM Students
ORDER BY marks DESC;

-- ছোট নম্বর আগে (ASC = ছোট থেকে বড়):
SELECT name, marks FROM Students
ORDER BY marks ASC;

-- নাম অনুযায়ী সাজানো:
SELECT * FROM Students
ORDER BY name ASC;

-- প্রথম ৩ জন টপ স্কোরার:
SELECT name, marks FROM Students
ORDER BY marks DESC
LIMIT 3;

GROUP BY — গ্রুপ করা

-- বিভাগ অনুযায়ী ছাত্র সংখ্যা:
SELECT division, COUNT(*) AS ছাত্র_সংখ্যা
FROM Students
GROUP BY division;
-- ফলাফল:
-- Science  | 3
-- Commerce | 2
-- Arts     | 1

-- বিভাগ অনুযায়ী গড় নম্বর:
SELECT division, AVG(marks) AS গড়_নম্বর
FROM Students
GROUP BY division;

-- HAVING — গ্রুপের শর্ত (GROUP BY এর পর WHERE মতো):
SELECT division, AVG(marks) AS গড়
FROM Students
GROUP BY division
HAVING AVG(marks) > 800;
-- শুধু সেই বিভাগ দেখাবে যার গড় ৮০০ এর বেশি

Module 5: JOIN — একাধিক টেবিল

-- Students ও Results টেবিল একসাথে দেখা (INNER JOIN):
SELECT s.name, r.subject, r.marks
FROM Students s
INNER JOIN Results r ON s.roll = r.roll;
-- ফলাফল: ছাত্রের নাম + বিষয় + নম্বর

-- বাস্তব উদাহরণ:
-- "কোন ছাত্র গণিতে কত পেয়েছে?"
SELECT s.name, r.marks
FROM Students s
INNER JOIN Results r ON s.roll = r.roll
WHERE r.subject = 'গণিত'
ORDER BY r.marks DESC;

JOIN এর ধরন:
┌─────────────┬──────────────────────────────────────────┐
│ INNER JOIN  │ উভয় টেবিলে মিল আছে এমন রেকর্ড         │
│ LEFT JOIN   │ বাম টেবিলের সব + ডান টেবিলে মিল থাকলে  │
│ RIGHT JOIN  │ ডান টেবিলের সব + বাম টেবিলে মিল থাকলে  │
└─────────────┴──────────────────────────────────────────┘

Module 6: বাংলাদেশের বাস্তব Query

-- bKash Transaction Query:
-- "আজকের সব ৫০০+ টাকার লেনদেন দেখাও":
SELECT sender, receiver, amount, transaction_time
FROM Transactions
WHERE amount >= 500
  AND DATE(transaction_time) = CURRENT_DATE
ORDER BY amount DESC;

-- SSC ফলাফল Query:
-- "GPA 5.00 পাওয়া ঢাকা বোর্ডের ছাত্রদের নাম":
SELECT name, roll, school
FROM SSC_Results
WHERE gpa = 5.00 AND board = 'Dhaka'
ORDER BY name;

-- হাসপাতাল Query:
-- "বিভাগ অনুযায়ী আজকের রোগী সংখ্যা":
SELECT department, COUNT(*) AS রোগী_সংখ্যা
FROM Patients
WHERE admission_date = CURRENT_DATE
GROUP BY department
ORDER BY রোগী_সংখ্যা DESC;

🧠 মূল শিক্ষা

মনে রাখো: Query হলো ডেটাবেজকে প্রশ্ন করা। SELECT এর মূল ক্রম: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT। WHERE শর্ত দেয়, GROUP BY গ্রুপ করে, ORDER BY সাজায়, JOIN একাধিক টেবিল মেলায়।


🔁 নিজে পরীক্ষা করো

প্রশ্ন ১: WHERE ও HAVING এর পার্থক্য কী? ✅ উত্তর: WHERE Row ফিল্টার করে GROUP BY এর আগে। HAVING Group ফিল্টার করে GROUP BY এর পরে। Aggregate Function (COUNT, AVG) এর শর্তে HAVING ব্যবহার করতে হয়।


প্রশ্ন ২: LIKE '%আক্তর' মানে কী? ✅ উত্তর: % যেকোনো সংখ্যক যেকোনো অক্ষরের জায়গা নেয়। তাই '%আক্তর' মানে "আক্তর" দিয়ে শেষ হওয়া যেকোনো নাম।


প্রশ্ন ৩: INNER JOIN কী করে? ✅ উত্তর: INNER JOIN দুটি টেবিলের মধ্যে সাধারণ (Matching) রেকর্ড বের করে আনে। যেসব রেকর্ড উভয় টেবিলে মিলছে শুধু সেগুলো দেখায়।


প্রশ্ন ৪: ORDER BY DESC মানে কী? ✅ উত্তর: DESC (Descending) মানে বড় থেকে ছোট ক্রম। সর্বোচ্চ নম্বর প্রথমে আসবে।


📝 HSC পরীক্ষার প্রস্তুতি

পরীক্ষায় যা আসতে পারে

🎯 SELECT Statement এর সম্পূর্ণ কাঠামো (৩ নম্বর) 🎯 WHERE সহ SELECT লেখো (৪ নম্বর) 🎯 GROUP BY ও ORDER BY সহ Query লেখো (৫ নম্বর) 🎯 Aggregate Function উদাহরণ (৩ নম্বর)

সাধারণ ভুলসমূহ

⚠️ SELECT এর ক্রম ভুল — SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY ⚠️ HAVING এর জায়গায় WHERE লেখা (Aggregate এর পর) ⚠️ LIMIT এর ভুল ব্যবহার — LIMIT সবার শেষে

মনে রাখার কৌশল

💡 SELECT ক্রম মনে রাখো: "সফর WHERE গেলে HAVING ORDER দরকার" → SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT 💡 % = যেকোনো কিছু, _ = একটি অক্ষর (LIKE এ)


✅ সারাংশ

  • Query: ডেটাবেজকে প্রশ্ন — SELECT দিয়ে শুরু
  • WHERE: Row ফিল্টার করে (AND/OR/NOT/BETWEEN/LIKE/IN)
  • ORDER BY: ফলাফল সাজানো (ASC/DESC)
  • GROUP BY: গ্রুপ করা, HAVING গ্রুপ ফিল্টার
  • Aggregate: COUNT, SUM, AVG, MAX, MIN
  • JOIN: একাধিক টেবিল মিলিয়ে Query

SELECT Statement ক্রম — দ্রুত গাইড

ক্লজকাজবাধ্যতামূলক?
SELECTকী দেখাবেহ্যাঁ
FROMকোন টেবিলহ্যাঁ
WHERERow শর্তনা
GROUP BYগ্রুপ করানা
HAVINGগ্রুপ শর্তনা
ORDER BYসাজানোনা
LIMITসংখ্যা সীমানা

🎯 অনুশীলন প্রশ্ন

Students টেবিল (roll, name, division, marks) ব্যবহার করে লেখো:

১. সব ছাত্রের নাম ও নম্বর দেখাও, বেশি নম্বর আগে।

২. বিজ্ঞান বিভাগের যেসব ছাত্র ৮৫০ এর বেশি পেয়েছে তাদের তথ্য দেখাও।

৩. প্রতিটি বিভাগে মোট ছাত্র সংখ্যা ও গড় নম্বর বের করো।

৪. "র" অক্ষর দিয়ে শুরু সব ছাত্রের নাম দেখাও।

৫. MCQ: GROUP BY এর পর শর্ত দিতে কোনটি ব্যবহার করা হয়? (ক) WHERE (খ) HAVING (গ) FILTER (ঘ) AND উত্তর: (খ) HAVING