প্রতিটি প্রোগ্রামিং বা ডাটাবেস ভাষার নিজস্ব ব্যাকরণ বা সিনট্যাক্স থাকে। SQLite-ও তার ব্যতিক্রম নয়। এই পর্বে আমরা SQLite-তে লেখার নিয়মকানুন, কেস সেনসিটিভিটি, মন্তব্য (কমেন্ট) যোগ করার পদ্ধতি এবং ডাটাবেসের প্রায় সব গুরুত্বপূর্ণ SQL স্টেটমেন্টের গঠন ও বাস্তব উদাহরণ দেখব। এটি একটি রেফারেন্স গাইড হিসেবে কাজ করবে – যখনই কোনো কমান্ডের গঠন ভুলে যাবেন, এখানে চোখ বুলিয়ে নিতে পারবেন।
শুরুতে মনে রাখতে হবে: SQLite-তে SQL স্টেটমেন্ট (যেমন SELECT, CREATE TABLE) এবং ডট কমান্ড (যেমন .tables, .mode) সম্পূর্ণ আলাদা। ডট কমান্ডগুলো শুধুমাত্র SQLite-এর কমান্ড-লাইন শেলে কাজ করে এবং এদের শেষে সেমিকোলন (;) লাগে না। আর SQL স্টেটমেন্ট শেষে সেমিকোলন আবশ্যক। আজ আমরা কেবল SQL স্টেটমেন্টের সিনট্যাক্স নিয়েই আলোচনা করব। ডট কমান্ডের বিস্তারিত আমরা আগের পর্বে জেনেছি।
পূর্বপ্রস্তুতি: আপনার কম্পিউটারে SQLite ইন্সটল থাকলেই চলবে। কোনো বাড়তি প্যাকেজ লাগবে না। টার্মিনালে sqlite3 demo.db দিয়ে একটি ফাইল ডাটাবেস খুলে নিচের উদাহরণগুলো চেষ্টা করতে পারেন।
১. কেস সেনসিটিভিটি (Case Sensitivity)
SQLite কেস ইনসেনসিটিভ, অর্থাৎ বড় হাতের বা ছোট হাতের অক্ষরে কোনো পার্থক্য নেই। যেমন GLOB এবং glob SQLite-এর কাছে একই অর্থ বহন করে। টেবিল বা কলামের নামও কেস ইনসেনসিটিভ (তবে উদ্ধৃতি চিহ্নে দিলে কেস সংরক্ষিত হতে পারে)।
sql
-- নিচের দুটি স্টেটমেন্ট একই SELECT * FROM students; select * from STUDENTS;
২. মন্তব্য বা কমেন্ট (Comments)
আপনার কোড বোঝার সুবিধার্থে SQLite-তে দুভাবে মন্তব্য যোগ করা যায়:
ক) সিঙ্গেল-লাইন কমেন্ট: দুটি ড্যাশ (--) দিয়ে শুরু। এর পর থেকে ওই লাইনের শেষ পর্যন্ত সবকিছু কমেন্ট হিসেবে গণ্য হবে।
sql
-- এটি একটি সিঙ্গেল লাইন কমেন্ট SELECT * FROM students; -- শিক্ষার্থীদের তালিকা
খ) সি-স্টাইল (মাল্টি-লাইন) কমেন্ট: /* দিয়ে শুরু এবং */ দিয়ে শেষ। এক বা একাধিক লাইন জুড়ে বিস্তৃত হতে পারে।
sql
/* * সব শিক্ষার্থীর নাম ও নম্বর দেখাও। * যাদের নম্বর ৮০-র বেশি। */ SELECT name, marks FROM students WHERE marks > 80;
লক্ষণীয়: কমেন্টের ভেতরে আরেকটি কমেন্ট (নেস্টেড) ব্যবহার করা যাবে না।
৩. SQLite স্টেটমেন্টের সাধারণ নিয়ম
- প্রতিটি SQL স্টেটমেন্ট শুরু হয় কোনো কীওয়ার্ড দিয়ে – যেমন
SELECT,INSERT,CREATE,ALTER,DROPইত্যাদি। - প্রতিটি স্টেটমেন্ট সেমিকোলন (;) দিয়ে শেষ করতে হয়।
- স্টেটমেন্ট এক লাইনে বা একাধিক লাইনে লেখা যায়; SQLite শুধু সেমিকোলন পেলেই স্টেটমেন্ট শেষ ধরে।
sql
SELECT name, roll FROM students;
এবার আমরা বিভিন্ন স্টেটমেন্টের গঠন ও সংক্ষিপ্ত উদাহরণ দেখব। একটি নমুনা টেবিল students ব্যবহার করব (আগের পর্বের সাথে সামঞ্জস্য রেখে):
sql
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
roll INTEGER UNIQUE NOT NULL,
marks REAL DEFAULT 0.0
);
৪. স্টেটমেন্টসমূহের সিনট্যাক্স ও উদাহরণ
৪.১ ডাটাবেস অ্যানালাইসিস ও রক্ষণাবেক্ষণ
ANALYZE – ডাটাবেস বা নির্দিষ্ট টেবিলের স্ট্যাটিস্টিকস সংগ্রহ করে, যা কোয়েরি অপ্টিমাইজারে সাহায্য করে।
sql
ANALYZE; ANALYZE students;
VACUUM – ডাটাবেস ফাইল পুনর্গঠন করে (ডিলিটেড ডাটা পুরোপুরি মুছে ফাঁকা জায়গা রিক্লেইম করে)।
sql
VACUUM;
PRAGMA – SQLite-এর বিভিন্ন সেটিংস দেখা বা পরিবর্তন করা।
sql
PRAGMA page_size; -- পেজ সাইজ জানতে
PRAGMA cache_size = 2048; -- ক্যাশ সাইজ সেট
PRAGMA table_info('students'); -- টেবিলের কলামের তথ্য
EXPLAIN – একটি স্টেটমেন্ট কীভাবে এক্সিকিউট হবে তার প্ল্যান দেখায় (এটি ডিবাগিংয়ে কাজে লাগে)।
sql
EXPLAIN SELECT * FROM students WHERE roll = 101; EXPLAIN QUERY PLAN SELECT * FROM students WHERE roll = 101;
ATTACH DATABASE – বর্তমান কানেকশনে আরেকটি ডাটাবেস ফাইল যুক্ত করা এবং একটি অ্যালিয়াস দেওয়া।
sql
ATTACH DATABASE 'backup.db' AS backup; -- এখন backup.students ইত্যাদি ব্যবহার করা যাবে।
DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করা।
sql
DETACH DATABASE backup;
৪.২ টেবিল, ইনডেক্স, ভিউ, ট্রিগার সংক্রান্ত
CREATE TABLE
sql
CREATE TABLE table_name( column1 datatype, column2 datatype, ..., PRIMARY KEY( one or more columns ) );
উদাহরণ: আগেই students তৈরি করেছি।
ALTER TABLE – শুধুমাত্র টেবিলের নাম বদলানো বা নতুন কলাম যোগ করা যায়।
sql
ALTER TABLE students RENAME TO learners; -- নাম বদল ALTER TABLE learners ADD COLUMN email TEXT; -- কলাম যোগ (RENAME করে আগের নামে ফেরত আসতে পারি)
DROP TABLE
sql
DROP TABLE learners;
CREATE INDEX / CREATE UNIQUE INDEX
sql
CREATE INDEX idx_name ON students (name); CREATE UNIQUE INDEX idx_roll ON students (roll); -- roll ইতিমধ্যে UNIQUE, এটি নিশ্চিত করবে
DROP INDEX
sql
DROP INDEX idx_name;
REINDEX – ইনডেক্স পুনর্নির্মাণ করে (কলেশন বা নির্দিষ্ট ইনডেক্স/টেবিলের জন্য)।
sql
REINDEX; REINDEX idx_name; REINDEX students; -- ওই টেবিলের সব ইনডেক্স রিবিল্ড
CREATE VIEW – একটি সঞ্চিত SELECT কোয়েরি ভিউ আকারে সংরক্ষণ।
sql
CREATE VIEW top_students AS SELECT name, marks FROM students WHERE marks >= 80;
DROP VIEW
sql
DROP VIEW top_students;
CREATE TRIGGER – নির্দিষ্ট ইভেন্টে স্বয়ংক্রিয় কাজ সম্পাদন।
sql
CREATE TRIGGER after_insert_student
AFTER INSERT ON students
FOR EACH ROW
BEGIN
-- কিছু কাজ, যেমন লগিং
INSERT INTO log_table (msg) VALUES ('New student added');
END;
DROP TRIGGER
sql
DROP TRIGGER after_insert_student;
CREATE VIRTUAL TABLE – বিশেষ এক্সটেনশন (যেমন FTS – ফুল টেক্সট সার্চ) ব্যবহার করে ভার্চুয়াল টেবিল তৈরি।
sql
CREATE VIRTUAL TABLE docs USING fts3(title, body);
৪.৩ ডেটা ম্যানিপুলেশন
INSERT INTO
sql
INSERT INTO students (name, roll, marks) VALUES ('রহিম', 101, 85.5);
INSERT INTO students VALUES (NULL, 'করিম', 102, 92.0); -- id-তে NULL দিলে AUTOINCREMENT কাজ করবে
UPDATE
sql
UPDATE students SET marks = 90.0 WHERE roll = 101; UPDATE students SET name = 'নতুন নাম', marks = 88.0 WHERE id = 2;
DELETE
sql
DELETE FROM students WHERE roll = 103; DELETE FROM students; -- সব রেকর্ড মুছে যাবে! সাবধানে ব্যবহার করুন।
৪.৪ ডেটা কোয়েরি (SELECT ও সংশ্লিষ্ট ক্লজ)
SELECT
sql
SELECT column1, column2, ... FROM table_name; SELECT * FROM students; SELECT name, roll FROM students;
WHERE – শর্ত প্রয়োগ।
sql
SELECT * FROM students WHERE marks > 80;
AND/OR – একাধিক শর্ত।
sql
SELECT * FROM students WHERE marks >= 80 AND roll > 101; SELECT * FROM students WHERE marks < 60 OR marks > 90;
BETWEEN – একটি রেঞ্জের মধ্যে।
sql
SELECT * FROM students WHERE marks BETWEEN 70 AND 90;
LIKE – প্যাটার্ন মিলিয়ে (SQL-এর মতো: % যেকোনো, _ একটি অক্ষর)।
sql
SELECT * FROM students WHERE name LIKE '%র%'; -- নামে 'র' আছে এমন
GLOB – ফাইল-সিস্টেমের মতো প্যাটার্ন (কেস-সেনসিটিভ; * যেকোনো, ? এক অক্ষর)।
sql
SELECT * FROM students WHERE name GLOB 'র*'; -- 'র' দিয়ে শুরু
IN / NOT IN – তালিকায় আছে / নেই।
sql
SELECT * FROM students WHERE roll IN (101, 102, 105); SELECT * FROM students WHERE roll NOT IN (103);
DISTINCT – ডুপ্লিকেট বাদ দিয়ে ইউনিক মান।
sql
SELECT DISTINCT marks FROM students;
ORDER BY – সাজানো (ASC – উর্ধক্রম, DESC – অধক্রম)।
sql
SELECT * FROM students ORDER BY marks DESC;
GROUP BY – গ্রুপ করে সমষ্টিগত ফাংশন ব্যবহার (সামগ্রিক COUNT, SUM, AVG ইত্যাদি)।
sql
SELECT COUNT(*) AS total_students FROM students; SELECT roll, COUNT(*) FROM students GROUP BY roll; -- সাধারণত অর্থহীন, গ্রুপিং বোঝাতে
HAVING – GROUP BY-র পরে ফিল্টার (যেখানে WHERE কাজ করে গ্রুপের আগে)।
sql
SELECT marks, COUNT(*) FROM students GROUP BY marks HAVING COUNT(*) > 1;
COUNT (একটি অ্যাগ্রিগেট ফাংশন) – সারির সংখ্যা গণনা।
sql
SELECT COUNT(*) FROM students WHERE marks >= 80;
EXISTS – সাবকোয়েরি কোনো সারি ফেরত দিলে সত্য।
sql
SELECT name FROM students WHERE EXISTS (SELECT * FROM students WHERE marks > 95); -- যদি কমপক্ষে একটি 95+ নম্বরের শিক্ষার্থী থাকে তবে সব নাম আসবে, বাস্তবে এটি বোঝাতে ব্যবহারিক নয়; উদাহরণ মাত্র।
৪.৫ ট্রানজ্যাকশন কন্ট্রোল
BEGIN TRANSACTION – ট্রানজ্যাকশন শুরু।
sql
BEGIN; -- একাধিক SQL স্টেটমেন্ট COMMIT; -- অথবা ROLLBACK;
COMMIT – ট্রানজ্যাকশনের পরিবর্তনগুলো স্থায়ীভাবে সংরক্ষণ।
sql
COMMIT;
ROLLBACK – ট্রানজ্যাকশন বাতিল করে পরিবর্তন পূর্বাবস্থায় ফেরত।
sql
ROLLBACK;
SAVEPOINT – ট্রানজ্যাকশনের মধ্যে একটি পয়েন্ট চিহ্নিত করা, প্রয়োজনে সেখানে ফেরত যেতে।
sql
SAVEPOINT sp1; -- কিছু কাজ ROLLBACK TO sp1; -- sp1 এর পরের কাজ বাতিল RELEASE sp1; -- সেভপয়েন্ট মুছে ফেলা
RELEASE SAVEPOINT – সেভপয়েন্ট রিলিজ করা।
sql
RELEASE sp1;
৫. সম্পূর্ণ উদাহরণ: সব স্টেটমেন্ট একত্রে পরীক্ষা
টার্মিনালে একটি নতুন ডাটাবেস খুলে নিচের ধাপগুলো অনুসরণ করুন:
bash
$ sqlite3 syntax_test.db sqlite> .header on sqlite> .mode column
sql
-- টেবিল তৈরি
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
roll INTEGER UNIQUE,
marks REAL
);
-- ডেটা ইনসার্ট
INSERT INTO students (name, roll, marks) VALUES ('আলম', 1, 78.5);
INSERT INTO students (name, roll, marks) VALUES ('বকুল', 2, 92.0);
INSERT INTO students (name, roll, marks) VALUES ('চঞ্চল', 3, 85.0);
INSERT INTO students (name, roll, marks) VALUES ('ডালিয়া', 4, 78.5);
-- সাধারণ SELECT
SELECT * FROM students;
-- WHERE ও ORDER BY
SELECT name, marks FROM students WHERE marks > 80 ORDER BY marks DESC;
-- GROUP BY ও HAVING
SELECT marks, COUNT(*) FROM students GROUP BY marks HAVING COUNT(*) > 1;
-- ভিউ তৈরি ও ব্যবহার
CREATE VIEW good_students AS SELECT name FROM students WHERE marks >= 80;
SELECT * FROM good_students;
-- ট্রানজ্যাকশন উদাহরণ
BEGIN;
DELETE FROM students WHERE roll = 3;
-- মনে করুন আমরা ভুল করেছি, তাহলে:
ROLLBACK;
-- চঞ্চল আবার ফিরে আসবে।
ডিরেক্টরি স্ট্রাকচার: শুধু syntax_test.db ফাইলটি তৈরি হবে। কোনো প্যাকেজ ইন্সটল করতে হবে না।
পরবর্তী পর্বে
আমরা SQLite ডেটা টাইপ এবং কনস্ট্রেইন্ট নিয়ে বিস্তারিত জানব – কোন ডেটা কখন ব্যবহার করবেন, কীভাবে প্রাইমারি কি, ফরেন কি, নট নাল, ডিফল্ট ইত্যাদি কাজ করে।
লেখকের কথা: বাংলায় প্রযুক্তি শেখার এই প্রচেষ্টায় আপনাদের উৎসাহই আমাদের শক্তি। পোস্টটি ভাল লাগলে শেয়ার করুন, এবং সিরিজের সব পর্বের আপডেট পেতে ToLearnTeam.com ব্লগে চোখ রাখুন। কোনো জিজ্ঞাসা থাকলে কমেন্ট করতে দ্বিধা করবেন না!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
