ডাটাবেসে জমা করা তথ্যের সবচেয়ে বড় মূল্য হলো সেটি প্রয়োজনমতো খুঁজে বের করতে পারা। SQLite-তে এই কাজটি সম্পাদন করে SELECT স্টেটমেন্ট। এটি ডাটা কোয়েরি ল্যাঙ্গুয়েজের (DQL) প্রধান কমান্ড, যা টেবিল থেকে ডেটা এনে একটি রেজাল্ট টেবিল বা রেজাল্ট সেট তৈরি করে। আজকের পর্বে আমরা SELECT-এর মৌলিক ব্যবহার, সমস্ত কলাম বনাম নির্দিষ্ট কলাম ফেচ করা, আউটপুটকে সুন্দরভাবে ফরম্যাট করা এবং sqlite_master টেবিল থেকে ডাটাবেসের গঠনতন্ত্র বের করার পদ্ধতি শিখব।
পূর্বপ্রস্তুতি
- SQLite ইন্সটল থাকতে হবে (সিরিজের তৃতীয় পর্ব দেখুন)।
- আমরা আগের পর্বে তৈরি করা
company.dbডাটাবেস এবংCOMPANYটেবিল ব্যবহার করব। যদি সেটি না থাকে, নিচের কোড কপি-পেস্ট করে ডাটাবেস ও ডেটা তৈরি করে নিন। - কোনো বাড়তি প্যাকেজ লাগবে না।
ডাটাবেস ও নমুনা ডেটা পুনরায় তৈরি করতে:
bash
sqlite3 company.db
sql
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00); INSERT INTO COMPANY VALUES (3, 'Teddy', 23, 'Norway', 20000.00); INSERT INTO COMPANY VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00); INSERT INTO COMPANY VALUES (5, 'David', 27, 'Texas', 85000.00); INSERT INTO COMPANY VALUES (6, 'Kim', 22, 'South-Hall', 45000.00); INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00);
১. SELECT-এর মৌলিক সিনট্যাক্স
সহজতম রূপ:
sql
SELECT column1, column2, ... FROM table_name;
column1, column2, ...: যেসব কলামের মান আপনি দেখতে চান।table_name: টেবিলের নাম।
সমস্ত কলাম নির্বাচন করতে তারকাচিহ্ন (*) ব্যবহার করা হয়:
sql
SELECT * FROM table_name;
২. ব্যবহারিক উদাহরণ – COMPANY টেবিল থেকে ডেটা দেখা
আমরা এখন company.db শেলে প্রবেশ করে বিভিন্ন SELECT চালাব।
ধাপ ১: টার্মিনালে ডাটাবেস খুলুন
bash
sqlite3 company.db
ধাপ ২: আউটপুট ফরম্যাট সেট করুন (পাঠযোগ্য করতে)
sql
.header on .mode column
এখন কলামের নাম এবং সারিবদ্ধ কলাম দেখা যাবে।
ধাপ ৩: সমস্ত রেকর্ড দেখি
sql
SELECT * FROM COMPANY;
আউটপুট হবে:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
ধাপ ৪: শুধুমাত্র নির্দিষ্ট কলাম – ID, NAME, SALARY
sql
SELECT ID, NAME, SALARY FROM COMPANY;
ফলাফল:
text
ID NAME SALARY ---------- ---------- ---------- 1 Paul 20000.0 2 Allen 15000.0 3 Teddy 20000.0 4 Mark 65000.0 5 David 85000.0 6 Kim 45000.0 7 James 10000.0
৩. আউটপুট কলামের প্রস্থ নিয়ন্ত্রণ (.width)
ডিফল্ট column মোডে অনেক সময় লেখা কেটে যায় বা দেখতে অস্বস্তি হয়। .width কমান্ড দিয়ে আমরা প্রতিটি কলামের জন্য ন্যূনতম প্রস্থ (অক্ষর সংখ্যা) নির্ধারণ করতে পারি।
ব্যবহার:
sql
.width num1, num2, num3, ...
সংখ্যাগুলো পর্যায়ক্রমে SELECT-এর কলামগুলোর প্রস্থ নির্ধারণ করে।
উদাহরণ: ১০, ২০, ১০ প্রস্থ সেট করে পুরো টেবিল দেখি:
sql
.width 10, 20, 10 SELECT * FROM COMPANY;
এবার আউটপুট:
text
ID NAME AGE ADDRESS SALARY ---------- -------------------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
লক্ষ্য করুন, NAME কলাম এখন আরও পরিষ্কার, ফাঁকা জায়গা বেশি। আপনি চাইলে .width auto দিলে SQLite স্বয়ংক্রিয়ভাবে ডেটা অনুযায়ী প্রস্থ ঠিক করবে (SQLite 3.38+ সংস্করণে)।
৪. sqlite_master টেবিল থেকে স্কিমা তথ্য পাওয়া
আমরা আগে ডট কমান্ড .tables ও .schema ব্যবহার করেছি। কিন্তু প্রোগ্রামিং করার সময় বা যখন ডট কমান্ড পাওয়া যায় না, তখন আপনাকে sqlite_master টেবিল থেকে সরাসরি SELECT করে তথ্য বের করতে হবে।
ডাটাবেসে সব টেবিলের নাম বের করা:
sql
SELECT tbl_name FROM sqlite_master WHERE type = 'table';
আমাদের company.db-তে এটি দেখাবে:
text
tbl_name ---------- COMPANY
(যদি YOUNG_EMPLOYEES থেকে থাকে, সেটিও দেখাবে।)
কোনো নির্দিষ্ট টেবিলের CREATE স্টেটমেন্ট দেখা:
sql
SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';
আউটপুট:
text
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL )
এটাই হলো .schema COMPANY কমান্ডের ভেতরের কাজ। sqlite_master-এ কলামগুলো হলো: type, name, tbl_name, rootpage, sql। আমরা এখানে name ও tbl_name একই (টেবিলের জন্য), কিন্তু ইনডেক্স বা ট্রিগারের ক্ষেত্রে ভিন্ন হতে পারে।
৫. আরও কিছু প্র্যাকটিস উদাহরণ
- শুধু নাম ও ঠিকানা দেখতে:sqlSELECT NAME, ADDRESS FROM COMPANY;
- শর্ত ছাড়া গণনা (COUNT) – অস্থায়ী রেজাল্ট:sqlSELECT COUNT(*) FROM COMPANY;(COUNT একটি অ্যাগ্রিগেট ফাংশন, পরে বিস্তারিত আসবে।)
- DISTINCT দিয়ে অনন্য শহরের তালিকা:sqlSELECT DISTINCT ADDRESS FROM COMPANY;
৬. ডিরেক্টরি স্ট্রাকচার
আপনার কাজের ফোল্ডারে এখনো শুধু company.db ফাইলটি আছে। SELECT শুধু ডেটা পড়ে, ফাইলে কোনো পরিবর্তন আনে না।
text
project-folder/ └── company.db
৭. গুরুত্বপূর্ণ টিপস
- ফরম্যাটিং চালু রাখা:
.header onও.mode columnএকবার দিলে পুরো সেশনজুড়ে কাজ করে। পরবর্তী সেশনে আবার দিতে হবে, অথবা এগুলো.sqlitercফাইলে লিখে স্থায়ী করা যায় (পরে আলোচনা হবে)। - বড় টেবিলে সতর্কতা:
SELECT *ব্যবহার করলে বিশাল টেবিলের সব ডেটা স্ক্রিনে আসবে, তাই সীমিত করতেLIMITক্লজ (পরের পর্ব) ব্যবহার করা ভালো। - ইন-মেমরি ও ফাইল: SELECT ডাটাবেস ফাইল থেকে সরাসরি ডেটা পড়ে, তাই ডাটাবেস ফাইল যত বড়ই হোক, সঠিক কোয়েরি দ্রুত ফল দেবে।
- sqlite_master-এর গুরুত্ব: ডাইনামিক অ্যাপ্লিকেশন তৈরি করতে গেলে এই সিস্টেম টেবিল আপনাকে টেবিলের গঠন জানতে দারুণ কাজে লাগবে।
পরবর্তী পর্বে
আমরা SELECT-এর সাথে WHERE ক্লজ ও অপারেটর ব্যবহার করে শর্ত সাপেক্ষে ডেটা ফিল্টার করা শিখব।
লেখকের কথা: এই টিউটোরিয়াল সিরিজের প্রতিটি পর্ব সহজ ও বাস্তব উদাহরণ দিয়ে সাজানো হচ্ছে, যেন আপনি নিজেই হাতে-কলমে শিখতে পারেন। আপনার ভালোলাগা, শেয়ার ও কমেন্ট আমাদের নিরন্তর উৎসাহ যোগায়। সম্পূর্ণ সিরিজের আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
