ডাটাবেস থেকে ডেটা আনার সময় অনেক সময় পুরো টেবিল না এনে নির্দিষ্ট সংখ্যক সারি দরকার হয় – যেমন ওয়েবসাইটের পেজিনেশন, “সর্বশেষ ১০টি রেকর্ড”, বা পরীক্ষামূলকভাবে কয়েকটি ডেটা দেখা। SQLite-তে এই চাহিদা পূরণ করে LIMIT ক্লজ। এটি শুধুমাত্র SELECT স্টেটমেন্টের সাথে ব্যবহৃত হয় এবং ফিরে আসা সারির সংখ্যা সীমিত করে দেয়। এর সাথে OFFSET যুক্ত করে আমরা শুরু করার অবস্থানও নির্ধারণ করতে পারি। আজকের পর্বে আমরা LIMIT ও OFFSET-এর বাস্তব ব্যবহার, সিনট্যাক্স এবং গুরুত্বপূর্ণ টিপস শিখব।
পূর্বপ্রস্তুতি
- 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);
- আউটপুট ফরম্যাট:
.header onও.mode column।
১. LIMIT-এর সিনট্যাক্স
শুধুমাত্র LIMIT:
sql
SELECT column1, column2, ... FROM table_name LIMIT number_of_rows;
number_of_rows হলো সর্বোচ্চ কতটি সারি ফেরত আসবে। যদি টেবিলে তার চেয়ে কম সারি থাকে, তাহলে যত আছে তত দেখাবে।
LIMIT with OFFSET:
sql
SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET offset_value;
offset_value– কতটি সারি বাদ দিয়ে তার পর থেকে দেখানো শুরু করবে। OFFSET 0 হলে প্রথম সারি থেকেই শুরু হয় (অর্থাৎ কোনো বাদ যায় না)।
২. ব্যবহারিক উদাহরণ (COMPANY টেবিল)
উদাহরণ ১: প্রথম ৬টি রেকর্ড দেখানো।
sql
SELECT * FROM COMPANY LIMIT 6;
ফলাফল:
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
ID 7 (James) বাদ পড়েছে, কারণ আমরা LIMIT 6 দিয়েছি।
উদাহরণ ২: তৃতীয় রেকর্ড থেকে শুরু করে ৩টি রেকর্ড দেখানো।
sql
SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
এখানে OFFSET 2 মানে প্রথম ২টি সারি (ID 1 এবং 2) বাদ দিয়ে তারপরের ৩টি সারি দেখাবে।
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
অর্থাৎ ID 3, 4, 5 ফিরে এসেছে।
OFFSET-এর ধারণা: OFFSET n দিলে প্রথম nটি রেকর্ড স্কিপ করে n+1 তম রেকর্ড থেকে দেখানো শুরু হয়।
৩. পেজিনেশন (Pagination) বাস্তবায়ন
LIMIT ও OFFSET ব্যবহার করেই সাধারণ পেজিনেশন তৈরি করা যায়। যেমন প্রতিটি পেজে ২টি করে রেকর্ড দেখাতে:
- পেজ ১:
SELECT * FROM COMPANY LIMIT 2 OFFSET 0;(ID 1,2) - পেজ ২:
SELECT * FROM COMPANY LIMIT 2 OFFSET 2;(ID 3,4) - পেজ ৩:
SELECT * FROM COMPANY LIMIT 2 OFFSET 4;(ID 5,6) - পেজ ৪:
SELECT * FROM COMPANY LIMIT 2 OFFSET 6;(ID 7)
যদি OFFSET টেবিলের সারির সংখ্যার চেয়ে বেশি বা সমান হয়, তাহলে কোনো ফলাফল আসে না।
সূত্র: পেজ নম্বর page (1 থেকে শুরু) এবং প্রতি পেজে per_page সংখ্যক রেকর্ড হলে:
sql
LIMIT per_page OFFSET (page - 1) * per_page
৪. LIMIT-এর সাথে ORDER BY ব্যবহার
ফলাফল সুসংহত করতে LIMIT-এর আগে ORDER BY ব্যবহার করা ভালো। না হলে কোন সারিগুলো আসবে তা নিশ্চিত নয় (যদিও সাধারণত rowid ক্রমে আসে)।
উদাহরণ: সর্বোচ্চ বেতনের ৩ জন কর্মী দেখতে:
sql
SELECT * FROM COMPANY ORDER BY SALARY DESC LIMIT 3;
ফলাফল: David (85000), Mark (65000), Kim (45000)।
৫. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
এই পুরো কাজে শুধুমাত্র company.db ফাইলটি ব্যবহার হচ্ছে। কোনো অতিরিক্ত প্যাকেজ বা লাইব্রেরি লাগবে না। LIMIT ও OFFSET SQLite-র মৌলিক অংশ।
৬. গুরুত্বপূর্ণ টিপস
- ORDER BY ছাড়া LIMIT ব্যবহারে সতর্কতা: ORDER BY না দিলে রেকর্ডের ক্রম নির্ভর করে
rowidবা অভ্যন্তরীণ সংরক্ষণ ক্রমের ওপর। এটি নির্ভরযোগ্য নাও হতে পারে। ডেটা ইন্টিগ্রিটির জন্য LIMIT-এর সাথে ORDER BY দেওয়ার অভ্যাস করুন। - OFFSET-এর বিকল্প: SQLite 3.15.0+ সংস্করণে আপনি
LIMIT ... OFFSET-এর বদলেLIMIT offset, countসিনট্যাক্সও ব্যবহার করতে পারেন:LIMIT 2, 3অর্থাৎ OFFSET 2, LIMIT 3। কিন্তুLIMIT ... OFFSET ...-ই বেশি পঠনযোগ্য এবং স্ট্যান্ডার্ডের কাছাকাছি। - পারফরমেন্স: বড় টেবিলে বড় OFFSET ধীরগতি তৈরি করতে পারে, কারণ SQLite OFFSET পর্যন্ত সমস্ত সারি প্রক্রিয়াকরণ করে। এক্ষেত্রে
WHEREক্লজ দিয়ে রেঞ্জ নির্ধারণ করলে ভালো হয় (যেমনWHERE id > last_seen_id)। - LIMIT 0:
LIMIT 0দিলে কোনো ডেটা আসে না, তবে কলামের নাম ও টাইপ দেখা যেতে পারে (প্রোগ্রামিং এ কাজে লাগে)।
৭. সম্পূর্ণ অনুশীলন সেশন
টার্মিনালে নিচের কোয়েরিগুলো চালিয়ে দেখুন:
sql
.headers on .mode column -- প্রথম ৪টি রেকর্ড SELECT * FROM COMPANY LIMIT 4; -- ২ নম্বর থেকে ৩টি রেকর্ড SELECT * FROM COMPANY LIMIT 3 OFFSET 1; -- সর্বনিম্ন বেতনের ২ জন SELECT * FROM COMPANY ORDER BY SALARY ASC LIMIT 2; -- ৫ম রেকর্ড থেকে বাকি সব (প্রথম ৪ বাদ) SELECT * FROM COMPANY LIMIT -1 OFFSET 4; -- LIMIT -1 দেয়া যায় না, তাই আমরা বড় সংখ্যা দিতে পারি -- বা: SELECT * FROM COMPANY LIMIT (SELECT COUNT(*) FROM COMPANY) OFFSET 4;
পরবর্তী পর্বে
আমরা SQLite-তে ORDER BY ক্লজ নিয়ে বিস্তারিত শিখব – কিভাবে ফলাফলকে আরোহী বা অবরোহী ক্রমে সাজানো যায়, এবং একাধিক কলামের ওপর সাজানো।
লেখকের কথা: LIMIT ও OFFSET ব্যবহার করে আপনার অ্যাপ্লিকেশনে পেজিনেশন আর ডেটা প্রদর্শন অনেক সহজ হবে। বাংলায় এই টিউটোরিয়াল সিরিজ আপনার শেখার যাত্রাকে আরও মসৃণ করুক। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সব আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
