Query
কোয়েরি
কোয়েরি (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 | কোন টেবিল | হ্যাঁ |
| WHERE | Row শর্ত | না |
| GROUP BY | গ্রুপ করা | না |
| HAVING | গ্রুপ শর্ত | না |
| ORDER BY | সাজানো | না |
| LIMIT | সংখ্যা সীমা | না |
🎯 অনুশীলন প্রশ্ন
Students টেবিল (roll, name, division, marks) ব্যবহার করে লেখো:
১. সব ছাত্রের নাম ও নম্বর দেখাও, বেশি নম্বর আগে।
২. বিজ্ঞান বিভাগের যেসব ছাত্র ৮৫০ এর বেশি পেয়েছে তাদের তথ্য দেখাও।
৩. প্রতিটি বিভাগে মোট ছাত্র সংখ্যা ও গড় নম্বর বের করো।
৪. "র" অক্ষর দিয়ে শুরু সব ছাত্রের নাম দেখাও।
৫. MCQ: GROUP BY এর পর শর্ত দিতে কোনটি ব্যবহার করা হয়? (ক) WHERE (খ) HAVING (গ) FILTER (ঘ) AND উত্তর: (খ) HAVING