SQL Commands কেন দরকার?
তুমি একটা হাসপাতালে কাজ করো। তোমাকে করতে হবে — একজন রোগী খুঁজে বের করা, নতুন রোগী যোগ করা, রোগীর ঠিকানা হালনাগাদ করা, এবং একটা ভুল রেকর্ড মুছে ফেলা।
❓ আমরা কীভাবে ডেটাবেজকে বলবো কী করতে হবে?
❓ আমরা কি সরাসরি বাংলা বা ইংরেজিতে টাইপ করতে পারি?
❓ কেন একটা বিশেষ ভাষা দরকার?
উত্তর হলো: না, ডেটাবেজ সাধারণ মানুষের ভাষা (যেমন "আমাকে সব রোগীর তালিকা দেখাও") বুঝতে পারে না। এজন্য দরকার একটা নির্দিষ্ট, সুনির্দিষ্ট নিয়মে লেখা ভাষা — এটাই SQL (Structured Query Language)।
দুইজন মানুষ যদি ভিন্ন ভাষায় কথা বলে, তাদের মাঝে একজন দোভাষী দরকার হয়, যে দুই ভাষাই বোঝে। ঠিক তেমনি, মানুষ ও ডেটাবেজের মাঝে SQL কাজ করে একটা "দোভাষী" হিসেবে — মানুষের ইচ্ছাকে ডেটাবেজের বোধগম্য নির্দেশে রূপান্তর করে।
(মানুষ)
(নির্দিষ্ট ভাষায় নির্দেশ)
(নির্দেশ বোঝে ও কাজ করে)
(ফলাফল)
SQL Commands কী? পাঁচটা ধরন
সংজ্ঞা: SQL Command হলো একটা নির্দিষ্ট নিয়মে লেখা নির্দেশ, যা দিয়ে ডেটাবেজকে কোনো নির্দিষ্ট কাজ (তৈরি, দেখা, পরিবর্তন, মুছে ফেলা ইত্যাদি) করতে বলা হয়।
SQL-এর ভেতরেও কাজের ধরন অনুযায়ী আলাদা আলাদা "বিভাগ" আছে — ঠিক যেমন একটা হাসপাতালে ডাক্তার, নার্স, রিসেপশনিস্ট আলাদা আলাদা কাজ করে, SQL কমান্ডগুলোও কাজের ধরন অনুযায়ী পাঁচটা প্রধান শ্রেণিতে ভাগ করা হয়।
| শ্রেণি | পূর্ণরূপ | কাজ | উদাহরণ কমান্ড |
|---|---|---|---|
| DDL | Data Definition Language | ডেটাবেজের কাঠামো তৈরি/পরিবর্তন/মুছে ফেলা | CREATE, ALTER, DROP |
| DML | Data Manipulation Language | টেবিলের ভেতরের প্রকৃত ডেটা পরিবর্তন | INSERT, UPDATE, DELETE |
| DQL | Data Query Language | ডেটা খুঁজে বের করে দেখা | SELECT |
| DCL | Data Control Language | কে কী করতে পারবে তার অনুমতি নিয়ন্ত্রণ | GRANT, REVOKE |
| TCL | Transaction Control Language | একাধিক ধাপের পরিবর্তন নিয়ন্ত্রণ | COMMIT, ROLLBACK, SAVEPOINT |
DDL বানায় "ঘর" (টেবিল), DML সেই ঘরের ভেতরে "জিনিসপত্র" (ডেটা) রাখে-সরায়, DQL সেই জিনিসপত্র "দেখে", DCL ঠিক করে "কে ঘরে ঢুকতে পারবে", আর TCL নিশ্চিত করে একাধিক কাজ একসাথে ঠিকভাবে সম্পন্ন হয়েছে কিনা।
DDL (Data Definition Language)
DDL কমান্ডগুলো ডেটাবেজের "কাঠামো" নিয়ন্ত্রণ করে — যেমন একজন রাজমিস্ত্রি ঘরের দেয়াল, দরজা তৈরি বা ভাঙে, কিন্তু ঘরের ভেতরের আসবাবপত্র নিয়ে মাথা ঘামায় না।
🏗️ CREATE
উদ্দেশ্য: নতুন টেবিল বা ডেটাবেজ তৈরি করা।
SQL কোডব্যাখ্যা: এটা "Students" নামে একটা খালি টেবিলের কাঠামো তৈরি করলো — এখনো কোনো ডেটা নেই, শুধু কাঠামো।
🔧 ALTER
উদ্দেশ্য: বিদ্যমান টেবিলের কাঠামো পরিবর্তন করা (নতুন কলাম যোগ/বাদ)।
SQL কোডব্যাখ্যা: Students টেবিলে "phone" নামে একটা নতুন কলাম যোগ হলো, যা আগে ছিলো না।
ALTER করার আগে ভাবো এই পরিবর্তন বিদ্যমান ডেটাতে কী প্রভাব ফেলবে।
🗑️ DROP
উদ্দেশ্য: পুরো টেবিল বা ডেটাবেজ স্থায়ীভাবে মুছে ফেলা।
SQL কোডDROP চালালে টেবিলটাই আর থাকবে না, তার ভেতরের সব ডেটা ও কাঠামো দুটোই স্থায়ীভাবে চলে যাবে। এটা সহজে ফেরত আনা যায় না।
🧹 TRUNCATE
উদ্দেশ্য: টেবিলের সব ডেটা একসাথে খালি করা, কিন্তু কাঠামো রেখে দেওয়া।
SQL কোডব্যাখ্যা: টেবিলের সব শিক্ষার্থীর রেকর্ড চলে গেলো, কিন্তু কলাম কাঠামো (id, name, class) এখনো আছে।
🏷️ RENAME
উদ্দেশ্য: একটা টেবিলের নাম পরিবর্তন করা।
SQL কোডব্যাখ্যা: "Students" টেবিলের নাম বদলে "Learners" হলো, তবে ভেতরের সব ডেটা ও কাঠামো অপরিবর্তিত থাকলো।
DML (Data Manipulation Language)
DDL ঘরের কাঠামো বানায়, আর DML সেই ঘরের ভেতরে "আসবাবপত্র" (প্রকৃত ডেটা) রাখা, সরানো ও মুছে ফেলার কাজ করে।
➕ INSERT
উদ্দেশ্য: নতুন রেকর্ড যোগ করা।
আগে
| id | name |
|---|---|
| 1 | রিমা |
SQL কোয়েরি
| id | name |
|---|---|
| 1 | রিমা |
| 2 | সাকিব |
✏️ UPDATE
উদ্দেশ্য: বিদ্যমান রেকর্ড পরিবর্তন করা।
আগে
| id | name |
|---|---|
| 2 | সাকিব |
SQL কোয়েরি
| id | name |
|---|---|
| 2 | সাকিব হাসান |
WHERE ছাড়া UPDATE চালালে টেবিলের সব রেকর্ড পরিবর্তিত হয়ে যাবে!
🗑️ DELETE
উদ্দেশ্য: নির্দিষ্ট শর্তে রেকর্ড মুছে ফেলা।
আগে
| id | name |
|---|---|
| 1 | রিমা |
| 2 | সাকিব হাসান |
SQL কোয়েরি
| id | name |
|---|---|
| 2 | সাকিব হাসান |
UPDATE বা DELETE চালানোর আগে একই WHERE শর্ত দিয়ে একটা SELECT চালিয়ে দেখে নাও কোন রেকর্ডগুলো প্রভাবিত হবে।
DQL (Data Query Language)
DQL মানে ডেটা "খুঁজে বের করে দেখা" — মূল কমান্ড হলো SELECT।
সব দেখা
SQL কোড| id | name | class |
|---|---|---|
| 2 | সাকিব হাসান | ৯ |
| 3 | তানভীর | ৮ |
নির্দিষ্ট কলাম দেখা
SQL কোড| name |
|---|
| সাকিব হাসান |
| তানভীর |
শর্ত দিয়ে খোঁজা (WHERE)
SQL কোড| id | name | class |
|---|---|---|
| 3 | তানভীর | ৮ |
সাজিয়ে দেখা (ORDER BY)
SQL কোড| id | name | class |
|---|---|---|
| 2 | সাকিব হাসান | ৯ |
| 3 | তানভীর | ৮ |
ডুপ্লিকেট বাদ দেওয়া (DISTINCT)
SQL কোড| class |
|---|
| ৯ |
| ৮ |
সীমিত ফলাফল (LIMIT)
SQL কোড| id | name | class |
|---|---|---|
| 2 | সাকিব হাসান | ৯ |
যখন WHERE ব্যবহার হয়, ডেটাবেজ প্রতিটা সারি পরীক্ষা করে দেখে শর্তটা মিলছে কিনা — অনেকটা লাইব্রেরিয়ান একটা একটা করে বই দেখে নির্দিষ্ট বইটা খুঁজে বের করার মতো।
DCL (Data Control Language)
একটা স্কুলে, প্রিন্সিপাল সব কিছু করতে পারেন, শিক্ষক নির্দিষ্ট কিছু কাজ করতে পারেন (যেমন নম্বর দেওয়া), কিন্তু শিক্ষার্থী শুধু নিজের রেজাল্ট দেখতে পারে, কিছু পরিবর্তন করতে পারে না।
সব অনুমতি
সীমিত অনুমতি
শুধু দেখার অনুমতি
ডেটাবেজেও ঠিক এই ধরনের অনুমতি নিয়ন্ত্রণ করা হয় DCL কমান্ড দিয়ে।
✅ GRANT
উদ্দেশ্য: কাউকে নির্দিষ্ট অনুমতি দেওয়া।
SQL কোডব্যাখ্যা: "teacher_user" নামের ব্যবহারকারীকে শুধু Students টেবিল দেখার (SELECT) অনুমতি দেওয়া হলো, পরিবর্তন করার অনুমতি না।
❌ REVOKE
উদ্দেশ্য: আগে দেওয়া অনুমতি প্রত্যাহার করা।
SQL কোডব্যাখ্যা: এখন "teacher_user" আর Students টেবিল দেখতে পারবে না।
এভাবে অনুমতি নিয়ন্ত্রণ করলে সংবেদনশীল তথ্য (যেমন বেতন, স্বাস্থ্য তথ্য) শুধু সঠিক মানুষরাই দেখতে বা পরিবর্তন করতে পারে।
TCL (Transaction Control Language)
তুমি ব্যাংকে গিয়ে তোমার অ্যাকাউন্ট থেকে বন্ধুর অ্যাকাউন্টে টাকা পাঠাচ্ছো। এতে দুইটা কাজ হয় — তোমার অ্যাকাউন্ট থেকে টাকা কমা, আর বন্ধুর অ্যাকাউন্টে টাকা যোগ হওয়া। যদি প্রথম কাজটা হয়ে যায় কিন্তু দ্বিতীয়টা মাঝপথে থেমে যায় (যেমন সিস্টেম ক্র্যাশ), তাহলে টাকা "উধাও" হয়ে যাবে!
এই সমস্যা এড়াতে ব্যবহার হয় Transaction — একাধিক ধাপকে একটা "প্যাকেজ" হিসেবে চালানো, যেখানে হয় সবগুলো ধাপ সফল হবে, নাহলে কোনোটাই হবে না।
নাহলে → ROLLBACK
✅ COMMIT
উদ্দেশ্য: সব পরিবর্তন স্থায়ীভাবে সংরক্ষণ করা।
SQL কোডব্যাখ্যা: এই পর্যন্ত করা সব পরিবর্তন এখন স্থায়ী হয়ে গেলো, আর ফিরিয়ে নেওয়া যাবে না।
↩️ ROLLBACK
উদ্দেশ্য: শেষ COMMIT-এর পর থেকে করা সব পরিবর্তন বাতিল করে আগের অবস্থায় ফিরিয়ে নেওয়া।
SQL কোডব্যাখ্যা: যদি মাঝপথে কোনো সমস্যা হয় (যেমন দ্বিতীয় অ্যাকাউন্টে টাকা যোগ করতে ব্যর্থ), ROLLBACK চালিয়ে প্রথম পরিবর্তনটাও (টাকা কমানো) বাতিল করে দেওয়া যায় — যাতে টাকা উধাও না হয়ে যায়।
🚩 SAVEPOINT
উদ্দেশ্য: লেনদেনের মাঝে একটা "চেকপয়েন্ট" তৈরি করা, যাতে পুরোটা বাতিল না করে শুধু সেই পয়েন্ট পর্যন্ত ফিরে যাওয়া যায়।
SQL কোডব্যাখ্যা: এটা যেন গেম খেলার মাঝে "সেভ পয়েন্ট" তৈরি করা — কিছু ভুল হলে পুরো গেম না, শুধু সেই সেভ পয়েন্ট থেকে আবার শুরু করা যায়।
সম্পূর্ণ বিজনেস কেস স্টাডি: স্কুল ম্যানেজমেন্ট
একটা স্কুল শিক্ষার্থীদের তথ্য ম্যানেজ করতে চায় — চলো সবগুলো SQL শ্রেণি একসাথে ব্যবহার করে দেখি।
১. Database তৈরি (DDL)
২. Students টেবিল তৈরি (DDL)
৩. রেকর্ড যোগ করা (DML)
৪. রেকর্ড দেখা (DQL)
৫. তথ্য হালনাগাদ (DML)
৬. রেকর্ড মুছে ফেলা (DML)
৭. অন্য ব্যবহারকারীকে অনুমতি দেওয়া (DCL)
৮. পরিবর্তন নিশ্চিত করা (TCL)
একটা বাস্তব প্রজেক্টে এই পাঁচটা শ্রেণিই একসাথে কাজ করে — DDL কাঠামো বানায়, DML ডেটা পরিবর্তন করে, DQL দেখায়, DCL নিরাপত্তা নিশ্চিত করে, আর TCL নিশ্চিত করে পরিবর্তনগুলো নির্ভরযোগ্যভাবে সংরক্ষিত হয়েছে।
MySQL Workbench প্র্যাকটিক্যাল সেশন
ধাপ ১: Workbench খোলা ও সংযোগ করা
MySQL Workbench খুলে সার্ভারের তথ্য (হোস্ট, ইউজারনেম, পাসওয়ার্ড) দিয়ে সংযোগ করতে হয়।
ধাপ ২: প্রথম কমান্ড লেখা ও চালানো
SQL কোডব্যাখ্যা: Workbench-এ কোড লিখে "⚡" (Execute) বাটনে ক্লিক করলে বা Ctrl+Enter চাপলে কমান্ড চলে, এবং নিচের প্যানেলে ফলাফল দেখা যায়।
ধাপ ৩: ফলাফল পড়া
SQL কোড| book_id | title | available |
|---|---|---|
| 1 | বাংলা ব্যাকরণ | 1 |
ব্যাখ্যা: Workbench "Result Grid"-এ একটা টেবিল আকারে ফলাফল দেখায়, যেখানে available-এর জন্য TRUE-কে ১ হিসেবে দেখানো হয়েছে।
ধাপ ৪: এরর সংশোধন করা
ভুল কোডব্যাখ্যা: SELECT-এর বদলে ভুল করে SELET লেখা হয়েছে — বানান ঠিক করলেই কাজ করবে।
ধাপ ৫: স্ক্রিপ্ট সংরক্ষণ করা
Ctrl+S দিয়ে পুরো SQL স্ক্রিপ্ট একটা .sql ফাইলে সংরক্ষণ করা যায়, পরে আবার ব্যবহারের জন্য।
- ভুল ডেটাবেজ সিলেক্ট করে থাকা অবস্থায় কমান্ড চালানো
- সেমিকোলন (;) দিতে ভুলে যাওয়া, ফলে একাধিক কমান্ড একসাথে গুলিয়ে যাওয়া
- Execute বাটনের বদলে ভুল আইকনে ক্লিক করা
সাধারণ শুরুর ভুল
✅ সমাধান: মনে রাখো, DDL কাঠামো নিয়ন্ত্রণ করে, DML প্রকৃত ডেটা নিয়ন্ত্রণ করে।
✅ সমাধান: নির্দিষ্ট রেকর্ড মুছতে DELETE, পুরো টেবিল দ্রুত খালি করতে TRUNCATE ব্যবহার করো।
✅ সমাধান: UPDATE/DELETE লেখার সাথে সাথে WHERE লেখার অভ্যাস করো।
✅ সমাধান: DROP চালানোর আগে দুইবার নিশ্চিত হও, এবং ব্যাকআপ রাখো।
✅ সমাধান: COMMIT মানে স্থায়ী করা, ROLLBACK মানে বাতিল করে ফিরিয়ে নেওয়া — সবসময় মনে রাখো কোনটা কী করবে।
✅ সমাধান: শুধু প্রয়োজনীয় কলাম উল্লেখ করো।
✅ সমাধান: প্রতিটা স্টেটমেন্টের শেষে ; আছে কিনা যাচাই করার অভ্যাস করো।
✅ সমাধান: DESCRIBE table_name; দিয়ে আগে কলামের নাম যাচাই করো।
ইন্ডাস্ট্রি বেস্ট প্র্যাকটিস
📝 পড়ার-উপযোগী SQL লেখা
কীওয়ার্ড বড় হাতের অক্ষরে, সঠিক ইনডেন্টেশন বজায় রাখা
💬 কমেন্ট ব্যবহার করা
-- ব্যাখ্যা দিয়ে কোড কী করছে তা লিখে রাখা
🔍 আগে টেস্ট করা
বড় পরিবর্তনের আগে ছোট ডেটাসেটে বা SELECT দিয়ে যাচাই করা
💾 ব্যাকআপ রাখা
DELETE বা DROP-এর আগে সবসময় ব্যাকআপ নেওয়া
🏷️ নামকরণের নিয়ম মানা
টেবিল ও কলামের নাম স্পষ্ট ও সামঞ্জস্যপূর্ণ রাখা
📂 স্ক্রিপ্ট গুছিয়ে রাখা
বিভিন্ন কাজের SQL ফাইল আলাদা ফোল্ডারে সংগঠিত রাখা
প্রোগ্রামাররা যেমন কোডের পরিবর্তনের ইতিহাস Git-এ রাখেন, তেমনি SQL স্ক্রিপ্ট ও ডেটাবেজ পরিবর্তনও ভার্সন-নিয়ন্ত্রিত রাখা হয়, যাতে কোন পরিবর্তন কখন হয়েছে তা ট্র্যাক করা যায়।
ক্লাসরুম অ্যাক্টিভিটি
রিভিশন ও প্রশ্নোত্তর
📌 দ্রুত রিভিশন নোট
- DDL (কাঠামো): CREATE, ALTER, DROP, TRUNCATE, RENAME
- DML (ডেটা): INSERT, UPDATE, DELETE
- DQL (দেখা): SELECT
- DCL (অনুমতি): GRANT, REVOKE
- TCL (লেনদেন): COMMIT, ROLLBACK, SAVEPOINT
- WHERE ছাড়া UPDATE/DELETE = সব রেকর্ড প্রভাবিত হওয়ার ঝুঁকি
🕰️ SQL-এর সংক্ষিপ্ত ইতিহাস
১৯৭০-এর দশকে IBM-এর গবেষকরা Relational Database Model নিয়ে কাজ করার সময় SQL (তখন নাম ছিলো SEQUEL) তৈরি করেন। এটি এত কার্যকর ও যৌক্তিক ছিলো যে দ্রুতই এটা ডেটাবেজের সাথে যোগাযোগের আন্তর্জাতিক মানদণ্ডে পরিণত হয়। আজও, প্রায় ৫০ বছর পরও, SQL সবচেয়ে ব্যবহৃত ডেটাবেজ ভাষা — কারণ এটা সহজবোধ্য, শক্তিশালী, এবং প্রায় সব ধরনের ডেটাবেজ সিস্টেমে (MySQL, PostgreSQL, SQL Server, Oracle) ব্যবহার করা যায়।
📊 কমান্ড তুলনামূলক টেবিল
| বিষয় | DELETE | TRUNCATE | DROP |
|---|---|---|---|
| কাজ | নির্দিষ্ট শর্তে রেকর্ড মুছে | সব ডেটা একসাথে খালি করে | টেবিল সম্পূর্ণ মুছে ফেলে |
| কাঠামো থাকে? | হ্যাঁ | হ্যাঁ | না |
| Rollback সম্ভব? | Transaction থাকলে হ্যাঁ | সাধারণত না | না |
| শ্রেণি | DML | DDL | DDL |
| বিষয় | INSERT | UPDATE |
|---|---|---|
| কাজ | নতুন রেকর্ড যোগ করে | বিদ্যমান রেকর্ড পরিবর্তন করে |
| WHERE প্রয়োজন? | না | হ্যাঁ (নাহলে সব রেকর্ড বদলে যায়) |
| শ্রেণি | DML | DML |
| শ্রেণি | কাজ | Rollback সম্ভব? | বাস্তব ব্যবহার |
|---|---|---|---|
| DDL | কাঠামো তৈরি/পরিবর্তন | সাধারণত না | নতুন টেবিল বানানো |
| DML | ডেটা পরিবর্তন | Transaction থাকলে হ্যাঁ | রেকর্ড যোগ/পরিবর্তন/মুছে ফেলা |
| DQL | ডেটা দেখা | প্রযোজ্য নয় | রিপোর্ট তৈরি |
| DCL | অনুমতি নিয়ন্ত্রণ | প্রযোজ্য নয় | ব্যবহারকারীর অ্যাক্সেস ঠিক করা |
| TCL | লেনদেন নিয়ন্ত্রণ | হ্যাঁ (ROLLBACK দিয়ে) | ব্যাংকিং লেনদেন |
👥 প্রফেশনাল SQL ওয়ার্কফ্লো
DDL/DCL দিয়ে কাঠামো ও অনুমতি পরিচালনা
DDL/DML দিয়ে পাইপলাইন ও ডেটা প্রবাহ তৈরি
DQL দিয়ে ডেটা বিশ্লেষণ
❓ ভাইভা প্রশ্ন
💼 ইন্টারভিউ প্রস্তুতি — টপ ৩০টি বিগিনার লেভেল প্রশ্ন
✅ MCQ প্র্যাকটিস
(ক) DML (খ) DDL (গ) DQL (ঘ) TCL
(ক) DCL (খ) DDL (গ) TCL (ঘ) DQL
(ক) ডেটা যোগ করা (খ) অনুমতি দেওয়া (গ) টেবিল মোছা (ঘ) ডেটা দেখা
(ক) INSERT (খ) UPDATE (গ) DELETE (ঘ) CREATE
(ক) পরিবর্তন স্থায়ী করা (খ) পরিবর্তন বাতিল করা (গ) টেবিল তৈরি করা (ঘ) অনুমতি দেওয়া
📝 হোমওয়ার্ক অ্যাসাইনমেন্ট
- একটা "Library Management System"-এর জন্য প্রতিটা SQL শ্রেণি (DDL, DML, DQL, DCL, TCL) থেকে অন্তত একটা করে কমান্ড লেখো।
- SQL Command Hierarchy ডায়াগ্রাম (SQL → DDL/DML/DQL/DCL/TCL) নিজ হাতে এঁকে প্রতিটার নিচে ২টা করে উদাহরণ কমান্ড লেখো।
- DELETE, TRUNCATE ও DROP-এর পার্থক্য এবং COMMIT ও ROLLBACK-এর পার্থক্য নিজের ভাষায় মোট ৫টা বাক্যে লেখো।