৬.৫ ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (Data Manipulation and Query)
এইচএসসি আইসিটি অধ্যায় ৬: ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML)। INSERT, UPDATE, DELETE এবং SELECT কুয়েরির বিস্তারিত ব্যবহার। WHERE, LIKE, ORDER BY এর মাধ্যমে ড
৬.৫ ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি
- ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (SQL)
- সেকেন্ডের মধ্যে তথ্য কীভাবে আসে?
- DML (Data Manipulation Language) কী?
- ১. INSERT INTO কমান্ড
- ২. SELECT কমান্ড (বেসিক)
- শর্ত সাপেক্ষে খোঁজা: WHERE Clause
- তুলনামূলক ও লজিক্যাল অপারেটর
- প্যাটার্ন ম্যাচিং: LIKE Operator
- ডেটা সাজানো: ORDER BY
- অ্যাগ্রিগেট ফাংশন (Aggregate Functions)
- ৩. UPDATE কমান্ড (সতর্কতা!)
- ৪. DELETE কমান্ড (সতর্কতা!)
- সারসংক্ষেপ
৬.৫ ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (SQL) - বিস্তারিত পাঠ
লেকচারের শুরুতে আমরা জেনেছি কীভাবে গুগল বা ফেসবুক মুহূর্তের মধ্যে আমাদের প্রয়োজনীয় তথ্য খুঁজে বের করে। যখন তুমি গুগলে কিছু লিখে সার্চ দাও, তখন ব্যাকগ্রাউন্ডে বিশাল ডেটাবেজ থেকে নির্দিষ্ট তথ্যটি খুঁজে বের করার জন্য একটি বিশেষ ভাষা কাজ করে। এই সেকশনে আমরা সেই জাদুকরী ভাষা SQL (Structured Query Language) এবং এর সবচেয়ে গুরুত্বপূর্ণ অংশ DML (Data Manipulation Language) নিয়ে আলোচনা করব।
লেকচারে আমরা বেসিক কমান্ডগুলো সম্পর্কে জেনেছি। কিন্তু এই পাঠে আমরা দেখব কীভাবে পরীক্ষায় আসা জটিল কুয়েরিগুলো (যেমন: একাধিক শর্ত, প্যাটার্ন ম্যাচিং) নির্ভুলভাবে লিখতে হয় এবং বাস্তব জীবনে ডেটা এনালিস্টরা কীভাবে এই কমান্ডগুলো ব্যবহার করে।
ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML) পরিচিতি
ডেটাবেজ ম্যানেজমেন্ট সিস্টেমের (DBMS) প্রাণ হলো SQL। আর SQL-এর যে অংশটি সরাসরি ডেটা নিয়ে কাজ করে, তাকে বলা হয় DML। এটি ডেটাবেজের গঠন বা স্কিমা পরিবর্তন করে না, বরং স্কিমার ভেতরের ডেটা বা তথ্য নিয়ে কাজ করে।
সংজ্ঞা (Definition): ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML) হলো SQL-এর এমন একটি অংশ যা ডেটাবেজ স্কিমার মধ্যে ডেটা ইনসার্ট (Insert), আপডেট (Update), ডিলিট (Delete) এবং রিট্রিভ (Retrieve) বা খুঁজে বের করতে ব্যবহৃত হয়।
সহজ কথায়, ডেটাবেজ টেবিল তৈরি করা হলো ঘরের কাঠামো বানানোর মতো (যা DDL-এর কাজ), আর সেই ঘরে আসবাবপত্র সাজানো, পরিবর্তন করা বা বের করে ফেলা হলো DML-এর কাজ।
DML-এর প্রধান চারটি কমান্ড:
১. SELECT: ডেটা খুঁজে বের করা বা প্রদর্শন করা।
২. INSERT: নতুন ডেটা প্রবেশ করানো।
৩. UPDATE: বিদ্যমান ডেটা পরিবর্তন করা।
৪. DELETE: ডেটা মুছে ফেলা।
মনে রাখবে (Note): টেবিল তৈরি করা (CREATE) বা টেবিল মুছে ফেলা (DROP) কিন্তু DML নয়, এগুলো DDL (Data Definition Language)। পরীক্ষায় প্রায়ই 'ক' বা 'খ' নাম্বারের প্রশ্নে এই পার্থক্য জানতে চাওয়া হয়। DML শুধুমাত্র টেবিলের ভেতরের তথ্য নিয়ে কাজ করে।
১. INSERT: টেবিলে নতুন ডেটা যুক্তকরণ
একটি টেবিলে নতুন রেকর্ড বা সারি (Row) যুক্ত করার জন্য INSERT INTO কমান্ড ব্যবহার করা হয়। এটি দুইভাবে লেখা যায়।
পদ্ধতি ১: নির্দিষ্ট কলামে ডেটা ইনপুট দেওয়া
যদি তুমি টেবিলের সব কলামে ডেটা না দিয়ে শুধুমাত্র নির্দিষ্ট কিছু কলামে ডেটা দিতে চাও, তবে এই পদ্ধতি ব্যবহার করতে হয়।
$$INSERT \ INTO \ table\_name \ (column1, column2) \ VALUES \ (value1, value2);$$
পদ্ধতি ২: সব কলামে ডেটা ইনপুট দেওয়া
যদি টেবিলের সব কলামের ক্রম অনুযায়ী মান বসানো হয়, তবে কলামের নাম উল্লেখ করার প্রয়োজন নেই।
$$INSERT \ INTO \ table\_name \ VALUES \ (value1, value2, value3...);$$
উদাহরণ (Example):
ধরা যাক, 'Student' নামক একটি টেবিলে নতুন ছাত্র 'Kamal' (Roll: 105) এর তথ্য যুক্ত করতে হবে। তার জিপিএ এখনো জানা যায়নি, তাই জিপিএ কলাম বাদ দিয়ে কুয়েরি হবে:
INSERT INTO Student (Roll, Name) VALUES (105, 'Kamal');
২. SELECT: তথ্যের মহাসমুদ্রে অনুসন্ধান
ডেটাবেজ থেকে নির্দিষ্ট তথ্য খুঁজে বের করার জন্য SELECT কমান্ড ব্যবহার করা হয়। এটি DML-এর সবচেয়ে বহুল ব্যবহৃত কমান্ড।
বেসিক গঠন
সবচেয়ে সাধারণ কুয়েরি হলো টেবিলের সব তথ্য দেখা।
SELECT * FROM Student; (এখানে * মানে সব কলাম)
তবে পরীক্ষার খাতায় নির্দিষ্ট কলাম চাইলে * ব্যবহার না করাই ভালো।
পরীক্ষার টিপস (Exam Tip): প্রশ্নে যদি বলা থাকে "সকল ছাত্রের নাম ও রোল নম্বর দেখাও", তবে SELECT * লিখবে না। লিখবে SELECT Name, Roll FROM Student;। অপ্রয়োজনীয় কলাম দেখালে অনেক সময় পূর্ণ নম্বর পাওয়া যায় না।
DISTINCT কিউয়ার্ড: ডুপ্লিকেট বাদ দেওয়া
অনেক সময় একই তথ্য বারবার থাকতে পারে (যেমন: অনেক ছাত্রের বাড়ি 'Dhaka' হতে পারে)। ডুপ্লিকেট বাদ দিয়ে ইউনিক বা অনন্য তথ্য দেখতে DISTINCT ব্যবহার করা হয়।
SELECT DISTINCT District FROM Student;
(এটি শুধুমাত্র ভিন্ন ভিন্ন জেলার নাম দেখাবে, কোনো জেলা দুইবার আসবে না)
শর্ত সাপেক্ষে ডেটা খোঁজা (WHERE Clause)
নির্দিষ্ট শর্ত পূরণ করে এমন ডেটা খুঁজতেই WHERE ক্লজ ব্যবহার হয়। শর্তের জন্য আমরা নিচের অপারেটরগুলো ব্যবহার করি:
| অপারেটর | অর্থ | ব্যবহার |
|---|---|---|
= |
সমান | WHERE Age = 18 |
<> বা != |
সমান নয় | WHERE District <> 'Dhaka' |
> |
বড় | WHERE GPA > 4.5 |
< |
ছোট | WHERE Roll < 10 |
>= |
বড় অথবা সমান | WHERE Marks >= 80 |
<= |
ছোট অথবা সমান | WHERE Marks <= 33 |
৩. লজিক্যাল অপারেটর: AND, OR, NOT এর ব্যবহার
বাস্তব জীবনে আমাদের প্রায়ই একাধিক শর্ত বা মাল্টিপল কন্ডিশন চেক করতে হয়। এজন্য SQL-এ লজিক্যাল অপারেটর ব্যবহার করা হয়।

AND অপারেটর
যখন সবগুলো শর্তই সত্য হতে হবে।
উদাহরণ: বিজ্ঞান বিভাগের ছাত্র এবং যাদের বাড়ি ঢাকা।
SELECT * FROM Student WHERE Group = 'Science' AND District = 'Dhaka';
OR অপারেটর
যখন যেকোনো একটি শর্ত সত্য হলেই চলবে।
উদাহরণ: যাদের বাড়ি ঢাকা অথবা রাজশাহী।
SELECT * FROM Student WHERE District = 'Dhaka' OR District = 'Rajshahi';
NOT অপারেটর
শর্তটি মিথ্যা হলে ফলাফল দেখাবে।
SELECT * FROM Student WHERE NOT District = 'Dhaka'; (যাদের বাড়ি ঢাকা নয়)
সতর্কতা (Important): একই কুয়েরিতে AND এবং OR থাকলে ব্র্যাকেট ( ) ব্যবহার করা জরুরি।
যেমন: SELECT * FROM Student WHERE Group = 'Science' AND (District = 'Dhaka' OR District = 'Rajshahi');
ব্র্যাকেট না দিলে SQL আগে AND-এর কাজ করে ফেলবে, ফলে ভুল রেজাল্ট আসতে পারে।
৪. প্যাটার্ন ম্যাচিং ও ওয়াইল্ডকার্ড (LIKE Operator)
অনেক সময় আমরা সঠিক বানান জানি না বা নির্দিষ্ট প্যাটার্নের শব্দ খুঁজতে চাই (যেমন: যাদের নামের শেষে 'Rahman' আছে)। তখন LIKE অপারেটর এবং Wildcard Character ব্যবহার করা হয়।
দুটি প্রধান ওয়াইল্ডকার্ড হলো:
১. % (শতাংশ চিহ্ন): শূন্য বা ততোধিক যেকোনো ক্যারেক্টার বোঝায়।
২. _ (আন্ডারস্কোর): শুধুমাত্র একটি ক্যারেক্টার বোঝায়।
ওয়াইল্ডকার্ড গাইড (Wildcard Guide):
- 'A%' : A দিয়ে শুরু হওয়া সব নাম (যেমন: Abir, Akash)।
- '%a' : a দিয়ে শেষ হওয়া সব নাম (যেমন: Mina, Rina)।
- '%or%' : মাঝখানে বা যেকোনো জায়গায় 'or' আছে (যেমন: World, Story)।
- '_r%' : দ্বিতীয় অক্ষরটি r (যেমন: Arifa, Green)।
- '___' : ঠিক তিন অক্ষরের শব্দ (যেমন: Joy, Sky)।
উদাহরণ: যাদের নামের শুরুতে 'S' আছে তাদের খুঁজে বের করো।
SELECT * FROM Student WHERE Name LIKE 'S%';
৫. ডেটা সাজানো (ORDER BY) এবং গ্রুপিং (GROUP BY)
ORDER BY: সাজানো
ফলাফলকে ছোট থেকে বড় বা বড় থেকে ছোট সাজাতে ORDER BY ব্যবহার করা হয়।
- ASC (Ascending): ছোট থেকে বড় (ডিফল্ট)।
- DESC (Descending): বড় থেকে ছোট।
SELECT * FROM Student ORDER BY Marks DESC; (মেধাতালিকা তৈরির জন্য)
GROUP BY: দলবদ্ধ করা
এটি পরীক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ। যখন আমরা নির্দিষ্ট কোনো কলামের ভিত্তিতে ডেটাকে গ্রুপ বা দলভুক্ত করে হিসাব করতে চাই, তখন GROUP BY ব্যবহার করি। সাধারণত এর সাথে Aggregate Function (যেমন COUNT, SUM) থাকে।

$$SELECT \ column\_name, \ COUNT(*) \ FROM \ table\_name \ GROUP \ BY \ column\_name;$$
উদাহরণ: কোন জেলায় কতজন ছাত্র আছে তা বের করো।
SELECT District, COUNT(Roll) FROM Student GROUP BY District;
এখানে SQL প্রথমে সব ছাত্রকে জেলা অনুযায়ী আলাদা আলাদা বক্সে বা গ্রুপে ভাগ করবে, তারপর প্রতি বক্সে কতজন আছে তা গুনবে।
৬. অ্যাগ্রিগেট ফাংশন: গানিতিক হিসাব-নিকাশ
SQL-এ ৫টি প্রধান অ্যাগ্রিগেট ফাংশন আছে যা কলামের ডেটা নিয়ে গানিতিক কাজ করে।
| ফাংশন | কাজ | উদাহরণ |
|---|---|---|
COUNT() |
মোট কতটি ডেটা আছে তা গণনা করে | SELECT COUNT(Roll) FROM Student; |
SUM() |
যোগফল বের করে | SELECT SUM(Salary) FROM Employee; |
AVG() |
গড় মান বের করে | SELECT AVG(Marks) FROM Result; |
MAX() |
সর্বোচ্চ মান বের করে | SELECT MAX(GPA) FROM Result; |
MIN() |
সর্বনিম্ন মান বের করে | SELECT MIN(GPA) FROM Result; |
৭. UPDATE এবং DELETE: ডেটা সংশোধন ও মোছা
UPDATE: ডেটা পরিবর্তন
বিদ্যমান ডেটা পরিবর্তন করতে UPDATE কমান্ড ব্যবহার করা হয়।
$$UPDATE \ table\_name \ SET \ column1 = value1 \ WHERE \ condition;$$
সতর্কতা: UPDATE বা DELETE কমান্ডে WHERE ক্লজ ব্যবহার না করলে টেবিলের সকল ডেটা পরিবর্তন বা ডিলিট হয়ে যাবে! তাই সবসময় সাবধান থাকবে।
DELETE: ডেটা মোছা
অপ্রয়োজনীয় রেকর্ড মুছে ফেলতে ব্যবহৃত হয়।
DELETE FROM Student WHERE Roll = 105;
পার্থক্য (Difference):
- DELETE: টেবিল থেকে ডেটা মুছে ফেলে, কিন্তু টেবিলের কাঠামো (Structure) ঠিক থাকে। এটি DML।
- DROP: পুরো টেবিল বা ডেটাবেজ মুছে ফেলে (কাঠামোসহ)। এটি DDL।
সৃজনশীল প্রশ্নের প্রস্তুতি (CQ Examples)
নিচের উদ্দীপকটি লক্ষ্য করো এবং প্রশ্নগুলোর সমাধান দেখো:
Table: Result
| Roll | Name | Subject | Marks |
|---|---|---|---|
| 101 | Abir | Bangla | 75 |
| 102 | Bithi | English | 82 |
| 103 | Joy | Math | 95 |
| 104 | Rimi | Bangla | 60 |
প্রশ্ন ১: যাদের নম্বর ৮০-এর বেশি তাদের নাম ও বিষয় দেখাও।
উত্তর: SELECT Name, Subject FROM Result WHERE Marks > 80;
প্রশ্ন ২: 'Math' বিষয়ে সর্বোচ্চ নম্বর কত?
উত্তর: SELECT MAX(Marks) FROM Result WHERE Subject = 'Math';
প্রশ্ন ৩: ১০১ রোলের ছাত্রের বিষয় পরিবর্তন করে 'English' করো।
উত্তর: UPDATE Result SET Subject = 'English' WHERE Roll = 101;
পরিভাষা (Glossary)
| টার্ম | অর্থ |
|---|---|
| DML | Data Manipulation Language; ডেটা ইনসার্ট, আপডেট ও ডিলিট করার ভাষা। |
| Query | ডেটাবেজ থেকে নির্দিষ্ট ডেটা খুঁজে বের করার বা কাজ করার নির্দেশ। |
| Wildcard | বিশেষ ক্যারেক্টার (% বা _) যা অন্য ক্যারেক্টারের বিকল্প হিসেবে প্যাটার্ন ম্যাচিংয়ে ব্যবহৃত হয়। |
| Aggregate Function | একাধিক ডেটা থেকে গানিতিক হিসাব করে একটি মান বের করার ফাংশন (যেমন: SUM, AVG)। |
| Clause | SQL স্টেটমেন্টের প্রতিটি অংশ, যেমন WHERE, GROUP BY, ORDER BY ইত্যাদি। |