SQL শিখুন
বাংলায়
Structured Query Language — ডেটাবেজের ভাষা। W3Schools-এর মতো বিস্তারিত গাইড, বাংলায়, HSC ICT পাঠ্যক্রম অনুযায়ী।
SQL কী?
SQL (Structured Query Language) হলো একটি বিশেষ প্রোগ্রামিং ভাষা যা রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেম (RDBMS)-এ তথ্য সংরক্ষণ, অনুসন্ধান, পরিবর্তন ও মুছে ফেলার জন্য ব্যবহার করা হয়।
SQL কোথায় ব্যবহার হয়?
গ্রাহকের অ্যাকাউন্ট, লেনদেন সংরক্ষণ।
রোগীর তথ্য, চিকিৎসা ইতিহাস সংরক্ষণ।
পণ্য, অর্ডার, গ্রাহক তথ্য ব্যবস্থাপনা।
ছাত্র-শিক্ষকের তথ্য, ফলাফল সংরক্ষণ।
SQL কমান্ডের শ্রেণীবিভাগ
| শ্রেণী | পূর্ণরূপ | কমান্ড | কাজ |
|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP | কাঠামো তৈরি/পরিবর্তন |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | তথ্য নিয়ন্ত্রণ |
| DCL | Data Control Language | GRANT, REVOKE | অনুমতি নিয়ন্ত্রণ |
| TCL | Transaction Control Language | COMMIT, ROLLBACK | লেনদেন নিয়ন্ত্রণ |
📖 SQL পরিচিতি
SQL-এর ইতিহাস, বৈশিষ্ট্য ও মূল ধারণাগুলো জানুন।
SQL-এর ইতিহাস
১৯৭০ সালে IBM-এর গবেষক Edgar Frank Codd রিলেশনাল ডেটাবেজের ধারণা প্রবর্তন করেন। ১৯৭৪ সালে Donald Chamberlin এবং Raymond Boyce "SEQUEL" (Structured English Query Language) নামক ভাষা তৈরি করেন যা পরে SQL নামে পরিচিত হয়।
| সাল | ঘটনা |
|---|---|
| ১৯৭০ | E.F. Codd রিলেশনাল মডেল প্রকাশ করেন |
| ১৯৭৪ | SEQUEL ভাষা তৈরি |
| ১৯৭৯ | Oracle প্রথম বাণিজ্যিক SQL ডেটাবেজ প্রকাশ করে |
| ১৯৮৬ | ANSI কর্তৃক SQL স্ট্যান্ডার্ড প্রকাশ |
| বর্তমান | MySQL, PostgreSQL, MS SQL Server ব্যাপকভাবে ব্যবহৃত |
SQL-এর বৈশিষ্ট্য
- সহজ ভাষা: ইংরেজি ভাষার মতো পড়া যায়।
- মানসম্মত (Standardized): ANSI/ISO স্ট্যান্ডার্ড অনুসরণ করে।
- পোর্টেবল: বিভিন্ন DBMS-এ ব্যবহারযোগ্য।
- শক্তিশালী: জটিল প্রশ্ন (Query) করা যায়।
- নিরাপদ: ব্যবহারকারীর অনুমতি নিয়ন্ত্রণ করা যায়।
RDBMS ধারণা
RDBMS (Relational Database Management System) হলো একটি সফটওয়্যার যা টেবিল আকারে তথ্য সংরক্ষণ করে এবং টেবিলগুলোর মধ্যে সম্পর্ক তৈরি করে।
সাধারণ SQL সিনট্যাক্স
SELECT এবং select একই কাজ করে। তবে কমান্ড বড় হাতে লেখা ভালো অভ্যাস।-- এটি একটি SQL মন্তব্য (Comment) SELECT column_name FROM table_name WHERE condition;
🗄️ ডেটাবেজ ধারণা
টেবিল, রো, কলাম এবং ডেটাবেজের মৌলিক কাঠামো।
ডেটাবেজ কাঠামো
একটি রিলেশনাল ডেটাবেজে তথ্য টেবিল (Table) আকারে সংরক্ষিত থাকে। প্রতিটি টেবিল একটি বিষয়ের তথ্য ধারণ করে।
গুরুত্বপূর্ণ পরিভাষা
| পরিভাষা | বাংলা অর্থ | উদাহরণ |
|---|---|---|
Table | সারণি/টেবিল | Student, Course |
Row / Record | সারি / রেকর্ড | একজন ছাত্রের তথ্য |
Column / Field | কলাম / ক্ষেত্র | name, age, marks |
Primary Key | প্রাথমিক কী | Student ID |
Foreign Key | বৈদেশিক কী | dept_id |
Query | প্রশ্ন/অনুসন্ধান | SELECT * FROM student |
ডেটা টাইপ (Data Types)
| ডেটা টাইপ | বিবরণ | উদাহরণ |
|---|---|---|
INT | পূর্ণ সংখ্যা | 1, 25, 100 |
VARCHAR(n) | পরিবর্তনশীল দৈর্ঘ্যের টেক্সট | 'রাহিম', 'Dhaka' |
CHAR(n) | নির্দিষ্ট দৈর্ঘ্যের টেক্সট | 'M', 'F' |
FLOAT / DECIMAL | দশমিক সংখ্যা | 3.14, 98.5 |
DATE | তারিখ | '2024-01-15' |
BOOLEAN | সত্য/মিথ্যা | TRUE, FALSE |
🔨 CREATE কমান্ড
নতুন ডেটাবেজ বা টেবিল তৈরি করার DDL কমান্ড।
CREATE DATABASE
নতুন ডেটাবেজ তৈরি করতে CREATE DATABASE কমান্ড ব্যবহার করা হয়।
সিনট্যাক্স:
উদাহরণ:
-- স্কুলের জন্য ডেটাবেজ তৈরি CREATE DATABASE school_db; -- ডেটাবেজ ব্যবহার শুরু করুন USE school_db;
CREATE TABLE
ডেটাবেজে নতুন টেবিল তৈরি করতে CREATE TABLE কমান্ড ব্যবহার করা হয়।
সিনট্যাক্স:
উদাহরণ — ছাত্রের টেবিল তৈরি:
CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, class VARCHAR(10) NOT NULL, roll INT UNIQUE, age INT, marks FLOAT, gender CHAR(1), dob DATE );
Constraints (শর্ত/বাধা)
| Constraint | বিবরণ |
|---|---|
NOT NULL | কলামটি খালি থাকতে পারবে না |
UNIQUE | প্রতিটি মান আলাদা হতে হবে |
PRIMARY KEY | NOT NULL + UNIQUE — রেকর্ড সনাক্তকারী |
FOREIGN KEY | অন্য টেবিলের Primary Key-এর সাথে সম্পর্ক |
DEFAULT | কোনো মান না দিলে এটি ব্যবহৃত হবে |
CHECK | মান একটি শর্ত পূরণ করতে হবে |
AUTO_INCREMENT | স্বয়ংক্রিয়ভাবে মান বৃদ্ধি পায় |
✏️ ALTER কমান্ড
বিদ্যমান টেবিলের কাঠামো পরিবর্তন করার DDL কমান্ড।
ALTER TABLE — কলাম যোগ করুন
-- student টেবিলে email কলাম যোগ করুন ALTER TABLE student ADD email VARCHAR(100);
ALTER TABLE — কলাম পরিবর্তন করুন
-- marks কলামের ধরন পরিবর্তন করুন ALTER TABLE student MODIFY COLUMN marks DECIMAL(5,2); -- কলাম বাদ দিন ALTER TABLE student DROP COLUMN gender;
🗑️ DROP কমান্ড
টেবিল বা ডেটাবেজ সম্পূর্ণভাবে মুছে ফেলার DDL কমান্ড।
-- টেবিল মুছে ফেলুন DROP TABLE student; -- ডেটাবেজ মুছে ফেলুন DROP DATABASE school_db; -- টেবিল থাকলেই মুছুন (Error এড়াতে) DROP TABLE IF EXISTS student; -- টেবিল রেখে শুধু সব তথ্য মুছুন TRUNCATE TABLE student;
DROP vs TRUNCATE vs DELETE
| বিষয় | DROP | TRUNCATE | DELETE |
|---|---|---|---|
| টেবিল মুছে যায়? | ✅ হ্যাঁ | ❌ না | ❌ না |
| তথ্য মুছে যায়? | ✅ হ্যাঁ | ✅ হ্যাঁ | ✅ নির্বাচিত |
| WHERE ব্যবহার? | ❌ | ❌ | ✅ হ্যাঁ |
| Rollback সম্ভব? | ❌ না | ❌ না | ✅ হ্যাঁ |
| শ্রেণী | DDL | DDL | DML |
🔍 SELECT কমান্ড
ডেটাবেজ থেকে তথ্য অনুসন্ধান (Query) করার সবচেয়ে গুরুত্বপূর্ণ DML কমান্ড।
মূল সিনট্যাক্স
-- সব কলাম দেখান SELECT * FROM student; -- নির্দিষ্ট কলাম SELECT name, class, marks FROM student; -- একই মান বাদ দিন (Distinct) SELECT DISTINCT class FROM student; -- নাম দিয়ে সাজান (A-Z) SELECT name, marks FROM student ORDER BY marks DESC; -- প্রথম ৫ জন SELECT * FROM student LIMIT 5;
📊 নমুনা টেবিল: student
| id | name | class | roll | marks |
|---|---|---|---|---|
| 1 | রাহিম | একাদশ | 101 | 85.5 |
| 2 | করিম | দ্বাদশ | 102 | 72.0 |
| 3 | সুমাইয়া | একাদশ | 103 | 91.0 |
| 4 | তানিয়া | দ্বাদশ | 104 | 65.5 |
| 5 | আরিফ | একাদশ | 105 | 78.0 |
এখনই চেষ্টা করুন!
➕ INSERT কমান্ড
টেবিলে নতুন রেকর্ড/তথ্য যোগ করার DML কমান্ড।
সিনট্যাক্স
-- একটি রেকর্ড যোগ করুন INSERT INTO student (name, class, roll, marks) VALUES ('রাহিম', 'একাদশ', 101, 85.5); -- একসাথে একাধিক রেকর্ড INSERT INTO student (name, class, roll, marks) VALUES ('করিম', 'দ্বাদশ', 102, 72.0), ('সুমাইয়া', 'একাদশ', 103, 91.0), ('তানিয়া', 'দ্বাদশ', 104, 65.5);
'...') লিখতে হয়। সংখ্যার জন্য কোট লাগে না।🔄 UPDATE কমান্ড
বিদ্যমান রেকর্ডের মান পরিবর্তন করার DML কমান্ড।
সিনট্যাক্স
-- id=1 এর ছাত্রের নম্বর আপডেট করুন UPDATE student SET marks = 90.0 WHERE id = 1; -- একসাথে একাধিক কলাম আপডেট UPDATE student SET class = 'দ্বাদশ', marks = 88.5 WHERE name = 'রাহিম';
❌ DELETE কমান্ড
টেবিল থেকে নির্দিষ্ট রেকর্ড মুছে ফেলার DML কমান্ড।
সিনট্যাক্স
-- নির্দিষ্ট রেকর্ড মুছুন DELETE FROM student WHERE id = 3; -- শর্ত অনুযায়ী মুছুন DELETE FROM student WHERE marks < 40; -- ⚠️ সব রেকর্ড মুছুন (WHERE ছাড়া) DELETE FROM student;
🎯 WHERE ক্লজ
শর্ত দিয়ে নির্দিষ্ট রেকর্ড ফিল্টার করুন।
অপারেটর সমূহ
| অপারেটর | অর্থ | উদাহরণ |
|---|---|---|
= | সমান | WHERE marks = 90 |
!= বা <> | সমান নয় | WHERE class != 'একাদশ' |
> | বড় | WHERE marks > 80 |
< | ছোট | WHERE age < 18 |
BETWEEN | মানের মধ্যে | WHERE marks BETWEEN 60 AND 90 |
IN | তালিকায় আছে | WHERE class IN ('একাদশ', 'দ্বাদশ') |
LIKE | প্যাটার্ন মিল | WHERE name LIKE 'র%' |
IS NULL | খালি মান | WHERE email IS NULL |
AND | উভয় শর্ত | WHERE marks > 70 AND class = 'একাদশ' |
OR | যেকোনো একটি | WHERE marks < 40 OR absent = 1 |
NOT | বিপরীত | WHERE NOT class = 'দ্বাদশ' |
LIKE অপারেটর — Wildcard
| Symbol | অর্থ | উদাহরণ |
|---|---|---|
% | যেকোনো সংখ্যক অক্ষর | LIKE 'র%' → রাহিম, রবি, রনি |
_ | ঠিক একটি অক্ষর | LIKE '_নি' → তানি, রনি |
-- ৮০+ নম্বর পেয়েছে এমন একাদশ শ্রেণীর ছাত্র SELECT * FROM student WHERE marks > 80 AND class = 'একাদশ'; -- নাম 'র' দিয়ে শুরু SELECT * FROM student WHERE name LIKE 'র%'; -- নম্বর ৬০ থেকে ৯০ এর মধ্যে SELECT * FROM student WHERE marks BETWEEN 60 AND 90;
⚙️ SQL ফাংশন
Aggregate ও Built-in ফাংশন ব্যবহার করে হিসাব করুন।
Aggregate ফাংশন
এই ফাংশনগুলো অনেক রেকর্ডের উপর কাজ করে একটি ফলাফল দেয়।
| ফাংশন | কাজ | উদাহরণ |
|---|---|---|
COUNT() | রেকর্ড গণনা করে | COUNT(*) |
SUM() | যোগফল বের করে | SUM(marks) |
AVG() | গড় বের করে | AVG(marks) |
MAX() | সর্বোচ্চ মান | MAX(marks) |
MIN() | সর্বনিম্ন মান | MIN(marks) |
-- মোট ছাত্র সংখ্যা SELECT COUNT(*) AS total_students FROM student; -- সর্বোচ্চ ও সর্বনিম্ন নম্বর SELECT MAX(marks) AS highest, MIN(marks) AS lowest, AVG(marks) AS average FROM student; -- শ্রেণী অনুযায়ী গ্রুপ করুন SELECT class, COUNT(*) AS count, AVG(marks) AS avg_marks FROM student GROUP BY class HAVING AVG(marks) > 70;
অন্যান্য ফাংশন
-- টেক্সট ফাংশন SELECT UPPER(name), LOWER(name), LENGTH(name) FROM student; -- তারিখ ফাংশন SELECT NOW(), CURDATE(), YEAR(NOW()); -- গণিত ফাংশন SELECT ROUND(85.567, 2), CEIL(4.2), FLOOR(4.9);
🔗 JOIN — টেবিল সংযোগ
একাধিক টেবিল একসাথে জুড়ে তথ্য বের করুন।
JOIN-এর প্রকারভেদ
উভয় টেবিলে মিল আছে শুধু সেই রেকর্ড দেখায়।
বাম টেবিলের সব রেকর্ড + ডান টেবিলের মিল।
ডান টেবিলের সব রেকর্ড + বাম টেবিলের মিল।
উভয় টেবিলের সব রেকর্ড দেখায়।
নমুনা টেবিল
-- INNER JOIN: ছাত্র ও বিভাগ একসাথে SELECT s.name, d.dept_name FROM student AS s INNER JOIN department AS d ON s.dept_id = d.dept_id; -- LEFT JOIN: সব ছাত্র + তাদের বিভাগ SELECT s.name, d.dept_name FROM student AS s LEFT JOIN department AS d ON s.dept_id = d.dept_id;
INNER JOIN ফলাফল
| name | dept_name |
|---|---|
| রাহিম | বিজ্ঞান বিভাগ |
| করিম | মানবিক বিভাগ |
| সুমাইয়া | বিজ্ঞান বিভাগ |
🗝️ কী (Key) ধারণা
Primary Key, Foreign Key ও অন্যান্য কী সম্পর্কে বিস্তারিত।
Primary Key (প্রাথমিক কী)
টেবিলের প্রতিটি রেকর্ডকে আলাদাভাবে চেনার জন্য Primary Key ব্যবহার করা হয়। এটি NULL হতে পারে না এবং Unique হতে হবে।
CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL );
Foreign Key (বৈদেশিক কী)
Foreign Key এক টেবিলকে অন্য টেবিলের সাথে সংযুক্ত করে। এটি অন্য টেবিলের Primary Key-এর মান ধারণ করে।
CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), dept_id INT, FOREIGN KEY (dept_id) REFERENCES department(dept_id) );
সব ধরনের কী
| কী | বৈশিষ্ট্য |
|---|---|
| Primary Key | Unique + NOT NULL, প্রতি টেবিলে একটি |
| Foreign Key | অন্য টেবিলের Primary Key রেফারেন্স |
| Unique Key | Unique কিন্তু NULL হতে পারে |
| Candidate Key | Primary Key হতে পারে এমন কলাম |
| Composite Key | একাধিক কলাম মিলে Primary Key |
| Super Key | রেকর্ড সনাক্ত করতে পারে এমন যেকোনো কলাম |
💻 SQL এডিটর
বিভিন্ন ধরনের SQL কমান্ড অনুশীলন করুন।
📊 নমুনা ডেটা
| id | name | class | roll | marks | dept |
|---|---|---|---|---|---|
| 1 | রাহিম | একাদশ | 101 | 85.5 | বিজ্ঞান |
| 2 | করিম | দ্বাদশ | 102 | 72.0 | মানবিক |
| 3 | সুমাইয়া | একাদশ | 103 | 91.0 | বিজ্ঞান |
| 4 | তানিয়া | দ্বাদশ | 104 | 65.5 | বাণিজ্য |
| 5 | আরিফ | একাদশ | 105 | 78.0 | বিজ্ঞান |
| 6 | নাসরিন | দ্বাদশ | 106 | 55.0 | মানবিক |
| 7 | রফিক | একাদশ | 107 | 44.5 | বাণিজ্য |
SQL এডিটর
অনুশীলন কমান্ড চেষ্টা করুন:
ORDER BY marks DESC
WHERE marks > 70
COUNT(*)
AVG(marks)
🧠 কুইজ পরীক্ষা
HSC ICT পরীক্ষার ধাঁচে SQL প্রশ্ন অনুশীলন করুন।
📋 SQL রেফারেন্স কার্ড
সব গুরুত্বপূর্ণ কমান্ডের দ্রুত রেফারেন্স।
DDL কমান্ড
CREATE DATABASE db_name; USE db_name; CREATE TABLE t (col type constraint, ...); ALTER TABLE t ADD col type; ALTER TABLE t MODIFY col type; ALTER TABLE t DROP COLUMN col; DROP TABLE t; DROP DATABASE db; TRUNCATE TABLE t;
DML কমান্ড
SELECT col1, col2 FROM t; SELECT * FROM t WHERE condition; SELECT * FROM t ORDER BY col DESC; SELECT * FROM t LIMIT n; SELECT DISTINCT col FROM t; INSERT INTO t (col1,col2) VALUES (v1,v2); UPDATE t SET col=val WHERE condition; DELETE FROM t WHERE condition;
ফাংশন রেফারেন্স
-- Aggregate COUNT(*) SUM(col) AVG(col) MAX(col) MIN(col) -- String UPPER(str) LOWER(str) LENGTH(str) CONCAT(s1,s2) SUBSTRING(str,pos,len) -- Math ROUND(n,d) CEIL(n) FLOOR(n) ABS(n) -- Date NOW() CURDATE() YEAR(d) MONTH(d)
GROUP BY ও HAVING
SELECT class, COUNT(*), AVG(marks) FROM student GROUP BY class HAVING COUNT(*) > 2;