SQL Query Execution Order

তুমি যখন কোনো SQL কুয়েরি লেখো, তখন সাধারণত SELECT দিয়ে কোড শুরু করো। স্ক্রিনে আমরা এভাবেই কোড দেখি। কিন্তু মজার ব্যাপার হলো, ডেটাবেস ইঞ্জিন বাস্তবে কোড এক্সিকিউট করার সময় কখনোই SELECT থেকে তার কাজ শুরু করে না!

SQL-এর দুনিয়াটা অনেকটাই সিনেমার মতো—স্ক্রিনে তুমি যা দেখতে পাও, ক্যামেরার পেছনের আসল কাজ বা মেকানিজম চলে সম্পূর্ণ ভিন্ন অর্ডারে। এই ভেতরের (Internal) এক্সিকিউশন অর্ডার বা লজিক্যাল ফ্লো বোঝা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে তুমি যদি একজন দক্ষ ডেটাবেস ডেভেলপার, ডেটা অ্যানালিস্ট বা ব্যাকএন্ড ডেভেলপার হতে চাও। এই ফ্লো বুঝতে পারলে তুমি শুধু কোডই লিখবে না, বরং অত্যন্ত পারফরম্যান্স-ফ্রেন্ডলি, লজিক্যাল এবং ভুলবিহীন (Bug-free) কুয়েরি লিখতে পারবে।

একটি রিয়েল-লাইফ SQL Query উদাহরণ

ধরে নাও, আমাদের একটি ই-কমার্স ডেটাবেস আছে, যেখানে orders নামের একটি টেবিল রয়েছে। আমরা জানতে চাই: "২০২৬ সালের ১ জানুয়ারির পর থেকে যে দেশগুলোতে মোট বিক্রির পরিমাণ ১০,০০০ ডলারের বেশি, সেই শীর্ষ ৩টি দেশের নাম এবং তাদের মোট বিক্রির পরিমাণ কত?"

এর জন্য আমরা নিচের SQL কুয়েরিটি লিখব:

SELECT 
    country, 
    SUM(total_amount) AS country_total_sales
FROM orders
WHERE order_date >= '2026-01-01'
GROUP BY country
HAVING SUM(total_amount) > 10000
ORDER BY country_total_sales DESC
LIMIT 3;

আমরা কোডটি SELECT দিয়ে শুরু করলেও, ডেটাবেস ইঞ্জিন এটিকে ভিন্ন একটি অর্ডারে প্রসেস করবে। চলো দেখি ইঞ্জিন কীভাবে ধাপে ধাপে এটি এক্সিকিউট করে।

ধাপে ধাপে এক্সিকিউশন বিশ্লেষণ (Execution Flow)

ডেটাবেস ইঞ্জিন ওপরের কোডটিকে ঠিক নিচের ৮টি অর্ডারে এক্সিকিউট করবে:

১. FROM (সোর্স নির্ধারণ)

ডেটাবেস প্রথমেই নির্ধারণ করে যে তাকে কোন টেবিল থেকে ডেটা আনতে হবে।

  • ভেতরের কাজ: ডেটাবেস প্রথমে orders টেবিলটি মেমোরিতে লোড করে। যদি এখানে কোনো JOIN থাকত, তবে এই ধাপেই দুটি টেবিল যুক্ত হয়ে একটি ভার্চুয়াল টেবিল তৈরি হতো।

২. WHERE (প্রাথমিক ফিল্টারিং)

টেবিল নির্ধারণ করার পর ইঞ্জিন প্রতিটি রো (Row) এর ওপর শর্ত চেক করে।

  • ভেতরের কাজ: ইঞ্জিন চেক করে order_date >= '2026-01-01'। যে অর্ডারগুলো ২০২৬ সালের আগের, সেগুলো সে এখানেই পুরোপুরি বাদ দিয়ে দেয়। ফলে পরবর্তী ধাপগুলোর জন্য প্রসেসিং ডেটা অনেক কমে যায়।

৩. GROUP BY (ডেটা গ্রুপিং)

WHERE ফিল্টারিংয়ের পর টিকে থাকা ডেটাগুলোকে এই ধাপে নির্দিষ্ট কলামের ওপর ভিত্তি করে গ্রুপ করা হয়।

  • ভেতরের কাজ: ইঞ্জিন এখন ডেটাগুলোকে country অনুযায়ী আলাদা আলাদা গ্রুপে ভাগ করে ফেলে (যেমন: US এর সব অর্ডার এক গ্রুপে, UK এর সব অর্ডার অন্য গ্রুপে)।

৪. HAVING (গ্রুপ ফিল্টারিং)

GROUP BY দিয়ে তৈরি হওয়া গ্রুপগুলোর ওপর শর্ত দেওয়ার জন্য HAVING ব্যবহৃত হয়।

  • ভেতরের কাজ: ইঞ্জিন প্রতিটি দেশের মোট বিক্রি (SUM(total_amount)) হিসেব করে এবং দেখে কোন দেশের বিক্রি 10000 এর বেশি। যে দেশের বিক্রি এর চেয়ে কম, সেই দেশ বা গ্রুপটি বাদ পড়ে যায়।

৫. SELECT (কলাম নির্বাচন ও ক্যালকুলেশন)

এতগুলো ধাপ পার হওয়ার পর ডেটাবেস ইঞ্জিন অবশেষে SELECT এর কাছে আসে!

  • ভেতরের কাজ: ইঞ্জিন এখন দেখে ইউজার কোন কলামগুলো দেখতে চেয়েছে। সে country কলামটি নেয় এবং SUM(total_amount) এর একটি নতুন নাম (Alias) দেয় country_total_sales হিসেবে।

৬. DISTINCT (ডুপ্লিকেট রিমুভ)

  • ভেতরের কাজ: আমাদের এই কুয়েরিতে DISTINCT নেই। যদি থাকত, তবে এই ধাপে এসে ইঞ্জিন ডুপ্লিকেট ভ্যালুগুলোকে মুছে ফেলত।

৭. ORDER BY (সর্টিং বা সাজানো)

রেজাল্ট সেট তৈরি হওয়ার পর সেগুলোকে নির্দিষ্ট অর্ডারে সাজানো হয়।

  • ভেতরের কাজ: যেহেতু SELECT ধাপটি আগেই শেষ হয়ে গেছে, তাই ডেটাবেস এখন country_total_sales (যে নামটা SELECT এ দেওয়া হয়েছিল) চেনে। সে এখন এই কলামটির ওপর ভিত্তি করে ডেটাগুলোকে বড় থেকে ছোট (DESC) ক্রমানুসারে সাজিয়ে ফেলে।

৮. LIMIT / OFFSET (পজিশনিং)

সবশেষে ইঞ্জিন নির্ধারণ করে ইউজারের স্ক্রিনে কতগুলো রেকর্ড দেখানো হবে।

  • ভেতরের কাজ: যেহেতু আমরা LIMIT 3 দিয়েছি, ইঞ্জিন সর্ট করা লিস্ট থেকে শুধুমাত্র ওপরের ৩টি দেশের ডেটা আউটপুট হিসেবে পাঠাবে।

কেন এই Execution Order জানা তোমার জন্য জরুরি?

  • Performance Optimization: তুমি যখন জানবে WHERE আগে কাজ করে এবং HAVING পরে কাজ করে, তখন তুমি সবসময় চেষ্টা করবে অপ্রয়োজনীয় ডেটা WHERE ক্লজেই ফিল্টার করে ফেলতে। এতে GROUP BY এর ওপর প্রসেসিংয়ের চাপ কমবে এবং কুয়েরি দ্রুত রান করবে।

  • সহজ ডিবাগিং (Debugging): অনেকেই SELECT এ একটি Alias তৈরি করে সেটি WHERE এর ভেতর ব্যবহার করতে গিয়ে এরর খায়। এক্সিকিউশন অর্ডার জানলে তুমি বুঝবে যে, WHERE যখন কাজ করে, তখন ডেটাবেস SELECT এর Alias সম্পর্কে কিছুই জানে না।

  • লজিক্যাল চিন্তাধারা: SQL শেখা মানে শুধু সিনট্যাক্স মুখস্থ করা নয়। এই ফ্লো বুঝতে পারলে তুমি অন্ধের মতো কোড কপি-পেস্ট না করে, বুঝে বুঝে অত্যন্ত লজিক্যাল এবং স্ট্রাকচারড কুয়েরি লিখতে পারবে। আর এই স্কিলটিই তোমাকে সাধারণ কোডারদের চেয়ে আলাদা করে তুলবে।