৬.৫ ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (Data Manipulation and Query)

এইচএসসি আইসিটি অধ্যায় ৬: ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML)। INSERT, UPDATE, DELETE এবং SELECT কুয়েরির বিস্তারিত ব্যবহার। WHERE, LIKE, ORDER BY এর মাধ্যমে ড

শেখা শুরু করুন

৬.৫ ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি

  1. ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (SQL)
  2. সেকেন্ডের মধ্যে তথ্য কীভাবে আসে?
  3. DML (Data Manipulation Language) কী?
  4. ১. INSERT INTO কমান্ড
  5. ২. SELECT কমান্ড (বেসিক)
  6. শর্ত সাপেক্ষে খোঁজা: WHERE Clause
  7. তুলনামূলক ও লজিক্যাল অপারেটর
  8. প্যাটার্ন ম্যাচিং: LIKE Operator
  9. ডেটা সাজানো: ORDER BY
  10. অ্যাগ্রিগেট ফাংশন (Aggregate Functions)
  11. ৩. UPDATE কমান্ড (সতর্কতা!)
  12. ৪. DELETE কমান্ড (সতর্কতা!)
  13. সারসংক্ষেপ

ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (SQL)

এই লেকচার শেষে আমরা-

১। DML বা ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজের কমান্ডগুলো প্রয়োগ করতে পারব।
২। SELECT কমান্ড ব্যবহার করে ডেটাবেজ থেকে তথ্য খুঁজে বের করতে পারব।
৩। বিভিন্ন শর্ত বা Condition ব্যবহার করে ডেটা ফিল্টার ও সর্টিং করতে পারব।
৪। অ্যাগ্রিগেট ফাংশন ব্যবহার করে গানিতিক হিসাব করতে পারব।

সবাইকে স্বাগতম! আজকে আমরা আইসিটি বইয়ের খুবই প্র্যাকটিক্যাল এবং ইন্টারেস্টিং একটা টপিক নিয়ে কথা বলব—সেটা হলো SQL বা কুয়েরি। এই লেকচার শেষে আমরা- ১। DML বা ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজের কমান্ডগুলো প্রয়োগ করতে পারব, ২। SELECT কমান্ড ব্যবহার করে ডেটাবেজ থেকে তথ্য খুঁজে বের করতে পারব, ৩। বিভিন্ন শর্ত বা Condition ব্যবহার করে ডেটা ফিল্টার ও সর্টিং করতে পারব, এবং ৪। অ্যাগ্রিগেট ফাংশন ব্যবহার করে গানিতিক হিসাব করতে পারব। চলো শুরু করা যাক।

সেকেন্ডের মধ্যে তথ্য কীভাবে আসে?

প্রশ্ন: গুগলে কোনো কিছু সার্চ দিলে বা ফেসবুকের ফ্রেন্ডলিস্টে কারো নাম খুঁজলে কীভাবে সেকেন্ডের মধ্যে ফলাফল চলে আসে?

উত্তর: ব্যাকগ্রাউন্ডে বিশাল এক ডেটাবেজ থেকে নির্দিষ্ট তথ্যটি খুঁজে বের করার জন্য 'কুয়েরি' (Query) চালানো হয়।

  • সার্চ ইঞ্জিন: বিশাল তথ্যের ভান্ডার।
  • কুয়েরি: সুনির্দিষ্ট প্রশ্ন বা নির্দেশ।
  • SQL: এই নির্দেশের ভাষা।

শুরুতেই একটা প্রশ্ন করি তোমাদের। তোমরা যখন গুগলে কিছু সার্চ করো, অথবা ফেসবুকে হাজার হাজার বন্ধুর মধ্য থেকে নির্দিষ্ট একজনকে খুঁজো—কখনো ভেবেছ, নিমিষেই এই রেজাল্টটা কীভাবে সামনে চলে আসে? এর পেছনে জাদুর মতো কাজ করে ডেটাবেজ কুয়েরি। মূলত ব্যাকগ্রাউন্ডে একটি শক্তিশালী ল্যাঙ্গুয়েজ কাজ করে যা ডেটাবেজকে নির্দেশ দেয়—'এই তথ্যটা খুঁজে আনো'। আজকে আমরা সেই ল্যাঙ্গুয়েজের জাদুকরী কিছু কমান্ড শিখব।

DML (Data Manipulation Language) কী?

সংজ্ঞা: ডেটাবেজের টেবিলের ভেতরের ডেটা বা তথ্য নিয়ে কাজ করার জন্য (ইনসার্ট, ডিলেট, আপডেট) যে কমান্ডগুলো ব্যবহার করা হয়, তাকে DML বলে।

প্রধান ৪টি DML কমান্ড:
১. INSERT: নতুন ডেটা প্রবেশ করানো।
২. SELECT: ডেটা দেখা বা খুঁজে বের করা।
৩. UPDATE: বিদ্যমান ডেটা পরিবর্তন করা।
৪. DELETE: ডেটা মুছে ফেলা।

প্রথমে আসি DML কী? DML মানে হলো Data Manipulation Language। সোজা কথায়, টেবিলের স্ট্রাকচার বা গঠন ঠিক থাকার পর, তার ভেতরে যে ডেটা বা তথ্য থাকে—সেগুলো নিয়ে নাড়াচাড়া করার নামই ম্যানিপুলেশন। এর প্রধান চারটি হাতিয়ার বা কমান্ড আছে। ১। INSERT—নতুন তথ্য ঢোকানোর জন্য। ২। SELECT—তথ্য খুঁজে বের করার জন্য। মনে রাখবে, এটাই সবচেয়ে গুরুত্বপূর্ণ কমান্ড। ৩। UPDATE—কোনো ভুল তথ্য ঠিক করার জন্য। এবং ৪। DELETE—অপ্রয়োজনীয় তথ্য মুছে ফেলার জন্য।

১. INSERT INTO কমান্ড

ব্যবহার: টেবিলে নতুন রেকর্ড বা রো (Row) যুক্ত করতে।

সিনট্যাক্স (Syntax):

INSERT INTO Table_Name (Column1, Column2, ...)
VALUES (Value1, Value2, ...);

উদাহরণ:

INSERT INTO Student (Roll, Name, GPA)
VALUES (101, 'Rahim', 3.5);

নোট: টেক্সট ডেটাকে সিঙ্গেল কোটেশনের (' ') মধ্যে রাখতে হয়।

চলো প্রথমে ডেটাবেজে কিছু তথ্য ঢোকানো যাক। এর জন্য আমরা ব্যবহার করি `INSERT INTO` কমান্ড। সিনট্যাক্সটা খেয়াল করো। প্রথমে `INSERT INTO`, এরপর টেবিলের নাম। তারপর ব্র্যাকেটে কলামগুলোর নাম। এরপর `VALUES` লিখে ব্র্যাকেটে সেই অনুযায়ী মানগুলো দিতে হবে। যেমন—আমরা যদি Student টেবিলে ১০১ রোলের রহিম, যার জিপিএ ৩.৫—তার তথ্য রাখতে চাই, তাহলে কমান্ডটি হবে স্ক্রিনে দেখানো উদাহরণের মতো। মনে রাখবে, টেক্সট বা নাম লিখলে সেটাকে সিঙ্গেল কোটেশনের (' ') ভেতরে রাখতে হয়।

২. SELECT কমান্ড (বেসিক)

ব্যবহার: ডেটাবেজ থেকে তথ্য প্রদর্শন করা।

সব ডেটা দেখতে:

SELECT * FROM Table_Name;

উদাহরণ: SELECT * FROM Student;
(* চিহ্ন মানে সব কলাম)

নির্দিষ্ট কলাম দেখতে:

SELECT Column1, Column2 FROM Table_Name;

উদাহরণ: SELECT Name, GPA FROM Student;

তথ্য তো ঢোকানো হলো, এবার সেটা দেখব কীভাবে? এর জন্য ব্যবহার করি `SELECT` কমান্ড। তুমি যদি টেবিলের সব তথ্য, সব কলাম দেখতে চাও, তাহলে লিখবে `SELECT * FROM Student;`। এখানে এই স্টার বা অ্যাস্টেরিস্ক (*) চিহ্ন মানে হলো 'সব কিছু'। আর যদি তুমি শুধু ছাত্রের নাম আর জিপিএ দেখতে চাও, অন্য কিছু না—তাহলে নির্দিষ্ট করে কলামের নাম বলে দিতে হবে। যেমন: `SELECT Name, GPA FROM Student;`।

শর্ত সাপেক্ষে খোঁজা: WHERE Clause

ব্যবহার: নির্দিষ্ট শর্ত পূরণ করে এমন ডেটা খুঁজে বের করা (Filtering)।

সিনট্যাক্স:

SELECT * FROM Table_Name WHERE Condition;

উদাহরণ (যাদের জিপিএ ৫):

SELECT * FROM Student WHERE GPA = 5.0;

এখন ধরো, তোমার টেবিলে হাজার হাজার ছাত্র আছে। তুমি সবার তথ্য চাও না, শুধু তাদের চাও যারা জিপিএ ৫ পেয়েছে। তখন আমাদের `SELECT` এর সাথে একটা শর্ত বা লেজুড় জুড়ে দিতে হবে, যার নাম `WHERE` ক্লজ। যেমন: `SELECT * FROM Student WHERE GPA = 5.0;`। এই কমান্ড দিলে ডেটাবেজ শুধু তাদের তথ্যই দেখাবে যাদের জিপিএ ৫। এটা অনেকটা ছাঁকনি দিয়ে চা ছাঁকার মতো, আমরা অপ্রয়োজনীয় ডেটা বাদ দিয়ে শুধু দরকারিটুকু নিচ্ছি।

তুলনামূলক ও লজিক্যাল অপারেটর

তুলনামূলক অপারেটর (Comparison Operators):
- = (সমান), > (বড়), < (ছোট)
- >= (বড় বা সমান), <= (ছোট বা সমান), <> (সমান নয়)

লজিক্যাল অপারেটর (Logical Operators):
- AND: দুটি শর্তই সত্য হতে হবে।
- OR: যেকোনো একটি শর্ত সত্য হলেই হবে।
- NOT: শর্তটি সত্য না হলে।

উদাহরণ:

SELECT * FROM Student 
WHERE Board = 'Dhaka' AND GPA = 5.0;

শর্ত দেওয়ার সময় আমরা বিভিন্ন অপারেটর ব্যবহার করি। যেমন সমান (=), বড় (>), বা ছোট (<)। কিন্তু যদি একাধিক শর্ত থাকে? ধরো, আমি এমন ছাত্র খুঁজছি যার বাড়ি ঢাকা 'এবং' যে জিপিএ ৫ পেয়েছে। তখন আমরা `AND` অপারেটর ব্যবহার করি। `AND` মানে হলো দুটো শর্তই মিলতে হবে। আর যদি বলি ঢাকা বোর্ড 'অথবা' রাজশাহী বোর্ড—যেকোনো একটা হলেই চলবে, তখন ব্যবহার করি `OR`। এই লজিকটা বোঝা খুব জরুরি।

প্যাটার্ন ম্যাচিং: LIKE Operator

ব্যবহার: কোনো টেক্সট বা স্ট্রিং এর আংশিক মিল খুঁজে বের করতে।

ওয়াইল্ডকার্ড (Wildcards):
- % : যেকোনো সংখ্যক ক্যারেক্টার।
- _ : একটি মাত্র ক্যারেক্টার।

উদাহরণ (যাদের নাম 'R' দিয়ে শুরু):

SELECT * FROM Student WHERE Name LIKE 'R%';

(এটি 'Rahim', 'Ratul', 'Rina' - সবাইকে খুঁজে পাবে)

অনেক সময় আমাদের পুরো নাম মনে থাকে না। হয়তো মনে আছে ছাত্রটির নাম 'R' দিয়ে শুরু। তখন আমরা `LIKE` অপারেটর ব্যবহার করি। এটাকে বলে প্যাটার্ন ম্যাচিং। যেমন: `WHERE Name LIKE 'R%'`। এখানে এই পার্সেন্টেজ (%) চিহ্নটাকে বলে ওয়াইল্ডকার্ড। এর মানে হলো 'R' এর পরে যা ইচ্ছা তাই থাকতে পারে। তাহলে Rahim, Ratul, Rina—সবাইকে এই কুয়েরি খুঁজে বের করবে।

ডেটা সাজানো: ORDER BY

ব্যবহার: ফলাফলকে ছোট থেকে বড় বা বড় থেকে ছোট ক্রমে সাজাতে।
- ASC = Ascending (ছোট থেকে বড়) [ডিফল্ট]
- DESC = Descending (বড় থেকে ছোট)

উদাহরণ (মেধা তালিকা তৈরি):

SELECT * FROM Student 
ORDER BY GPA DESC;

পরীক্ষার রেজাল্ট শিট বা মেধা তালিকা কীভাবে তৈরি হয়? জিপিএ বা নম্বরের ভিত্তিতে সাজিয়ে, তাই না? ডেটাবেজে এই সাজানোর কাজটা করে `ORDER BY` কমান্ড। ডিফল্টভাবে এটি ছোট থেকে বড় (ASC) সাজায়। কিন্তু আমরা যদি মেধা তালিকা চাই, মানে যার জিপিএ সবচেয়ে বেশি সে সবার উপরে থাকবে, তাহলে আমাদের লিখতে হবে `ORDER BY GPA DESC`। এখানে `DESC` মানে Descending বা বড় থেকে ছোট।

অ্যাগ্রিগেট ফাংশন (Aggregate Functions)

কাজ: অনেকগুলো ডেটা থেকে হিসাব করে একটি মান বের করা।

জনপ্রিয় ফাংশনসমূহ:
1. COUNT(*): মোট কতগুলো রেকর্ড আছে।
2. MAX(Column): সর্বোচ্চ মান বের করা।
3. MIN(Column): সর্বনিম্ন মান বের করা।
4. AVG(Column): গড় মান বের করা।
5. SUM(Column): যোগফল বের করা।

উদাহরণ:

SELECT AVG(GPA) FROM Student;

মাঝেমধ্যে আমাদের খুঁটিনাটি ডেটার চেয়ে সামগ্রিক বা সামারি ডেটা বেশি দরকার হয়। যেমন—ক্লাসে 'মোট' ছাত্র কতজন? বা 'সর্বোচ্চ' জিপিএ কত? বা 'গড়' জিপিএ কত? এসব হিসাবের জন্য SQL-এ চমৎকার কিছু ফাংশন আছে, যাদের বলে অ্যাগ্রিগেট ফাংশন। `COUNT` দিয়ে গণনা করা হয়, `MAX` দিয়ে সর্বোচ্চ এবং `MIN` দিয়ে সর্বনিম্ন বের করা হয়। `AVG` দিয়ে গড় এবং `SUM` দিয়ে যোগফল বের করা যায়। এগুলো এক নিমিষেই হাজার হাজার ডেটার হিসাব করে দিতে পারে।

৩. UPDATE কমান্ড (সতর্কতা!)

ব্যবহার: ভুল তথ্য সংশোধন বা আপডেট করতে।

সিনট্যাক্স:

UPDATE Table_Name SET Column = Value 
WHERE Condition;

উদাহরণ (রোল ১০১ এর জিপিএ পরিবর্তন):

UPDATE Student SET GPA = 5.0 
WHERE Roll = 101;

⚠️ সতর্কতা: WHERE না দিলে সবার জিপিএ পরিবর্তন হয়ে যাবে!

এবার আসি খুবই স্পর্শকাতর একটি কমান্ডে—`UPDATE`। ধরো, রোল ১০১ এর জিপিএ ভুলে ৩.৫ উঠেছে, আসলে হবে ৫.০। এটা ঠিক করতে আমরা `UPDATE` কমান্ড ব্যবহার করি। কমান্ডটি হলো: `UPDATE Student SET GPA = 5.0 WHERE Roll = 101`। এখানে খুব সাবধান! যদি ভুল করে `WHERE Roll = 101` অংশটুকু না লেখো, তাহলে ডেটাবেজের সব ছাত্রের জিপিএ ৫ হয়ে যাবে! তাই আপডেট করার সময় সবসময় `WHERE` ক্লজ চেক করে নেবে।

৪. DELETE কমান্ড (সতর্কতা!)

ব্যবহার: অপ্রয়োজনীয় রেকর্ড মুছে ফেলতে।

সিনট্যাক্স:

DELETE FROM Table_Name WHERE Condition;

উদাহরণ (রোল ১০১ কে মুছে ফেলা):

DELETE FROM Student WHERE Roll = 101;

⚠️ সতর্কতা: WHERE না দিলে টেবিলের সব ডেটা মুছে যাবে!

সর্বশেষ কমান্ড—`DELETE`। কোনো ছাত্র টিসি নিয়ে চলে গেলে তার তথ্য রাখার দরকার নেই। তখন আমরা লিখব `DELETE FROM Student WHERE Roll = 101`। আপডেটের মতোই, এখানেও `WHERE` ক্লজ ব্যবহার না করলে মহাবিপদ! পুরো টেবিলের সব ডেটা মুছে যাবে। তাই ডিলিট কমান্ড চালানোর আগে ১০ বার ভাববে এবং শর্ত ঠিক আছে কি না দেখে নেবে।

সারসংক্ষেপ

আজ আমরা যা শিখলাম:

১। SQL বা কুয়েরি ব্যবহার করে ডেটাবেজ নিয়ন্ত্রণ করা হয়।
২। DML এর প্রধান ৪টি কমান্ড: SELECT, INSERT, UPDATE, DELETE.
৩। WHERE ক্লজ ব্যবহার করে নির্দিষ্ট তথ্য খুঁজে বের করা।
৪। ORDER BY দিয়ে সাজানো এবং Aggregate Function দিয়ে হিসাব করা।

উপদেশ: UPDATE ও DELETE ব্যবহারে সর্বদা সতর্ক থাকতে হবে।

আজকে আমরা অনেক গুরুত্বপূর্ণ বিষয় শিখলাম। আমরা জানলাম SQL দিয়ে কীভাবে ডেটাবেজের সাথে কথা বলতে হয়। আমরা চারটি প্রধান কাজ শিখেছি—তথ্য ঢোকানো (INSERT), খোঁজা (SELECT), পরিবর্তন করা (UPDATE) এবং মোছা (DELETE)। মনে রাখবে, একজন ভালো ডেটাবেজ অ্যাডমিনিস্ট্রেটর হওয়ার প্রথম ধাপ হলো `SELECT` কুয়েরিতে দক্ষ হওয়া এবং `UPDATE` বা `DELETE` ব্যবহারে সতর্ক থাকা। বাসায় তোমরা এই কমান্ডগুলো প্র্যাকটিস করবে। ধন্যবাদ সবাইকে।

৬.৫ ডেটা ম্যানিপুলেশন (DML) ও কুয়েরি (SQL) - বিস্তারিত পাঠ

পড়তে প্রায় 14 মিনিট

লেকচারের শুরুতে আমরা জেনেছি কীভাবে গুগল বা ফেসবুক মুহূর্তের মধ্যে আমাদের প্রয়োজনীয় তথ্য খুঁজে বের করে। যখন তুমি গুগলে কিছু লিখে সার্চ দাও, তখন ব্যাকগ্রাউন্ডে বিশাল ডেটাবেজ থেকে নির্দিষ্ট তথ্যটি খুঁজে বের করার জন্য একটি বিশেষ ভাষা কাজ করে। এই সেকশনে আমরা সেই জাদুকরী ভাষা 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-এ লজিক্যাল অপারেটর ব্যবহার করা হয়।

Logical Operators Venn Diagram

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) থাকে।

SQL GROUP BY Illustration

$$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 ইত্যাদি।

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

সৃজনশীল প্রশ্ন

সৃজনশীল প্রশ্ন ১

নিচের টেবিলটি লক্ষ্য কর এবং প্রশ্নগুলোর উত্তর দাও:

টেবিলের নাম: Result

Roll Subject Marks
101 Bangla 75
102 English 60
101 ICT 85
103 Math 32

(ক) DML কী?
(খ) 'SELECT' কমান্ডকে কুয়েরি ল্যাঙ্গুয়েজের প্রাণ বলা হয় কেন?
(গ) উদ্দীপকের টেবিল হতে যাদের মার্কস ৮০-এর বেশি তাদের রোল (Roll) ও বিষয় (Subject) দেখার জন্য SQL কমান্ড লিখ।
(ঘ) উদ্দীপকের টেবিল থেকে যে বিষয়ের মার্কস ৩৩-এর নিচে (ফেইল) সেই রেকর্ডটি মুছে ফেলার এবং ১০১ রোলের 'Bangla' বিষয়ের মার্কস ৮০ করার জন্য প্রয়োজনীয় SQL কোড বিশ্লেষণ কর।

উত্তর

(ক) DML এর পূর্ণরূপ হলো Data Manipulation Language। ডেটাবেজ টেবিলে ডেটা ইনসার্ট, আপডেট, ডিলিট এবং কুয়েরি করার জন্য যে ল্যাঙ্গুয়েজ বা কমান্ডগুলো ব্যবহৃত হয়, তাকে DML বলে।

(খ) ডেটাবেজ থেকে প্রয়োজনীয় তথ্য খুঁজে বের করা বা প্রদর্শন করার জন্য SELECT কমান্ড ব্যবহৃত হয়। ডেটাবেজ ম্যানেজমেন্টের মূল উদ্দেশ্যই হলো প্রয়োজনের সময় সঠিক তথ্য পাওয়া। যেহেতু SELECT কমান্ড ছাড়া ডেটা রিট্রিভ বা উদ্ধার করা সম্ভব নয় এবং প্রায় সকল অপারেশন শেষে ফলাফল দেখতে এটি লাগে, তাই একে কুয়েরি ল্যাঙ্গুয়েজের প্রাণ বলা হয়।

(গ) উদ্দীপকের 'Result' টেবিল থেকে যাদের মার্কস ৮০-এর বেশি তাদের রোল ও বিষয় দেখার জন্য SQL কমান্ডটি হলো:

SELECT Roll, Subject 
FROM Result 
WHERE Marks > 80;

ব্যাখ্যা: এখানে SELECT ক্লজ দিয়ে Roll এবং Subject কলাম নির্বাচন করা হয়েছে, FROM দিয়ে টেবিলের নাম (Result) নির্দিষ্ট করা হয়েছে এবং WHERE ক্লজ ব্যবহার করে মার্কস ৮০ এর বেশি হওয়ার শর্ত জুড়ে দেওয়া হয়েছে।

(ঘ) উদ্দীপক অনুসারে দুটি কাজ করতে হবে: রেকর্ড মুছে ফেলা এবং ডেটা আপডেট করা।

  1. রেকর্ড মুছে ফেলা: ৩৩-এর নিচে মার্কস (ফেইল) পাওয়া রেকর্ডটি মুছে ফেলার কমান্ড:
DELETE FROM Result 
WHERE Marks < 33;

এই কমান্ডটি DELETE স্টেটমেন্ট ব্যবহার করে WHERE শর্তের মাধ্যমে যে সকল রেকর্ডের Marks ৩৩ এর কম, সেগুলো টেবিল থেকে স্থায়ীভাবে মুছে ফেলবে।

  1. ডেটা আপডেট করা: ১০১ রোলের 'Bangla' বিষয়ের মার্কস ৮০ করার কমান্ড:
UPDATE Result 
SET Marks = 80 
WHERE Roll = 101 AND Subject = 'Bangla';

এই কমান্ডটি UPDATE স্টেটমেন্ট ব্যবহার করে নির্দিষ্ট শর্ত (WHERE Roll = 101 AND Subject = 'Bangla') মেনে Marks কলামের মান পরিবর্তন করে ৮০ সেট করবে। এখানে দুটি শর্ত AND অপারেটর দিয়ে যুক্ত করা হয়েছে যাতে ভুলবশত অন্য বিষয়ের মার্কস পরিবর্তন না হয়।


সৃজনশীল প্রশ্ন ২

একটি অফিসের 'Employee' টেবিলে কর্মীদের বেতন ও শহরের তথ্য সংরক্ষিত আছে:

টেবিলের নাম: Employee

EmpID Name City Salary
E-01 Rakib Dhaka 25000
E-02 Sumon Khulna 20000
E-03 Jui Dhaka 30000
E-04 Mitu Rajshahi 22000

(ক) ক্লজ (Clause) কী?
(খ) ORDER BY এবং GROUP BY এর কাজ ব্যাখ্যা কর।
(গ) উদ্দীপকের 'Employee' টেবিল হতে 'Dhaka' শহরের কর্মীদের গড় বেতন (Average Salary) বের করার কুয়েরি তৈরি কর।
(ঘ) উদ্দীপকের টেবিলে এগ্রিগেট ফাংশন ব্যবহার করে সর্বোচ্চ ও সর্বনিম্ন বেতন নির্ণয়ের পদ্ধতি ও এর প্রয়োজনীয়তা বিশ্লেষণ কর।

উত্তর

(ক) SQL স্টেটমেন্টে শর্ত আরোপ, ডেটা সাজানো বা গ্রুপিং করার জন্য যে সকল বিশেষ কিওয়ার্ড বা অংশ ব্যবহৃত হয় (যেমন- WHERE, HAVING, FROM), সেগুলোকে ক্লজ (Clause) বলে।

(খ) ORDER BY এবং GROUP BY ক্লজ দুটির কাজ ভিন্ন:
১. ORDER BY: এটি কুয়েরির ফলাফলকে নির্দিষ্ট কলামের মানের ওপর ভিত্তি করে উর্ধ্বক্রম (Ascending) বা অধঃক্রম (Descending) অনুসারে সাজাতে ব্যবহৃত হয়।
২. GROUP BY: এটি একই মানের ডেটাগুলোকে একত্রিত করে একটি গ্রুপ বা দলে ভাগ করতে ব্যবহৃত হয়, সাধারণত এগ্রিগেট ফাংশন (যেমন SUM, AVG) এর সাথে এটি কাজ করে।

(গ) উদ্দীপকের টেবিল হতে 'Dhaka' শহরের কর্মীদের গড় বেতন বের করার SQL কমান্ড:

SELECT AVG(Salary) AS Average_Salary
FROM Employee 
WHERE City = 'Dhaka';

ব্যাখ্যা: এখানে AVG(Salary) ফাংশনটি 'Salary' কলামের গড় মান বের করবে। WHERE City = 'Dhaka' শর্তটি নিশ্চিত করে যে, শুধুমাত্র ঢাকা শহরের কর্মীদের বেতনই গড়ের হিসেবে আসবে।

(ঘ) উদ্দীপকের টেবিলে সর্বোচ্চ ও সর্বনিম্ন বেতন নির্ণয়ের জন্য আমরা MAX() এবং MIN() এগ্রিগেট ফাংশন ব্যবহার করতে পারি।

সর্বোচ্চ বেতন নির্ণয়ের কুয়েরি:

SELECT MAX(Salary) FROM Employee;

এটি 'Salary' কলামের সবচেয়ে বড় মানটি (৩০,০০০) প্রদর্শন করবে।

সর্বনিম্ব বেতন নির্ণয়ের কুয়েরি:

SELECT MIN(Salary) FROM Employee;

এটি 'Salary' কলামের সবচেয়ে ছোট মানটি (২০,০০০) প্রদর্শন করবে।

বিশ্লেষণ: এগ্রিগেট ফাংশন ব্যবহার করে আমরা খুব সহজেই বিশাল ডেটাবেজ থেকে পরিসংখ্যানগত তথ্য পেতে পারি। যেমন, কোম্পানির স্যালারি স্কেলের রেঞ্জ বোঝার জন্য সর্বোচ্চ ও সর্বনিম্ন বেতন জানা জরুরি। এটি বাজেট তৈরি এবং আর্থিক সিদ্ধান্ত গ্রহণে ম্যানেজারদের সাহায্য করে। ম্যানুয়ালি হাজার হাজার ডেটা থেকে এই তথ্য বের করা সময়সাপেক্ষ, কিন্তু SQL এর এই ফাংশনগুলো দিয়ে তা মুহূর্তেই করা সম্ভব।


সৃজনশীল প্রশ্ন ৩

উদ্দীপক ১: শিক্ষক ক্লাসে বললেন, "ডেটাবেজে ডেটা খুঁজে পাওয়ার জন্য আমরা বিশেষ প্যাটার্ন ব্যবহার করি, যেমন কারো নামের শেষে 'h' আছে কিনা তা দেখা।"
উদ্দীপক ২: নিচের SQL কমান্ডটি লক্ষ্য কর:
SELECT * FROM Student WHERE Age BETWEEN 18 AND 20;

(ক) Wildcard ক্যারেক্টার কী?
(খ) DELETE এবং DROP কমান্ডের মধ্যে পার্থক্য লিখ।
(গ) উদ্দীপক-১ এ শিক্ষকের নির্দেশিত প্যাটার্নটি খোঁজার জন্য সঠিক SQL সিনট্যাক্স ব্যাখ্যাসহ লিখ।
(ঘ) উদ্দীপক-২ এর কমান্ডটি বিশ্লেষণ কর এবং IN অপারেটর ব্যবহার করে একই ফলাফল পাওয়ার উপায় আছে কি না মতামত দাও।

উত্তর

(ক) ডেটাবেজে টেক্সট বা স্ট্রিং সার্চ করার সময় আংশিক মিল খোঁজার জন্য যে বিশেষ চিহ্নগুলো (যেমন %, _) ব্যবহৃত হয়, তাদেরকে Wildcard ক্যারেক্টার বলে।

(খ) DELETE এবং DROP এর পার্থক্য:
১. DELETE: এটি একটি DML কমান্ড। এটি টেবিলের এক বা একাধিক রেকর্ড (Row) মুছে ফেলে, কিন্তু টেবিলের গঠন (Structure) ঠিক থাকে।
২. DROP: এটি একটি DDL কমান্ড। এটি সম্পূর্ণ টেবিল এবং এর গঠন ডেটাবেজ থেকে স্থায়ীভাবে মুছে ফেলে।

(গ) উদ্দীপক-১ এ শিক্ষকের নির্দেশিত প্যাটার্নটি হলো নামের শেষে 'h' থাকা। এর জন্য LIKE অপারেটর এবং % ওয়াইল্ডকার্ড ব্যবহার করতে হবে।

SQL সিনট্যাক্স:

SELECT * FROM TableName 
WHERE Name LIKE '%h';

ব্যাখ্যা: এখানে LIKE অপারেটরটি প্যাটার্ন ম্যাচিং এর কাজ করে। '%h' প্যাটার্নটির অর্থ হলো, শুরুতে যেকোনো সংখ্যক ক্যারেক্টার থাকতে পারে (যা % দ্বারা বোঝানো হয়েছে), কিন্তু শেষে অবশ্যই 'h' থাকতে হবে। সুতরাং, এই কমান্ডটি সেই সকল নাম প্রদর্শন করবে যা 'h' দিয়ে শেষ হয় (যেমন- Akash, Mithu ইত্যাদি নয়, কিন্তু 'Sarah' বা 'Akash' যদি শেষে h থাকে)।

(ঘ) উদ্দীপক-২ এর বিশ্লেষণ:
কমান্ডটি হলো: SELECT * FROM Student WHERE Age BETWEEN 18 AND 20;
এটি Student টেবিল থেকে সেই সব ছাত্রের তথ্য দেখাবে যাদের বয়স ১৮ থেকে ২০ এর মধ্যে (১৮ ও ২০ সহ)। BETWEEN অপারেটর একটি রেঞ্জ বা পরিসীমার মধ্যে ডেটা খুঁজতে ব্যবহৃত হয়।

IN অপারেটর দিয়ে বিকল্প উপায়:
হ্যাঁ, IN অপারেটর ব্যবহার করেও একই ফলাফল পাওয়া সম্ভব, তবে সেক্ষেত্রে নির্দিষ্ট মানগুলো বলে দিতে হবে। যেহেতু বয়স সাধারণত পূর্ণসংখ্যা (Integer) হয়, তাই ১৮, ১৯ এবং ২০ বছর বয়সের ছাত্রদের খুঁজতে আমরা নিচের কমান্ডটি ব্যবহার করতে পারি:

SELECT * FROM Student 
WHERE Age IN (18, 19, 20);

মতামত: যদি বয়সের মান ভগ্নাংশ না হয়, তবে IN (18, 19, 20) এবং BETWEEN 18 AND 20 একই ফলাফল দিবে। তবে যদি রেঞ্জটি অনেক বড় হয় (যেমন ১৮ থেকে ৬০), তখন IN ব্যবহার করে সব সংখ্যা লেখা কষ্টসাধ্য, সেক্ষেত্রে BETWEEN বেশি সুবিধাজনক। উদ্দীপকের ছোট রেঞ্জের ক্ষেত্রে উভয়ই কার্যকর।

এমসিকিউ

১। ডেটাবেজ টেবিল থেকে ডেটা খুঁজে বের করার জন্য কোন কমান্ডটি ব্যবহৃত হয়?

ক) UPDATE
খ) SELECT
গ) INSERT
ঘ) ALTER

সঠিক উত্তর: খ) SELECT

ব্যাখ্যা: ডেটাবেজ থেকে নির্দিষ্ট শর্তসাপেক্ষে বা সকল ডেটা দেখার জন্য SELECT কমান্ড ব্যবহৃত হয়। এটি DML এর একটি অংশ।


২। কুয়েরিতে শর্ত প্রয়োগ করার জন্য কোন ক্লজটি ব্যবহৃত হয়?

ক) ORDER BY
খ) GROUP BY
গ) WHERE
ঘ) HAVING

সঠিক উত্তর: গ) WHERE

ব্যাখ্যা: WHERE ক্লজটি ব্যবহার করে নির্দিষ্ট শর্তের ভিত্তিতে ডেটা ফিল্টার করা হয়। যেমন- WHERE Age > 18


৩। ডেটাবেজ টেবিলে নতুন রেকর্ড সংযোজন করার সঠিক কমান্ড কোনটি?

ক) ADD INTO
খ) INSERT INTO
গ) UPDATE INTO
ঘ) CREATE INTO

সঠিক উত্তর: খ) INSERT INTO

ব্যাখ্যা: টেবিলে নতুন সারি বা রেকর্ড যোগ করতে INSERT INTO কমান্ড ব্যবহার করা হয়।


৪। কোনো টেবিলের সকল ডেটা মুছে ফেলার জন্য কিন্তু টেবিলটি রেখে দেওয়ার জন্য কোন কমান্ডটি উপযুক্ত?

ক) DELETE
খ) DROP
গ) TRUNCATE
ঘ) REMOVE

সঠিক উত্তর: গ) TRUNCATE

ব্যাখ্যা: TRUNCATE কমান্ড টেবিলের সব ডেটা মুছে ফেলে কিন্তু টেবিলের স্ট্রাকচার ঠিক রাখে। DELETE দিয়েও করা যায় তবে TRUNCATE দ্রুত কাজ করে এবং লগ তৈরি করে না। (এখানে অপশনে TRUNCATE বেস্ট উত্তর, যদি না থাকে তবে DELETE হতো)।


৫। নামের শেষে 'a' আছে এমন ব্যক্তিকে খুঁজে বের করার জন্য সঠিক শর্ত কোনটি?

ক) LIKE 'a%'
খ) LIKE '%a'
গ) LIKE '%a%'
ঘ) LIKE '_a'

সঠিক উত্তর: খ) LIKE '%a'

ব্যাখ্যা: % ওয়াইল্ডকার্ডটি যেকোনো সংখ্যক ক্যারেক্টার বোঝায়। তাই %a মানে শুরুতে যা-ই থাক, শেষে অবশ্যই 'a' থাকবে।


৬। UPDATE কমান্ডের সাথে আবশ্যিকভাবে কোন ক্লজটি ব্যবহার করা উচিত যাতে সব ডেটা পরিবর্তিত না হয়?

ক) FROM
খ) SET
গ) WHERE
ঘ) GROUP BY

সঠিক উত্তর: গ) WHERE

ব্যাখ্যা: UPDATE কমান্ডে WHERE ক্লজ না দিলে টেবিলের সব রেকর্ডের মান আপডেট হয়ে যাবে, যা সাধারণত কাম্য নয়।


৭। নিচের কোনটি DML কমান্ড নয়?

ক) SELECT
খ) INSERT
গ) CREATE
ঘ) DELETE

সঠিক উত্তর: গ) CREATE

ব্যাখ্যা: CREATE হলো DDL (Data Definition Language) কমান্ড, এটি ডেটাবেজ বা টেবিল তৈরি করতে ব্যবহৃত হয়। বাকিগুলো DML।


৮। ORDER BY ক্লজটি ডিফল্টভাবে ডেটাকে কীভাবে সাজায়?

ক) Descending (বড় থেকে ছোট)
খ) Ascending (ছোট থেকে বড়)
গ) Random (এলোমেলো)
ঘ) None (কোনোটিই নয়)

সঠিক উত্তর: খ) Ascending (ছোট থেকে বড়)

ব্যাখ্যা: ORDER BY ক্লজে কিছু উল্লেখ না করলে এটি স্বয়ংক্রিয়ভাবে ASC বা ছোট থেকে বড় ক্রমে সাজায়।


৯। SELECT DISTINCT City FROM Student; কুয়েরিটি কী ফলাফল দিবে?

ক) সব ছাত্রের শহরের নাম দেখাবে
খ) শুধুমাত্র ভিন্ন ভিন্ন শহরের নাম দেখাবে
গ) একই শহরের নাম বারবার দেখাবে
ঘ) শহরের নামগুলো মুছে ফেলবে

সঠিক উত্তর: খ) শুধুমাত্র ভিন্ন ভিন্ন শহরের নাম দেখাবে

ব্যাখ্যা: DISTINCT কিওয়ার্ডটি ডুপ্লিকেট ভ্যালু বাদ দিয়ে ইউনিক বা ভিন্ন ভিন্ন মান প্রদর্শন করে।


১০। DELETE FROM Student; কমান্ডটি চালালে কী হবে?

ক) Student টেবিলটি মুছে যাবে
খ) Student টেবিলের সব ডেটা মুছে যাবে
গ) Student টেবিলের প্রথম সারি মুছে যাবে
ঘ) এরর দেখাবে

সঠিক উত্তর: খ) Student টেবিলের সব ডেটা মুছে যাবে

ব্যাখ্যা: WHERE ক্লজ ছাড়া DELETE কমান্ড চালালে টেবিলের সমস্ত রেকর্ড বা ডেটা মুছে যায়, কিন্তু টেবিলের স্ট্রাকচার থেকে যায়।


১১। AVG(), SUM(), MAX() ফাংশনগুলোকে কী বলা হয়?

ক) Scalar Function
খ) String Function
গ) Aggregate Function
ঘ) Logical Function

সঠিক উত্তর: গ) Aggregate Function

ব্যাখ্যা: এই ফাংশনগুলো একাধিক রো বা মানের ওপর কাজ করে একটি একক ফলাফল প্রদান করে, তাই এদের এগ্রিগেট ফাংশন বলে।


১২। কুয়েরির ফলাফলে কলামের নাম পরিবর্তন করে দেখানোর জন্য কোনটি ব্যবহৃত হয়?

ক) LIKE
খ) AS
গ) IS
ঘ) SET

সঠিক উত্তর: খ) AS

ব্যাখ্যা: AS কিওয়ার্ড ব্যবহার করে কলামের বা টেবিলের এলিয়াস (Alias) বা ছদ্মনাম দেওয়া হয়।


১৩। BETWEEN 10 AND 20 শর্তটি কোন মানগুলো নির্বাচন করবে?

ক) ১০ এবং ২০ বাদে মাঝের সংখ্যাগুলো
খ) ১০ থেকে ২০ পর্যন্ত (১০ ও ২০ সহ)
গ) শুধুমাত্র ১০ এবং ২০
ঘ) ১০ এর বড় এবং ২০ এর ছোট

সঠিক উত্তর: খ) ১০ থেকে ২০ পর্যন্ত (১০ ও ২০ সহ)

ব্যাখ্যা: BETWEEN অপারেটরটি রেঞ্জের শুরু এবং শেষের মানসহ মধ্যবর্তী সকল মান গ্রহণ করে (Inclusive)।


১৪। SQL এর পূর্ণরূপ কী?

ক) Simple Query Language
খ) Structured Question Language
গ) Structured Query Language
ঘ) Standard Query Language

সঠিক উত্তর: গ) Structured Query Language

ব্যাখ্যা: SQL হলো Structured Query Language, যা রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেমে ব্যবহৃত হয়।


১৫। দুটি টেবিল থেকে ডেটা একত্রিত করে দেখার জন্য কোনটি ব্যবহার করা হয়?

ক) MERGE
খ) JOIN
গ) SPLIT
ঘ) COMBINE

সঠিক উত্তর: খ) JOIN

ব্যাখ্যা: JOIN ক্লজ ব্যবহার করে দুই বা ততোধিক টেবিলের মধ্যে সম্পর্ক (Relation) তৈরি করে ডেটা একত্রিত করা হয়।


১৬। GROUP BY ক্লজটি সাধারণত কাদের সাথে ব্যবহৃত হয়?
i. SUM()
ii. AVG()
iii. COUNT()

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: GROUP BY ক্লজটি এগ্রিগেট ফাংশনগুলোর (SUM, AVG, COUNT, MAX, MIN) সাথে ব্যবহৃত হয়ে ডেটাকে গ্রুপ করতে সাহায্য করে।


১৭। Wildcard ক্যারেক্টারগুলো হলো-
i. % (শতাংশ চিহ্ন)
ii. * (তারা চিহ্ন)
iii. _ (আন্ডারস্কোর)

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: খ) i ও iii

ব্যাখ্যা: SQL-এ সাধারণত % (যেকোনো সংখ্যক ক্যারেক্টার) এবং _ (একটি মাত্র ক্যারেক্টার) ওয়াইল্ডকার্ড হিসেবে ব্যবহৃত হয়।


১৮। ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML) এর কমান্ডগুলো হলো-
i. INSERT
ii. UPDATE
iii. GRANT

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: INSERTUPDATE হলো DML কমান্ড। GRANT হলো DCL (Data Control Language) কমান্ড।


১৯। ORDER BY ক্লজ ব্যবহার করে-
i. ডেটা এসেন্ডিং অর্ডারে সাজানো যায়
ii. ডেটা ডিসেন্ডিং অর্ডারে সাজানো যায়
iii. ডেটা ডিলিট করা যায়

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: ORDER BY শুধুমাত্র ডেটা সাজানোর (Sorting) কাজে ব্যবহৃত হয়, ডেটা ডিলিট করতে পারে না।


২০। HAVING ক্লজটি কখন কাজ করে?
i. গ্রুপিং করার পরে
ii. গ্রুপিং করার আগে
iii. এগ্রিগেট ফাংশনের শর্ত যাচাইয়ে

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: খ) i ও iii

ব্যাখ্যা: HAVING ক্লজটি GROUP BY এর পরে কাজ করে এবং এটি এগ্রিগেট ফাংশনের ওপর শর্ত আরোপ করতে ব্যবহৃত হয়।


নিচের উদ্দীপকটি পড় এবং ২১ ও ২২ নং প্রশ্নের উত্তর দাও:

টেবিলের নাম: Result
| Roll | GPA |
| :--- | :--- |
| 101 | 5.00 |
| 102 | 4.50 |
| 103 | 5.00 |

২১। SELECT COUNT(Roll) FROM Result WHERE GPA = 5.00; কুয়েরিটির ফলাফল কত হবে?

ক) 1
খ) 2
গ) 3
ঘ) 5.00

সঠিক উত্তর: খ) 2

ব্যাখ্যা: টেবিলে GPA 5.00 আছে এমন রোল দুইটি (১০১ এবং ১০৩)। তাই COUNT ফাংশন ২ রিটার্ন করবে।


২২। SELECT MAX(GPA) FROM Result; কুয়েরিটি কী নির্দেশ করে?

ক) সবচাইতে কম জিপিএ
খ) সবচাইতে বেশি জিপিএ
গ) গড় জিপিএ
ঘ) মোট জিপিএ

সঠিক উত্তর: খ) সবচাইতে বেশি জিপিএ

ব্যাখ্যা: MAX() ফাংশনটি নির্দিষ্ট কলামের সর্বোচ্চ মানটি খুঁজে বের করে।


নিচের SQL কমান্ডটি লক্ষ্য কর এবং ২৩-২৫ নং প্রশ্নের উত্তর দাও:

SELECT Name, Salary 
FROM Employees 
WHERE Salary > 20000 
ORDER BY Salary DESC;

২৩। উদ্দীপকের কুয়েরিতে কোন ক্লজটি ডেটা ফিল্টার করছে?

ক) SELECT
খ) FROM
গ) WHERE
ঘ) ORDER BY

সঠিক উত্তর: গ) WHERE

ব্যাখ্যা: WHERE Salary > 20000 অংশটি শর্ত যাচাই করে ডেটা ফিল্টার করছে।


২৪। কুয়েরির ফলাফলে ডেটাগুলো কীভাবে প্রদর্শিত হবে?

ক) নামের বর্ণানুক্রমে
খ) বেতনের ছোট থেকে বড় ক্রমে
গ) বেতনের বড় থেকে ছোট ক্রমে
ঘ) এলোমেলোভাবে

সঠিক উত্তর: গ) বেতনের বড় থেকে ছোট ক্রমে

ব্যাখ্যা: ORDER BY Salary DESC থাকার কারণে ফলাফল বেতনের অধঃক্রম বা বড় থেকে ছোট (Descending) অনুসারে সাজানো হবে।


২৫। যদি DESC এর পরিবর্তে ASC ব্যবহার করা হতো, তবে কী হতো?

ক) বেতন বড় থেকে ছোট দেখাতো
খ) বেতন ছোট থেকে বড় দেখাতো
গ) কোনো পরিবর্তন হতো না
ঘ) এরর দেখাতো

সঠিক উত্তর: খ) বেতন ছোট থেকে বড় দেখাতো

ব্যাখ্যা: ASC (Ascending) কিওয়ার্ডটি ছোট থেকে বড় ক্রমে সাজাতে ব্যবহৃত হয়।