ORDER BY কী?
ফলাফলের সারিগুলো একটি নির্দিষ্ট ক্রমে সাজাতে ORDER BY ব্যবহার করি। ছোট থেকে বড় সাজাতে ASC, বড় থেকে ছোট সাজাতে DESC লিখি।
ASC→ছোট থেকে বড়, A থেকে Z (কিছু না লিখলে এটিই হয়)DESC→বড় থেকে ছোট, Z থেকে A
সিনট্যাক্স
SELECT [কলামের নাম] FROM [টেবিলের নাম] ORDER BY [কলামের নাম] ASC অথবা DESC;
উদাহরণ ১: নাম অনুযায়ী সাজানো
SELECT * FROM student ORDER BY name;ORDER BY name→name কলাম অনুযায়ী সাজাবে(কিছু না লেখা)→ASC ধরে নেবে, তাই A থেকে Z
| roll | name | class | section | group_name |
|---|---|---|---|---|
| 4 | Anik | 12 | B | Science |
| 2 | Habib | 12 | A | Commerce |
| 3 | Pappu | 11 | B | Arts |
| 5 | Priya | 11 | A | Commerce |
| 1 | Rudra | 11 | A | Science |
উদাহরণ ২: বড় থেকে ছোট
ICT (275) বিষয়ে কে কত পেয়েছে, বেশি নম্বর আগে দেখি। WHERE থাকলে ORDER BY বসে WHERE এর পরে।
SELECT roll, marks
FROM result
WHERE subject_code = 275
ORDER BY marks DESC;| roll | marks |
|---|---|
| 1 | 88 |
| 2 | 78 |
| 5 | 65 |
| 4 | 31 |
| 3 | 29 |
উদাহরণ ৩: দুই কলামে সাজানো
আগে class অনুযায়ী সাজাই। একই class এর ভেতরে নাম অনুযায়ী সাজাই।
SELECT name, class
FROM student
ORDER BY class, name;| name | class |
|---|---|
| Pappu | 11 |
| Priya | 11 |
| Rudra | 11 |
| Anik | 12 |
| Habib | 12 |
class 11 এর তিনজন আগে এসেছে, নিজেদের মধ্যে নামের ক্রমে। তারপর class 12 এর দুজন।
LIMIT কী?
ফলাফলের প্রথম কয়েকটি সারি নিতে LIMIT ব্যবহার করি। ORDER BY এর সাথে মিলিয়ে সর্বোচ্চ বা সর্বনিম্ন কয়েকটি খুঁজে পাওয়া যায়।
ORDER BY [কলামের নাম] DESC LIMIT [কয়টি সারি];
উদাহরণ ৪: সবচেয়ে বেশি নম্বরের ৩টি রেজাল্ট
SELECT * FROM result ORDER BY marks DESC LIMIT 3;ORDER BY marks DESC→আগে বেশি নম্বর থেকে কম নম্বরে সাজায়LIMIT 3→তারপর প্রথম ৩টি সারি নেয়
| roll | subject_code | marks |
|---|---|---|
| 4 | 174 | 90 |
| 1 | 275 | 88 |
| 5 | 253 | 84 |
- লেখার ক্রম: SELECT → FROM → WHERE → ORDER BY → LIMIT।
- দুটি সারির মান সমান হলে তাদের নিজেদের মধ্যে ক্রম নিশ্চিত নয়। নিশ্চিত করতে দ্বিতীয় একটি কলাম দাও, যেমন ORDER BY marks DESC, roll।
- MySQL ও SQLite এ LIMIT চলে। SQL Server এ LIMIT নেই, সেখানে TOP লেখা হয়।
অনুশীলন
প্রতিটি প্রশ্নের Query নিজে লেখো। চাইলে SQL Playground এ টেবিল তৈরি করে চালিয়ে দেখো। তারপর উত্তর মিলিয়ে নাও।
subject টেবিলকে subject_name অনুযায়ী A থেকে Z সাজাও।
উত্তর দেখো
SELECT * FROM subject ORDER BY subject_name;| subject_code | subject_name | group_name |
|---|---|---|
| 253 | Accounting | Commerce |
| 101 | Bangla | Common |
| 109 | Economics | Commerce |
| 304 | History | Arts |
| 275 | ICT | Common |
| 174 | Physics | Science |
ICT (275) তে সবচেয়ে কম নম্বর পাওয়া ২টি রেজাল্টের roll ও marks দেখাও।
উত্তর দেখো
SELECT roll, marks
FROM result
WHERE subject_code = 275
ORDER BY marks ASC
LIMIT 2;| roll | marks |
|---|---|
| 3 | 29 |
| 4 | 31 |
student টেবিল class বড় থেকে ছোট সাজাও। একই class এ roll ছোট থেকে বড় হবে।
উত্তর দেখো
SELECT *
FROM student
ORDER BY class DESC, roll ASC;| roll | name | class | section | group_name |
|---|---|---|---|---|
| 2 | Habib | 12 | A | Commerce |
| 4 | Anik | 12 | B | Science |
| 1 | Rudra | 11 | A | Science |
| 3 | Pappu | 11 | B | Arts |
| 5 | Priya | 11 | A | Commerce |
contact টেবিল address অনুযায়ী Z থেকে A সাজাও।
উত্তর দেখো
SELECT * FROM contact ORDER BY address DESC;| contact_id | roll | address | mobile_no |
|---|---|---|---|
| 102 | 2 | Narayanganj | 01822222222 |
| 105 | 5 | Khulna | 01555555555 |
| 101 | 1 | Gopalganj | 01711111111 |
| 104 | 4 | Dhaka | 01644444444 |
| 103 | 3 | Barisal | 01933333333 |
