ডাটাবেস থেকে আনা তথ্য একটি সুসংহত ক্রমে দেখতে চাওয়া খুবই স্বাভাবিক – যেমন বেতন অনুযায়ী কর্মীদের তালিকা বড় থেকে ছোট, অথবা নামের বর্ণানুক্রমে সাজানো। SQLite-তে ডেটা সাজানোর কাজটি করে ORDER BY ক্লজ। এটি SELECT স্টেটমেন্টের শেষে বসে এবং এক বা একাধিক কলামের ভিত্তিতে আরোহী (ASC) বা অবরোহী (DESC) ক্রমে ফলাফল সাজায়। আজকের পর্বে আমরা ORDER BY-এর সিনট্যাক্স, বিবিধ উদাহরণ, একাধিক কলামের ব্যবহার এবং অন্যান্য ক্লজের সাথে সমন্বয় শিখব।
পূর্বপ্রস্তুতি
- 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।
১. ORDER BY-এর সিনট্যাক্স
sql
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, ...] [ASC | DESC];
- column-list: যে কলামগুলো দেখবেন। ORDER BY-তে যে কলাম ব্যবহার করবেন, সেটি টেবিলের যে কোনো কলাম হতে পারে –
SELECT-এ থাকা জরুরি নয় (তবে সেটি না থাকলে আউটপুট কিছুটা অদ্ভুত লাগতে পারে)। - ASC: আরোহী (Ascending) ক্রম – ছোট থেকে বড়, A থেকে Z। এটি ডিফল্ট, না লিখলেও চলে।
- DESC: অবরোহী (Descending) ক্রম – বড় থেকে ছোট, Z থেকে A।
একাধিক কলাম দিলে প্রথম কলাম অনুযায়ী সাজানোর পর, যেখানে মান সমান সেখানে দ্বিতীয় কলাম কার্যকর হয়।
২. একক কলামের ভিত্তিতে সাজানো
ক) আরোহী ক্রম (ASC) – বেতন অনুযায়ী ছোট থেকে বড়
sql
SELECT * FROM COMPANY ORDER BY SALARY ASC;
(ASC না লিখলেও একই ফল দিত।)
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 7 James 24 Houston 10000.0 2 Allen 25 Texas 15000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
খ) অবরোহী ক্রম (DESC) – নামের উল্টো বর্ণানুক্রম
sql
SELECT * FROM COMPANY ORDER BY NAME DESC;
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 3 Teddy 23 Norway 20000.0 1 Paul 32 California 20000.0 4 Mark 25 Rich-Mond 65000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 5 David 27 Texas 85000.0 2 Allen 25 Texas 15000.0
৩. একাধিক কলাম দিয়ে সাজানো
প্রথম কলাম অনুযায়ী সাজানোর পর দ্বিতীয় কলাম কাজ করে। নিচের উদাহরণে প্রথমে NAME অনুযায়ী আরোহী (ASC) এবং তারপর SALARY অনুযায়ী আরোহী (ASC) সাজানো হয়েছে।
sql
SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
এখানে NAME অনুযায়ী A থেকে Z সাজানো হবে, এবং একই নাম থাকলে বেতনের ক্রমানুসারে সাজবে। আমাদের টেবিলে একই নাম নেই, তাই শুধু নামের ক্রমেই দেখা যাচ্ছে। তবে ধরা যাক, যদি Paul এবং Paulita থাকত, তাহলে Paul-এর পর Paulita আসত এবং তাদের মধ্যে বেতনের পার্থক্য দেখা যেত।
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 5 David 27 Texas 85000.0 7 James 24 Houston 10000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0
লক্ষ্য করুন, NAME অনুযায়ী ASC, কিন্তু Teddy আগে আসছে Paul-এর? ASC বর্ণানুক্রমে: Allen, David, James, Kim, Mark, Paul, Teddy – তাই Teddy সবার শেষে। আর Paul ও Teddy-র বেতন সমান 20000, NAME-এর ক্রমেই স্থির হয়েছে।
আপনি চাইলে কলামভেদে ভিন্ন ক্রম দিতে পারেন:
sql
SELECT * FROM COMPANY ORDER BY AGE DESC, SALARY ASC;
এতে বয়স বড় থেকে ছোট, এবং একই বয়সের মধ্যে বেতন ছোট থেকে বড় দেখাবে। (আমাদের ডেটায় AGE 32, 27, 25, 25, 24, 23, 22 – AGE 25-এ Mark (65000) ও Allen (15000) আছে, তাই Allen আগে আসবে SALARY ASC দরুন।)
৪. WHERE ও LIMIT-এর সাথে ORDER BY
ORDER BY অন্যান্য ক্লজের সাথে স্বাচ্ছন্দ্যে মেশে। সাধারণ ক্রম: WHERE → ORDER BY → LIMIT।
উদাহরণ: টেক্সাস শহরের কর্মীদের বেতন অনুযায়ী সাজিয়ে প্রথম ১ জন:
sql
SELECT * FROM COMPANY WHERE ADDRESS = 'Texas' ORDER BY SALARY DESC LIMIT 1;
(ফলাফল: David, 85000)
উদাহরণ: সর্বোচ্চ বেতনের ৩ জন:
sql
SELECT * FROM COMPANY ORDER BY SALARY DESC LIMIT 3;
৫. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
এই পুরো অনুশীলনের জন্য শুধুমাত্র company.db ফাইলটি প্রয়োজন। ORDER BY কোনো অতিরিক্ত ফাইল বা প্যাকেজ তৈরি করে না। কোনো বাড়তি লাইব্রেরি ইন্সটল করতে হবে না।
৬. গুরুত্বপূর্ণ টিপস
- NULL মানের আচরণ: SQLite-তে ডিফল্টভাবে ORDER BY করলে NULL মানগুলো প্রথমে আসে (ASC-এ) এবং DESC-এ শেষে আসে। (আমাদের টেবিলে কোনো NULL নেই, তাই দেখানো হয়নি)।
- পারফরম্যান্স: ORDER BY-তে ব্যবহৃত কলামে ইনডেক্স থাকলে সর্টিং দ্রুত হয়। বড় টেবিলে এটি গুরুত্বপূর্ণ।
- কেস-সেনসিটিভিটি: টেক্সট সাজানোর সময় SQLite সাধারণত কেস-ইনসেনসিটিভ সর্ট করে (বাইনারি কলেশন ব্যবহার করলে কেস-সেনসিটিভ হয়)। বাংলা বর্ণানুক্রমের জন্য বিশেষ কলেশন প্রয়োজন হতে পারে, যা পরবর্তীতে আলোচনা হবে।
- কলাম নম্বর ব্যবহার: ORDER BY 1, 2 এভাবে SELECT-এ থাকা কলামের পজিশন অনুযায়ীও সাজানো যায়, তবে এটি এড়িয়ে চলাই ভালো (রিডেবিলিটির জন্য কলাম নাম ব্যবহার করুন)।
- ডিফল্ট ASC: আপনি শুধু
ORDER BY columnলিখলেই ASC ধরা হয়।
৭. সম্পূর্ণ অনুশীলন সেশন
টার্মিনালে নিচের কমান্ডগুলো চালিয়ে দেখুন:
sql
.headers on .mode column -- বয়সের উল্টো ক্রমে সব SELECT * FROM COMPANY ORDER BY AGE DESC; -- নামের ক্রমে, তারপর বেতনের ক্রমে (ASC ডিফল্ট) SELECT * FROM COMPANY ORDER BY NAME, SALARY; -- বেতন ২০০০০ এর বেশি, বয়স অনুযায়ী সাজাও SELECT * FROM COMPANY WHERE SALARY > 20000 ORDER BY AGE ASC; -- সর্বকনিষ্ঠ ২ জন SELECT * FROM COMPANY ORDER BY AGE ASC LIMIT 2;
পরবর্তী পর্বে
আমরা শিখব SQLite GROUP BY ক্লজ – কিভাবে ডেটাকে গ্রুপ করে অ্যাগ্রিগেট ফাংশনের সাথে বিশ্লেষণ করা যায়।
লেখকের কথা: ORDER BY ছাড়া ডেটা তালিকা সাজানো অসম্ভব! বাংলায় শেখার এই ধারা বজায় রাখতে আপনার শেয়ার ও কমেন্ট আমাদের উৎসাহিত করে। পোস্টটি ভালো লাগলে বন্ধুদের সাথে শেয়ার করুন, এবং নিয়মিত আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
