📋 বিষয়সূচী (Table of Contents)

01 ৫০০ ছাত্রের খাতা আর প্রিন্সিপালের প্রশ্ন 02 এবার সংজ্ঞাটা দাঁড় করাই 03 ছোট থেকে বড় — A → Z, 0 → 9 04 বড় থেকে ছোট — Z → A, 9 → 0 05 প্রথমে একটা কলাম, তারপর টাই ভাঙতে আরেকটা 06 প্রথমে ফিল্টার, তারপর সাজানো 07 শুধু "টপ কয়েকটা" দেখাও 08 সংখ্যা, টেক্সট, তারিখ — সবাই কি একইভাবে সাজে? 09 একটা E-commerce কোম্পানির ৬টা রিয়েল রিপোর্ট 10 MySQL Workbench / Google Colab-এ ধাপে ধাপে 11 বিগিনাররা যেখানে আটকায় 12 প্রফেশনালরা ORDER BY কীভাবে ব্যবহার করে 13 এখন সবাই মিলে করি 14 Quick Revision Notes 15 কাগজের রেজিস্টার থেকে ইনস্ট্যান্ট সর্টিং পর্যন্ত 16 ORDER BY ঠিক কোথায় কাজ করে 17 পাঁচটি গুরুত্বপূর্ণ তুলনা টেবিল 18 Student Management System — সব ORDER BY অপারেশন একসাথে 19 বিভিন্ন রোলে ORDER BY-এর দৈনন্দিন ব্যবহার 20 লক্ষ লক্ষ রো সাজানো কেন ব্যয়বহুল হতে পারে 21 Top 30 SQL ORDER BY ইন্টারভিউ প্রশ্ন
1Lowest Price 2Highest Rated 3Newest First 4Best Selling
01

৫০০ ছাত্রের খাতা আর প্রিন্সিপালের প্রশ্ন

⏱ কেন ডেটা সাজাতে হয়

কোনো SQL Syntax দিয়ে শুরু করবো না। আগে বুঝি — সাজানো (Sorting) ছাড়া তথ্য কতটা অর্থহীন হয়ে যায়।

গল্প একজন শিক্ষকের কাছে ৫০০ জন ছাত্রের নম্বরের তালিকা আছে — কিন্তু র‍্যান্ডম অর্ডারে। প্রিন্সিপাল একে একে জিজ্ঞেস করছেন — "সবচেয়ে বেশি নম্বর কে পেয়েছে দেখাও", "নাম অনুযায়ী সাজিয়ে দাও", "সবচেয়ে কম বয়সী ছাত্র কে দেখাও"।
ক্লাসকে জিজ্ঞেস করো
  • শিক্ষক কি প্রতিবার হাতে ৫০০ জনের তালিকা নতুন করে সাজাতে পারবেন?
  • যদি প্রতিদিন নতুন ৩-৪টা ভিন্ন প্রশ্ন আসে (highest, alphabetical, youngest), তাহলে কতগুলো আলাদা তালিকা বানাতে হবে?
  • ডেটা যদি সাজানো না থাকে, তাহলে "সবচেয়ে ভালো ছাত্র কে" — এই প্রশ্নের উত্তর খুঁজে পেতে কতক্ষণ লাগবে?
সাজানো ছাড়া (Unsorted) Rahim — 67 Karim — 91 Nadia — 45 Fahim — 88 😵 বোঝা কঠিন, কে সেরা? সাজানো (Sorted by Marks DESC) Karim — 91 Fahim — 88 Rahim — 67 Nadia — 45 ✅ সাথে সাথে বোঝা যাচ্ছে সেরা কে
একই ডেটা — শুধু সাজানোর ফলেই তথ্য অর্থপূর্ণ হয়ে উঠলো

এবার নিজেদের রোজকার জীবনের কিছু জায়গায় তাকাই:

জায়গাকীভাবে সাজানো থাকে
Amazon-এ ল্যাপটপ সার্চLowest Price, Highest Rated, Best Selling, Newest — এক ক্লিকে বদলে যায়
Facebook Feedনতুন পোস্ট সবসময় সবার উপরে দেখা যায়
ব্যাংক স্টেটমেন্টসাম্প্রতিক লেনদেন সবার উপরে থাকে
আরেকটু ভাবি
  • Amazon কীভাবে লক্ষ লক্ষ প্রোডাক্ট কয়েক সেকেন্ডে সাজিয়ে ফেলে?
  • Facebook কীভাবে জানে কোন পোস্টটা সবার আগে দেখাতে হবে?

এই সব প্রশ্নের উত্তর একটাই — ডেটাবেস একটা বিশেষ কমান্ড ব্যবহার করে রেকর্ডগুলোকে অর্থপূর্ণভাবে সাজিয়ে দেয়, নাম তার ORDER BY

02

এবার সংজ্ঞাটা দাঁড় করাই

⏱ ORDER BY কী
Unsorted Data ORDER BY Sorted Data
Unsorted Data → ORDER BY → Sorted Data

ORDER BY হলো SQL-এর এমন একটা ক্লজ (clause), যেটা SELECT কোয়েরির ফলাফলকে নির্দিষ্ট একটা কলামের ভিত্তিতে ছোট থেকে বড় (Ascending) অথবা বড় থেকে ছোট (Descending) ক্রমে সাজিয়ে দেয়।

এনালজি ধরো, তোমার ডেস্কে ছড়িয়ে থাকা বইগুলো তুমি উচ্চতা অনুযায়ী সাজিয়ে রাখলে — সবচেয়ে ছোট থেকে সবচেয়ে বড়। বইয়ের ভেতরের বিষয়বস্তু কিন্তু একটুও বদলায়নি, শুধু সাজানোর ক্রম বদলেছে। ORDER BY-ও ঠিক এই কাজটাই করে — ডেটার মধ্যে কোনো পরিবর্তন হয় না, শুধু দেখানোর ক্রম বদলায়।
গুরুত্বপূর্ণ পয়েন্ট
  • ORDER BY টেবিলের আসল ডেটা পরিবর্তন করে না — এটা শুধু ফলাফল দেখানোর সময় সাজিয়ে দেখায়।
  • প্রতিবার কোয়েরি চালালে নতুন করে সাজানো হয় — টেবিলে স্থায়ীভাবে কোনো "সাজানো ক্রম" সেভ থাকে না।
03

ছোট থেকে বড় — A → Z, 0 → 9

⏱ Ascending Order (ASC)

ASC মানে Ascending — ছোট থেকে বড়, A থেকে Z, পুরনো থেকে নতুন। এটাই SQL-এর ডিফল্ট ক্রম (ASC না লিখলেও এটাই ধরে নেয়)।

উদাহরণ ১ — নাম অনুযায়ী (আলফাবেটিক)
SELECT Name, Department
FROM Students
ORDER BY Name ASC;
EXPECTED OUTPUT
NameDepartment
FahimEEE
KarimCSE
NadiaBBA
RahimCSE
লাইন বাই লাইন

ORDER BY Name ASC — Name কলামের ভ্যালু A থেকে Z ক্রমে সাজাচ্ছে। যেহেতু ASC ডিফল্ট, তাই ORDER BY Name লিখলেও একই ফলাফল আসতো।

উদাহরণ ২ — প্রোডাক্ট দাম, কম থেকে বেশি
SELECT Product_Name, Price
FROM Products
ORDER BY Price ASC;
EXPECTED OUTPUT
Product_NamePrice
USB Cable150
Mouse450
Keyboard1200
Monitor9500
উদাহরণ ৩ — বেতন, কম থেকে বেশি
SELECT Employee_Name, Salary
FROM Employees
ORDER BY Salary ASC;
EXPECTED OUTPUT
সর্বনিম্ন বেতনের কর্মী সবার উপরে, সর্বোচ্চ বেতনের কর্মী সবার নিচে দেখাবে
উদাহরণ ৪ — ভর্তির তারিখ, পুরনো থেকে নতুন
SELECT Student_Name, Admission_Date
FROM Students
ORDER BY Admission_Date ASC;
EXPECTED OUTPUT
সবচেয়ে আগে ভর্তি হওয়া ছাত্র সবার উপরে দেখাবে
উদাহরণ ৫ — বয়স, কম থেকে বেশি
SELECT Name, Age
FROM Students
ORDER BY Age ASC;
EXPECTED OUTPUT
সবচেয়ে কম বয়সী ছাত্র সবার উপরে দেখাবে
04

বড় থেকে ছোট — Z → A, 9 → 0

⏱ Descending Order (DESC)
উদাহরণ ১ — সর্বোচ্চ GPA আগে
SELECT Name, GPA
FROM Students
ORDER BY GPA DESC;
EXPECTED OUTPUT
NameGPA
Karim3.95
Fahim3.80
Rahim3.40
ব্যাখ্যা

DESC লেখা মানে সবচেয়ে বেশি GPA সবার উপরে দেখাবে — লিডারবোর্ডের মতো।

উদাহরণ ২ — সর্বোচ্চ বেতন আগে
SELECT Employee_Name, Salary
FROM Employees
ORDER BY Salary DESC;
EXPECTED OUTPUT
সবচেয়ে বেশি বেতনের কর্মী সবার উপরে
উদাহরণ ৩ — সাম্প্রতিক অর্ডার আগে
SELECT Order_ID, Order_Date
FROM Orders
ORDER BY Order_Date DESC;
EXPECTED OUTPUT
সবচেয়ে নতুন অর্ডার সবার উপরে — ঠিক যেমন Facebook Feed বা ব্যাংক স্টেটমেন্টে দেখো
উদাহরণ ৪ — সবচেয়ে দামি প্রোডাক্ট আগে
SELECT Product_Name, Price
FROM Products
ORDER BY Price DESC;
উদাহরণ ৫ — সাম্প্রতিক রেজিস্ট্রেশন আগে
SELECT Customer_Name, Registration_Date
FROM Customers
ORDER BY Registration_Date DESC;

ASC vs DESC — এক নজরে

বিষয়ASCDESC
পূর্ণরূপAscendingDescending
সংখ্যাছোট থেকে বড় (0→9)বড় থেকে ছোট (9→0)
টেক্সটA→ZZ→A
তারিখপুরনো থেকে নতুননতুন থেকে পুরনো
ডিফল্টহ্যাঁ (না লিখলেও এটাই হয়)না (স্পষ্টভাবে লিখতে হয়)
05

প্রথমে একটা কলাম, তারপর টাই ভাঙতে আরেকটা

⏱ একাধিক কলামে সাজানো
প্রশ্ন দুইজন ছাত্র যদি একই ডিপার্টমেন্টে থাকে, তাহলে তাদের মধ্যে কাকে আগে দেখাবে? এখানেই দরকার হয় একাধিক কলামে সাজানোর।
Department অনুযায়ী, তারপর GPA অনুযায়ী
SELECT Name, Department, GPA
FROM Students
ORDER BY Department ASC, GPA DESC;
EXPECTED OUTPUT
NameDepartmentGPA
KarimCSE3.95
RahimCSE3.40
NadiaEEE3.80
লাইন বাই লাইন

প্রথমে Department ASC দিয়ে সব ছাত্রকে ডিপার্টমেন্ট অনুযায়ী দলে ভাগ করা হচ্ছে (A-Z)। এরপর যদি একই ডিপার্টমেন্টে একাধিক ছাত্র থাকে (যেমন CSE-তে Karim ও Rahim), তাদের মধ্যে GPA DESC অনুযায়ী সাজানো হচ্ছে — বেশি GPA আগে।

১) প্রথমে Department দিয়ে সাজাও ২) একই Department হলে GPA দিয়ে সাজাও
প্রথম কলামে "টাই" হলে তবেই দ্বিতীয় কলাম কাজে আসে

আরও কিছু বাস্তব উদাহরণ:

ব্যবসায়িক দরকারORDER BY
শহর অনুযায়ী, তারপর বেতন বেশি থেকে কমCity ASC, Salary DESC
ক্যাটাগরি অনুযায়ী, তারপর দাম কম থেকে বেশিCategory ASC, Price ASC
ডিপার্টমেন্ট অনুযায়ী, তারপর নাম আলফাবেটিকDepartment ASC, Name ASC
ক্লাস অনুযায়ী, তারপর রোল নম্বরClass ASC, Roll ASC
06

প্রথমে ফিল্টার, তারপর সাজানো

⏱ ORDER BY + WHERE
FROM WHERE ORDER BY Result
এক্সিকিউশন ফ্লো: FROM → WHERE → ORDER BY → Result
উদাহরণ ১ — শুধু CSE ছাত্র, GPA অনুযায়ী সাজানো
SELECT Name, GPA
FROM Students
WHERE Department = 'CSE'
ORDER BY GPA DESC;
EXPECTED OUTPUT
শুধু CSE ছাত্রদের তালিকা, সবচেয়ে বেশি GPA সবার উপরে
লাইন বাই লাইন

প্রথমে WHERE Department = 'CSE' দিয়ে শুধু CSE ছাত্রদের বেছে নেওয়া হচ্ছে, তারপর সেই ছোট তালিকাটাকে GPA অনুযায়ী সাজানো হচ্ছে — পুরো টেবিল সাজিয়ে পরে ফিল্টার করা হচ্ছে না।

উদাহরণ ২ — ৳১০০০-এর কমে দাম, কম থেকে বেশি
SELECT Product_Name, Price
FROM Products
WHERE Price < 1000
ORDER BY Price ASC;
উদাহরণ ৩ — ঢাকার কর্মী, বেতন অনুযায়ী
SELECT Employee_Name, Salary
FROM Employees
WHERE City = 'Dhaka'
ORDER BY Salary DESC;
07

শুধু "টপ কয়েকটা" দেখাও

⏱ ORDER BY + LIMIT
ORDER BY LIMIT Top Results
ORDER BY → LIMIT → শুধু সবচেয়ে উপরের কয়েকটা রেকর্ড
সেরা ১০ জন ছাত্র
SELECT Name, GPA
FROM Students
ORDER BY GPA DESC
LIMIT 10;
EXPECTED OUTPUT
সবচেয়ে বেশি GPA থাকা প্রথম ১০ জন ছাত্র
কেন একসাথে ব্যবহার হয়

প্রথমে পুরো তালিকা GPA অনুযায়ী সাজানো হয় (DESC), তারপর LIMIT 10 শুধু উপরের ১০টা রেকর্ড কেটে নেয় — এটাই "Top N" রিপোর্টের মূল কৌশল, যা প্রায় প্রতিটা ড্যাশবোর্ডে দেখা যায়।

সর্বোচ্চ বেতনের ৫ জন কর্মী
SELECT Employee_Name, Salary
FROM Employees
ORDER BY Salary DESC
LIMIT 5;
সবচেয়ে সস্তা ২০টা প্রোডাক্ট
SELECT Product_Name, Price
FROM Products
ORDER BY Price ASC
LIMIT 20;
সাম্প্রতিক ১০টা অর্ডার
SELECT Order_ID, Order_Date
FROM Orders
ORDER BY Order_Date DESC
LIMIT 10;
08

সংখ্যা, টেক্সট, তারিখ — সবাই কি একইভাবে সাজে?

⏱ বিভিন্ন ডেটা টাইপ সাজানো
ডেটা টাইপASC-এ সাজানো হয়উদাহরণ কলাম
সংখ্যা (Number)ছোট থেকে বড় মান অনুযায়ীPrice, Salary, Age
টেক্সট (Text/String)বর্ণানুক্রমিকভাবে (A → Z)Name, City
তারিখ (Date)পুরনো তারিখ থেকে নতুন তারিখJoining_Date, Birth_Date
NULL মানDB-ভেদে ভিন্ন — MySQL-এ ASC-তে NULL সবার আগে দেখায়যেসব কলামে খালি মান থাকতে পারে
ছোট্ট একটা পরীক্ষা
  • যদি Price কলামটা ভুলবশত টেক্সট (VARCHAR) হিসেবে সেভ করা থাকে, তাহলে "9" কি "10"-এর আগে আসবে, নাকি পরে? (হিন্ট: টেক্সট হিসেবে সাজালে "10" আসলে "9"-এর আগে চলে আসতে পারে!)
সমস্যার বাস্তব উদাহরণ
-- যদি Price কলাম VARCHAR হয়:
SELECT Price FROM Products ORDER BY Price ASC;
ভুল/বিভ্রান্তিকর OUTPUT
100 150 9500 9999
কেন এমন হলো

টেক্সট হিসেবে সাজালে প্রথম অক্ষর দিয়ে তুলনা হয় — তাই "9500" "100"-এর আগে কিন্তু "9999"-এর পরে বসছে, সংখ্যাগত মান অনুযায়ী নয়। এজন্যই সংখ্যাসূচক কলাম সবসময় INT/DECIMAL টাইপে রাখা জরুরি।

09

একটা E-commerce কোম্পানির ৬টা রিয়েল রিপোর্ট

⏱ বিজনেস কেস স্টাডি
১. সবচেয়ে কম দাম থেকে বেশি দাম
SELECT Product_Name, Price FROM Products ORDER BY Price ASC;
২. সবচেয়ে বেশি রেটিং আগে
SELECT Product_Name, Rating FROM Products ORDER BY Rating DESC;
৩. সবচেয়ে নতুন প্রোডাক্ট আগে
SELECT Product_Name, Added_Date FROM Products ORDER BY Added_Date DESC;
৪. শুধু Electronics ক্যাটাগরি, দাম অনুযায়ী
SELECT Product_Name, Price
FROM Products
WHERE Category = 'Electronics'
ORDER BY Price ASC;
৫. কাস্টমার নাম অনুযায়ী (আলফাবেটিক)
SELECT Customer_Name FROM Customers ORDER BY Customer_Name ASC;
৬. সবচেয়ে বেশি বিক্রি হওয়া প্রোডাক্ট (Top 5)
SELECT Product_Name, Units_Sold
FROM Products
ORDER BY Units_Sold DESC
LIMIT 5;
ক্লাসকে জিজ্ঞেস করো
  • এই ৬টা কোয়েরির মধ্যে কোনগুলোতে ASC আর কোনগুলোতে DESC ব্যবহার হয়েছে? কেন?
10

MySQL Workbench / Google Colab-এ ধাপে ধাপে

⏱ হাতে-কলমে প্র্যাকটিস
STEP 1 — Products টেবিল তৈরি ও ডেটা ইনসার্ট
CREATE TABLE Products (
    Product_ID   INT PRIMARY KEY,
    Product_Name VARCHAR(100),
    Category     VARCHAR(50),
    Price        DECIMAL(10,2),
    Rating       DECIMAL(2,1),
    Added_Date   DATE
);

INSERT INTO Products VALUES
(1, 'Mouse', 'Electronics', 450.00, 4.2, '2026-05-10'),
(2, 'Keyboard', 'Electronics', 1200.00, 4.5, '2026-06-01'),
(3, 'Notebook', 'Stationery', 60.00, 4.0, '2026-04-15'),
(4, 'Monitor', 'Electronics', 9500.00, 4.7, '2026-07-01');
OUTPUT
Query OK, 0 rows affected (CREATE TABLE) Query OK, 4 rows affected (INSERT)
STEP 2 — নাম অনুযায়ী সাজানো
SELECT * FROM Products ORDER BY Product_Name ASC;
OUTPUT
Keyboard, Monitor, Mouse, Notebook — এই ক্রমে আসবে
STEP 3 — দাম অনুযায়ী সাজানো
SELECT * FROM Products ORDER BY Price DESC;
OUTPUT
Monitor (9500) সবার উপরে, Notebook (60) সবার নিচে
STEP 4 — তারিখ অনুযায়ী সাজানো
SELECT * FROM Products ORDER BY Added_Date DESC;
OUTPUT
সবচেয়ে সাম্প্রতিক যোগ হওয়া প্রোডাক্ট (Monitor, 2026-07-01) সবার উপরে
STEP 5 — রেটিং অনুযায়ী সাজানো
SELECT * FROM Products ORDER BY Rating DESC;
STEP 6 — একাধিক কলামে সাজানো
SELECT * FROM Products ORDER BY Category ASC, Price ASC;
OUTPUT
প্রথমে Category অনুযায়ী (Electronics, Stationery), প্রতিটা ক্যাটাগরির ভেতরে দাম কম থেকে বেশি
STEP 7 — WHERE + ORDER BY একসাথে
SELECT * FROM Products
WHERE Category = 'Electronics'
ORDER BY Price ASC;
STEP 8 — ORDER BY + LIMIT একসাথে
SELECT * FROM Products
ORDER BY Rating DESC
LIMIT 2;
OUTPUT
সবচেয়ে বেশি রেটিং থাকা প্রথম ২টা প্রোডাক্ট (Monitor, Keyboard)
কমন ভুল

LIMIT-কে ORDER BY-এর আগে লেখা — এতে Syntax Error আসবে, কারণ SQL-এ ORDER BY সবসময় LIMIT-এর আগে লিখতে হয়।

বেস্ট প্র্যাকটিস

প্রতিটা "Top N" রিপোর্টে ORDER BY এবং LIMIT একসাথে ব্যবহার করার অভ্যাস করো — এটা প্রায় প্রতিদিনই কাজে লাগবে।

11

বিগিনাররা যেখানে আটকায়

⏱ কমন ভুল
ভুলকেন সমস্যাসমাধান
ASC বা DESC লিখতে ভুলে যাওয়াসবসময় ডিফল্ট ASC হয়ে যায়, DESC দরকার হলেওDESC দরকার হলে স্পষ্টভাবে লেখো — অলসতা করে বাদ দিও না
ভাবা যে ORDER BY টেবিলকে স্থায়ীভাবে পরিবর্তন করেপ্রতিবার কোয়েরি চালালে বিভ্রান্তি হয়মনে রাখো — এটা শুধু ফলাফল দেখানোর সময়ের সাজানো, টেবিলের ডেটা অপরিবর্তিত থাকে
WHERE-এর আগে ORDER BY লেখাSyntax Errorসঠিক ক্রম: SELECT → FROM → WHERE → ORDER BY → LIMIT
ভুল কলামে সাজানোবিজনেস প্রশ্নের সঠিক উত্তর না পাওয়াপ্রশ্নটা আবার পড়ো — "সবচেয়ে দামী" মানে Price DESC, "নতুন" মানে Date DESC
একাধিক কলামে সাজানোর সময় কমা ভুলে যাওয়াSyntax ErrorORDER BY col1 ASC, col2 DESC — প্রতিটা কলামের মাঝে কমা
Alphabetical আর Numeric sorting গুলিয়ে ফেলাসংখ্যা টেক্সট আকারে সেভ থাকলে "10" "9"-এর আগে চলে আসেসংখ্যাসূচক কলাম সবসময় INT/DECIMAL টাইপে রাখো
12

প্রফেশনালরা ORDER BY কীভাবে ব্যবহার করে

⏱ ইন্ডাস্ট্রি বেস্ট প্র্যাকটিস
  • ড্যাশবোর্ড রিপোর্ট — সবসময় সবচেয়ে গুরুত্বপূর্ণ তথ্য (সর্বোচ্চ বিক্রি, সর্বোচ্চ লাভ) উপরে দেখানো হয় ORDER BY DESC দিয়ে।
  • লিডারবোর্ড — গেম বা সেলস কম্পিটিশনে সেরা পারফর্মারদের র‍্যাংক করতে ORDER BY + LIMIT ব্যবহার হয়।
  • সেলস রিপোর্ট — সবচেয়ে বেশি বিক্রি হওয়া প্রোডাক্ট বা সবচেয়ে লাভজনক অঞ্চল খুঁজে বের করতে।
  • কাস্টমার অ্যানালিটিক্স — সবচেয়ে বেশি খরচ করা কাস্টমার (VIP) চিহ্নিত করতে।
  • ফাইন্যান্সিয়াল রিপোর্টিং — সাম্প্রতিক লেনদেন সবার আগে দেখাতে (Date DESC)।
  • দক্ষ কোয়েরি লেখা — যে কলামে বারবার ORDER BY করা হয়, সেই কলামে ইনডেক্স রাখলে পারফরম্যান্স ভালো হয় (Part 15-এ বিস্তারিত)।
13

এখন সবাই মিলে করি

⏱ ক্লাসরুম অ্যাক্টিভিটি
অ্যাক্টিভিটি ১ — প্রেডিক্ট করোORDER BY Price DESC LIMIT 3 চালালে কী আউটপুট আসবে, আগে থেকে অনুমান করে লিখো, তারপর মিলিয়ে দেখো।
অ্যাক্টিভিটি ২ — হাতে সাজাওSQL লেখার আগে কাগজে ৫ জন ছাত্রের নাম ও নম্বরের একটা তালিকা হাতে সাজাও (GPA অনুযায়ী, বেশি থেকে কম), তারপর SQL দিয়ে যাচাই করো।
অ্যাক্টিভিটি ৩ — বিজনেস প্রশ্ন থেকে কোয়েরি লেখো"সবচেয়ে কম দামের ৫টা প্রোডাক্ট দেখাও" — এই বাক্য থেকে সম্পূর্ণ SQL কোয়েরি লেখো।
অ্যাক্টিভিটি ৪ — ভুল খুঁজে বের করোSELECT * FROM Products LIMIT 5 ORDER BY Price; — এই কোয়েরিতে কী ভুল আছে?
অ্যাক্টিভিটি ৫ — তুলনা করোএকই কলামে ASC আর DESC দুইভাবে সাজিয়ে আউটপুট পাশাপাশি রেখে তুলনা করো।
14

Quick Revision Notes

⏱ রিভিশন
  • ORDER BY ফলাফলকে নির্দিষ্ট কলাম অনুযায়ী সাজায় — টেবিলের আসল ডেটা বদলায় না।
  • ASC (ডিফল্ট) = ছোট থেকে বড়/A-Z/পুরনো থেকে নতুন; DESC = তার উল্টো।
  • একাধিক কলামে সাজালে, প্রথম কলামে "টাই" হলে তবেই দ্বিতীয় কলাম কাজ করে।
  • এক্সিকিউশন ক্রম: FROM → WHERE → ORDER BY → LIMIT
  • "Top N" রিপোর্টের জন্য ORDER BYLIMIT প্রায় সবসময় একসাথে ব্যবহার হয়।
  • সংখ্যা যদি ভুলবশত টেক্সট টাইপে সেভ থাকে, সাজানো ভুল হতে পারে।

Viva Questions

ORDER BY কি টেবিলের ডেটা পরিবর্তন করে?
না, এটা শুধু ফলাফল দেখানোর সময় সাজিয়ে দেখায় — টেবিলের আসল ডেটা অপরিবর্তিত থাকে।
ORDER BY-এর ডিফল্ট ক্রম কী?
ASC (Ascending) — ছোট থেকে বড়।
একাধিক কলামে সাজানোর সময় দ্বিতীয় কলাম কখন ব্যবহার হয়?
যখন প্রথম কলামের মান দুই বা ততোধিক রেকর্ডে সমান (টাই) হয়, তখন দ্বিতীয় কলাম দিয়ে সেই টাই ভাঙা হয়।

MCQ (উত্তরসহ)

ORDER BY-এর ডিফল্ট ক্রম কী?
ক) DESC   খ) ASC   গ) RANDOM   ঘ) কোনোটাই না
সঠিক উত্তর: খ) ASC
"সবচেয়ে নতুন অর্ডার আগে দেখাও" — এর জন্য কোন ক্লজ লাগবে?
ক) ORDER BY Date ASC   খ) ORDER BY Date DESC   গ) WHERE Date DESC   ঘ) GROUP BY Date
সঠিক উত্তর: খ) ORDER BY Date DESC
ORDER BY এবং LIMIT-এর সঠিক ক্রম কোনটা?
ক) LIMIT আগে, ORDER BY পরে   খ) ORDER BY আগে, LIMIT পরে   গ) যেকোনো ক্রমে   ঘ) একসাথে লেখা যায় না
সঠিক উত্তর: খ) ORDER BY আগে, LIMIT পরে

ক্লাসরুম এক্সারসাইজ

একটা Employees টেবিল থেকে সবচেয়ে বেশি বেতনের ৫ জন কর্মীর নাম ও বেতন দেখানোর SQL কোয়েরি লেখো, যেখানে শুধু "Dhaka" অফিসের কর্মী থাকবে।

হোমওয়ার্ক অ্যাসাইনমেন্ট

একটা Book Store Database ডিজাইন করো (Books টেবিল: Title, Author, Price, Published_Date, Rating)। এমন ৫টা ভিন্ন ORDER BY কোয়েরি লেখো যা একজন বাস্তব বুকস্টোর ম্যানেজার জিজ্ঞেস করতে পারে (যেমন "সবচেয়ে জনপ্রিয় বই", "সাম্প্রতিক প্রকাশিত বই")।

15

কাগজের রেজিস্টার থেকে ইনস্ট্যান্ট সর্টিং পর্যন্ত

⏱ ইতিহাস

কম্পিউটার আসার আগে, লাইব্রেরি, ব্যাংক, এবং সরকারি অফিসে রেকর্ড হাতে-কলমে সাজানো হতো — কর্মীরা কাগজের কার্ড বর্ণানুক্রমিকভাবে সাজিয়ে রাখতেন (যেমন লাইব্রেরির পুরনো Card Catalog সিস্টেম), যা হাজার হাজার ঘণ্টার ম্যানুয়াল শ্রম দাবি করতো। কম্পিউটার সায়েন্সে ১৯৪৫-৫০-এর দশক থেকে বিভিন্ন Sorting Algorithm (Bubble Sort, Merge Sort, Quick Sort) নিয়ে গবেষণা শুরু হয়, যা পরবর্তীতে প্রতিটা ডেটাবেস সিস্টেমের ভেতরে অন্তর্নির্মিত হয়ে যায়। আজ যখন তুমি ORDER BY লেখো, ডেটাবেস ইঞ্জিন ভেতরে ভেতরে এই ধরনের অত্যন্ত দক্ষ Sorting Algorithm ব্যবহার করে লক্ষ লক্ষ রেকর্ড এক সেকেন্ডের কম সময়ে সাজিয়ে ফেলে — যা মানুষ হাতে করতে গেলে হয়তো কয়েক সপ্তাহ লাগতো।

16

ORDER BY ঠিক কোথায় কাজ করে

⏱ সম্পূর্ণ SQL এক্সিকিউশন ফ্লো
FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMIT
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT — এটাই SQL-এর প্রকৃত এক্সিকিউশন অর্ডার (আমরা যেভাবে লিখি তার থেকে ভিন্ন)

মজার বিষয় — আমরা কোয়েরি লিখি SELECT ... FROM ... WHERE ... ORDER BY এই ক্রমে, কিন্তু ডেটাবেস ইঞ্জিন ভেতরে ভেতরে এক্সিকিউট করে ভিন্ন ক্রমে — আগে FROM/WHERE দিয়ে ডেটা ফিল্টার হয়, তারপর GROUP BY/HAVING দিয়ে দলবদ্ধ হয়, তারপর SELECT দিয়ে কলাম বাছাই হয়, সবশেষে ORDER BY এবং LIMIT প্রয়োগ হয়। এই কারণেই ORDER BY-তে এমনকি SELECT-এ নেই এমন কলামও ব্যবহার করা যায় কিছু ক্ষেত্রে।

17

পাঁচটি গুরুত্বপূর্ণ তুলনা টেবিল

⏱ বিস্তারিত তুলনা

1. ASC vs DESC

দিকASCDESC
ক্রমছোট → বড়বড় → ছোট
ডিফল্টহ্যাঁনা

2. ORDER BY vs GROUP BY

দিকORDER BYGROUP BY
উদ্দেশ্যরেকর্ড সাজানোরেকর্ড দলবদ্ধ করে যোগফল/গড় বের করা
ফলাফলের সংখ্যাসমান থাকেসাধারণত কমে যায় (প্রতি দলে একটা রো)

3. ORDER BY vs LIMIT

দিকORDER BYLIMIT
কাজসাজানোনির্দিষ্ট সংখ্যক রেকর্ড দেখানো
একা ব্যবহারঅর্থপূর্ণORDER BY ছাড়া "Top N" অর্থহীন হতে পারে (কোনো নির্দিষ্ট ক্রম গ্যারান্টি থাকে না)

4. Single-column vs Multi-column Sorting

দিকSingle-columnMulti-column
উপযুক্তসাধারণ, সরল রিপোর্টযখন একই মান একাধিকবার আসতে পারে (টাই ভাঙতে)

5. Sorting Numbers vs Text vs Dates

দিকNumbersTextDates
তুলনার ভিত্তিসংখ্যাগত মানবর্ণানুক্রমিক (ASCII/Unicode)ক্যালেন্ডার ক্রম
সাধারণ সমস্যাটেক্সট টাইপে সেভ থাকলে ভুল ক্রমবড়/ছোট হাতের অক্ষরে পার্থক্য হতে পারেভুল Date Format থাকলে ভুল সাজানো
18

Student Management System — সব ORDER BY অপারেশন একসাথে

⏱ মিনি প্রজেক্ট
সম্পূর্ণ প্র্যাকটিস সেট
CREATE TABLE Students (
    Student_ID  INT PRIMARY KEY,
    Name        VARCHAR(100),
    Department  VARCHAR(50),
    GPA         DECIMAL(3,2),
    Age         INT,
    Admission_Date DATE
);

-- ১. নাম অনুযায়ী (ASC)
SELECT * FROM Students ORDER BY Name ASC;

-- ২. GPA অনুযায়ী, বেশি থেকে কম (DESC)
SELECT * FROM Students ORDER BY GPA DESC;

-- ৩. Department অনুযায়ী, তারপর GPA (Multi-column)
SELECT * FROM Students ORDER BY Department ASC, GPA DESC;

-- ৪. শুধু CSE ছাত্র, GPA অনুযায়ী (WHERE + ORDER BY)
SELECT * FROM Students WHERE Department = 'CSE' ORDER BY GPA DESC;

-- ৫. সেরা ৩ জন ছাত্র (ORDER BY + LIMIT)
SELECT * FROM Students ORDER BY GPA DESC LIMIT 3;
সম্পূর্ণ চিত্র

এই একটা সেটেই ASC, DESC, Multi-column, WHERE+ORDER BY, এবং ORDER BY+LIMIT — সবগুলো প্যাটার্ন একসাথে প্র্যাকটিস করা যায়।

চ্যালেঞ্জ: একই কাঠামো দিয়ে একটা E-commerce Product Database বানিয়ে দেখাও, যেখানে Category, Price, Rating দিয়ে বিভিন্ন কম্বিনেশনে সাজানো প্র্যাকটিস করবে।

19

বিভিন্ন রোলে ORDER BY-এর দৈনন্দিন ব্যবহার

⏱ প্রফেশনাল ওয়ার্কফ্লো
রোলদৈনন্দিন ব্যবহার
Data Analystসেলস রিপোর্টে সবচেয়ে লাভজনক প্রোডাক্ট/অঞ্চল খুঁজে বের করা
Data Scientistমডেলের ফিচার ইম্পর্ট্যান্স বা প্রেডিকশন স্কোর অনুযায়ী রেকর্ড সাজিয়ে বিশ্লেষণ করা
BI Developerড্যাশবোর্ডে "Top Customers", "Top Products" উইজেট তৈরি করা
Backend DeveloperAPI রেসপন্সে ডেটা সঠিক ক্রমে (যেমন সাম্প্রতিক নোটিফিকেশন আগে) পাঠানো
Database Administratorভারী ORDER BY কোয়েরির পারফরম্যান্স মনিটর করে ইনডেক্স অপ্টিমাইজ করা
20

লক্ষ লক্ষ রো সাজানো কেন ব্যয়বহুল হতে পারে

⏱ পারফরম্যান্স টিপস

যখন একটা টেবিলে লক্ষ লক্ষ রো থাকে, তখন প্রতিটা ORDER BY কোয়েরি ডেটাবেসকে সেই বিশাল ডেটাসেট তুলনা করে সাজাতে বাধ্য করে — এটা CPU ও মেমোরি উভয়ের উপর চাপ ফেলে।

কনসেপ্টসহজ ব্যাখ্যা
Indexএকটা কলামের জন্য আগে থেকে তৈরি করা "শর্টকাট ম্যাপ", যা দিয়ে সাজানো/খোঁজা দ্রুত হয় — যেমন বইয়ের ইনডেক্স পাতা
Sorting Costইনডেক্স ছাড়া ORDER BY চালালে ডেটাবেসকে পুরো টেবিল স্ক্যান করে তুলনা করতে হয়, যা ধীর
WHERE দিয়ে আগে ছোট করাযত কম রো সাজাতে হবে, তত দ্রুত ফলাফল আসবে — তাই WHERE দিয়ে প্রথমে ডেটাসেট ছোট করা ভালো
LIMIT ব্যবহার করাযদি শুধু "Top 10" দরকার হয়, পুরো ফলাফল না এনে LIMIT ব্যবহার করলে অনেক দ্রুত হয়
এনালজি ইনডেক্স ছাড়া ORDER BY অনেকটা একটা এলোমেলো ফোনবই থেকে হাতে হাতে সব নাম খুঁজে সাজানোর মতো। ইনডেক্স থাকলে এটা এমন, যেন ফোনবইটা আগে থেকেই বর্ণানুক্রমিকভাবে সাজানো আছে — শুধু পড়ে গেলেই হলো।
21

Top 30 SQL ORDER BY ইন্টারভিউ প্রশ্ন

⏱ ইন্টারভিউ প্রস্তুতি

সংক্ষিপ্ত উত্তর ও প্র্যাকটিক্যাল প্রেক্ষাপটসহ — চাকরির ইন্টারভিউয়ের আগে এই টেবিলটা রিভিশন করো।

#প্রশ্নসংক্ষিপ্ত উত্তর
01ORDER BY কী?SQL-এর ফলাফল নির্দিষ্ট কলাম অনুযায়ী সাজানোর ক্লজ।
02ORDER BY কি টেবিলের ডেটা স্থায়ীভাবে বদলায়?না, শুধু ফলাফল দেখানোর সময় সাজায়।
03ORDER BY-এর ডিফল্ট ক্রম কী?ASC (Ascending)।
04ASC ও DESC-এর পার্থক্য কী?ASC ছোট থেকে বড়; DESC বড় থেকে ছোট।
05একাধিক কলামে কীভাবে সাজাবে?ORDER BY col1, col2 — কমা দিয়ে আলাদা করে।
06একাধিক কলামে সাজালে দ্বিতীয় কলাম কখন কাজ করে?যখন প্রথম কলামের মান সমান (টাই) হয়।
07ORDER BY এবং WHERE-এর ক্রম কী হওয়া উচিত?WHERE আগে, ORDER BY পরে।
08ORDER BY এবং LIMIT একসাথে কেন ব্যবহার হয়?"Top N" রেজাল্ট বের করতে — আগে সাজানো, তারপর সংখ্যা সীমিত করা।
09ORDER BY ছাড়া LIMIT ব্যবহার করলে কী সমস্যা?কোনো নির্দিষ্ট ক্রমের গ্যারান্টি থাকে না — ফলাফল প্রতিবার ভিন্ন আসতে পারে।
10টেক্সট কলাম কীভাবে সাজানো হয়?বর্ণানুক্রমিকভাবে (A→Z সাধারণত)।
11তারিখ কলাম DESC-এ সাজালে কী হয়?সবচেয়ে নতুন তারিখ সবার উপরে আসে।
12NULL ভ্যালু ORDER BY-তে কোথায় বসে?ডেটাবেস-ভেদে ভিন্ন; MySQL-এ ASC-তে সাধারণত সবার আগে দেখায়।
13ORDER BY কি কলাম নম্বর দিয়েও করা যায়?হ্যাঁ, যেমন ORDER BY 2 মানে SELECT-এর দ্বিতীয় কলাম অনুযায়ী — তবে নাম ব্যবহার করাই স্পষ্ট ও প্রফেশনাল অভ্যাস।
14ORDER BY কি SELECT-এ নেই এমন কলাম দিয়ে করা যায়?অনেক ডেটাবেসে হ্যাঁ, কারণ ORDER BY এক্সিকিউশন ক্রমে SELECT-এর পরে চলে।
15ORDER BY কেন Top N রিপোর্টে অপরিহার্য?এটা ছাড়া "সর্বোচ্চ/সর্বনিম্ন" নির্ধারণের কোনো নিশ্চিত উপায় থাকে না।
16একাধিক কলামে ASC ও DESC মিক্স করা যায় কি?হ্যাঁ, যেমন ORDER BY Department ASC, GPA DESC
17বড় টেবিলে ORDER BY ধীর হলে কী করবে?সাজানোর কলামে Index তৈরি করা, এবং WHERE দিয়ে আগে ডেটাসেট ছোট করা।
18Index ORDER BY-কে কীভাবে দ্রুত করে?ডেটা আগে থেকেই সাজানো অবস্থায় সংরক্ষিত থাকায় নতুন করে পুরো সাজানোর দরকার পড়ে না।
19ORDER BY vs GROUP BY পার্থক্য কী?ORDER BY রেকর্ড সাজায়; GROUP BY রেকর্ড দলবদ্ধ করে সামারি (COUNT, SUM, AVG) তৈরি করে।
20SQL-এর প্রকৃত এক্সিকিউশন অর্ডারে ORDER BY কোথায়?FROM, WHERE, GROUP BY, HAVING, SELECT-এর পরে, LIMIT-এর ঠিক আগে।
21Case-sensitivity ORDER BY-তে প্রভাব ফেলে কি?ডেটাবেস কনফিগারেশন (collation) অনুযায়ী বড়/ছোট হাতের অক্ষর ভিন্নভাবে সাজানো হতে পারে।
22সংখ্যা টেক্সট টাইপে থাকলে সাজানো কেন ভুল হয়?তুলনা অক্ষর-ভিত্তিক হয়, সংখ্যাগত মান অনুযায়ী নয় — তাই "10" "9"-এর আগে চলে আসতে পারে।
23একই কোয়েরিতে একাধিকবার একই কলামে ORDER BY লেখা যায়?সাধারণত না দরকার, এবং redundant — প্রতিটা কলাম একবারই লিখতে হয়।
24ORDER BY RAND() কী করে?ফলাফল সম্পূর্ণ র‍্যান্ডম ক্রমে সাজায় — বড় টেবিলে এটা ধীর হতে পারে।
25ORDER BY কি Subquery-তে ব্যবহার করা যায়?প্রায়ই না (অনেক DB-তে বাদ দেওয়া হয়), কারণ Subquery-এর ফলাফলের ক্রম সাধারণত গ্যারান্টিড নয় যতক্ষণ না বাইরের কোয়েরিতেও ORDER BY থাকে।
26Pagination-এ ORDER BY কীভাবে ব্যবহার হয়?সামঞ্জস্যপূর্ণ পেজ দেখানোর জন্য ORDER BY + LIMIT + OFFSET একসাথে ব্যবহার হয়।
27একজন Data Analyst কেন প্রতিদিন ORDER BY ব্যবহার করে?রিপোর্ট, ড্যাশবোর্ড এবং Top N বিশ্লেষণে অর্থপূর্ণভাবে ডেটা উপস্থাপনের জন্য।
28ORDER BY-এর সবচেয়ে সাধারণ ভুল কী?ASC/DESC নির্দিষ্ট না করা, অথবা ভুল কলামে সাজানো।
29Leaderboard তৈরি করতে কোন কম্বিনেশন লাগবে?ORDER BY Score DESC LIMIT N
30ORDER BY ডিজাইনের সবচেয়ে গুরুত্বপূর্ণ প্রশ্ন কী নিজেকে জিজ্ঞেস করা উচিত?"বিজনেস আসলে কোন কলাম অনুযায়ী, কোন দিকে (ASC/DESC) সাজানো ফলাফল দেখতে চায়?"
কমন ফলো-আপ প্রশ্ন (ইন্টারভিউয়ে আসতে পারে)
  • "বড় টেবিলে ORDER BY স্লো হলে তুমি কী করবে?" — Index এবং WHERE দিয়ে ডেটাসেট ছোট করার কথা বলতে প্রস্তুত থাকো।
  • "Pagination কীভাবে ইমপ্লিমেন্ট করবে?" — ORDER BY + LIMIT + OFFSET-এর উদাহরণ দিতে প্রস্তুত থাকো।
  • "ORDER BY vs GROUP BY ব্যাখ্যা করো" — একটা নির্দিষ্ট বিজনেস উদাহরণ দিয়ে পার্থক্য বোঝাতে প্রস্তুত থাকো।