MariaDB-তে এডভান্সড কুয়েরি ব্যবহার করে জটিল ডেটাবেস অপারেশন সম্পাদন করা যায়। এডভান্সড কুয়েরি সাধারণত একাধিক টেবিলের সাথে কাজ করা, ডেটা ফিল্টারিং, গ্রুপিং এবং অ্যাগ্রিগেট ফাংশন প্রয়োগের জন্য ব্যবহৃত হয়। নিচে MariaDB-এর কিছু গুরুত্বপূর্ণ এডভান্সড কুয়েরির উদাহরণ দেওয়া হলো।
জয়েন (JOIN)
MariaDB-তে JOIN ব্যবহার করে একাধিক টেবিল থেকে ডেটা একত্রিত করা হয়।
INNER JOIN
দুটি টেবিলের মিলিত ডেটা রিট্রিভ করতে ব্যবহৃত হয়।
উদাহরণ
students টেবিল:
| student_id | name | age |
|---|---|---|
| 1 | Rahim | 20 |
| 2 | Karim | 22 |
courses টেবিল:
| course_id | student_id | course_name |
|---|---|---|
| 101 | 1 | Mathematics |
| 102 | 2 | Physics |
INNER JOIN ব্যবহার:
SELECT students.name, courses.course_name
FROM students
INNER JOIN courses
ON students.student_id = courses.student_id;
ফলাফল:
| name | course_name |
|---|---|
| Rahim | Mathematics |
| Karim | Physics |
LEFT JOIN
প্রথম টেবিলের সব ডেটা এবং দ্বিতীয় টেবিলের মিলিত ডেটা রিট্রিভ করতে ব্যবহৃত হয়।
SELECT students.name, courses.course_name
FROM students
LEFT JOIN courses
ON students.student_id = courses.student_id;
সাব-কুয়েরি (Subquery)
সাব-কুয়েরি এক কুয়েরির মধ্যে আরেকটি কুয়েরি ব্যবহার করে নির্দিষ্ট ডেটা রিট্রিভ করতে ব্যবহৃত হয়।
উদাহরণ
students টেবিল থেকে সবচেয়ে বেশি বয়সের শিক্ষার্থীর নাম বের করা:
SELECT name
FROM students
WHERE age = (SELECT MAX(age) FROM students);
গ্রুপিং এবং অ্যাগ্রিগেট ফাংশন
GROUP BY এবং অ্যাগ্রিগেট ফাংশন ব্যবহার করে ডেটা গ্রুপ করা এবং হিসাব করা যায়।
উদাহরণ
sales টেবিল:
| id | product | quantity |
|---|---|---|
| 1 | Laptop | 2 |
| 2 | Mobile | 5 |
| 3 | Laptop | 3 |
পণ্যের মোট বিক্রয় হিসাব:
SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product;
ফলাফল:
| product | total_quantity |
|---|---|
| Laptop | 5 |
| Mobile | 5 |
কন্ডিশনাল ফিল্টারিং (HAVING)
HAVING ব্যবহার করে গ্রুপ করা ডেটার উপর শর্ত আরোপ করা হয়।
উদাহরণ
মোট বিক্রয় ৪ এর বেশি এমন পণ্যের তালিকা বের করা:
SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product
HAVING total_quantity > 4;
LIMIT এবং OFFSET
LIMIT এবং OFFSET ব্যবহার করে ডেটার নির্দিষ্ট অংশ রিট্রিভ করা যায়।
উদাহরণ
প্রথম ৫টি রেকর্ড বের করা:
SELECT * FROM students LIMIT 5;
৫টি রেকর্ড বাদ দিয়ে পরবর্তী রেকর্ডগুলো বের করা:
SELECT * FROM students LIMIT 5 OFFSET 5;
কেস (CASE) স্টেটমেন্ট
CASE স্টেটমেন্ট ব্যবহার করে ডেটাকে নির্দিষ্ট শর্ত অনুযায়ী পরিবর্তন বা ফিল্টার করা যায়।
উদাহরণ
শিক্ষার্থীদের বয়স অনুযায়ী গ্রেড নির্ধারণ:
SELECT name,
CASE
WHEN age >= 20 THEN 'Adult'
ELSE 'Minor'
END AS grade
FROM students;
ফলাফল:
| name | grade |
|---|---|
| Rahim | Adult |
| Karim | Adult |
ডেটা পিভটিং (Pivoting)
MariaDB-তে ডেটা পিভটিং করতে অ্যাগ্রিগেট ফাংশনের সাহায্যে নির্দিষ্ট কলামকে পরিবর্তন করা হয়।
উদাহরণ
attendance টেবিল:
| student_id | subject | marks |
|---|---|---|
| 1 | Math | 80 |
| 1 | Physics | 90 |
| 2 | Math | 70 |
| 2 | Physics | 75 |
টেবিলকে পিভট করা:
SELECT student_id,
SUM(CASE WHEN subject = 'Math' THEN marks ELSE 0 END) AS Math,
SUM(CASE WHEN subject = 'Physics' THEN marks ELSE 0 END) AS Physics
FROM attendance
GROUP BY student_id;
ফলাফল:
| student_id | Math | Physics |
|---|---|---|
| 1 | 80 | 90 |
| 2 | 70 | 75 |
প্রস্তুতি এবং কার্যকারিতা
- ইন্ডেক্স (Index): ডেটার দ্রুত অ্যাক্সেসের জন্য টেবিলে ইন্ডেক্স তৈরি করুন।
- ভিউ (View): জটিল কুয়েরি সহজ করতে ভিউ ব্যবহার করুন।
CREATE VIEW student_courses AS
SELECT students.name, courses.course_name
FROM students
JOIN courses ON students.student_id = courses.student_id;
MariaDB-এর এডভান্সড কুয়েরি ডেটাবেস ব্যবস্থাপনা ও বিশ্লেষণে শক্তিশালী টুল সরবরাহ করে। এই কুয়েরিগুলো ব্যবহার করে জটিল ডেটা কাঠামো সহজে পরিচালনা করা সম্ভব।
MariaDB-তে ডেটা ফিল্টার, সাজানো, এবং সীমাবদ্ধ করার জন্য WHERE, ORDER BY, এবং LIMIT কন্ডিশন ব্যবহার করা হয়। এগুলো ডেটা রেট্রিভাল প্রক্রিয়াকে আরও কার্যকর এবং নির্দিষ্ট করে তোলে। নিচে এই কন্ডিশনগুলোর ব্যবহার বিশদভাবে ব্যাখ্যা করা হয়েছে।
WHERE কন্ডিশন
WHERE কন্ডিশন ব্যবহার করে টেবিল থেকে নির্দিষ্ট মানদণ্ড অনুযায়ী ডেটা নির্বাচন করা হয়।
সাধারণ গঠন
SELECT column1, column2
FROM table_name
WHERE condition;
উদাহরণ
ধরা যাক, একটি students টেবিল আছে:
SELECT * FROM students WHERE age > 15;
উপরের কমান্ডটি ১৫ বছরের বেশি বয়সের শিক্ষার্থীদের তথ্য দেখাবে।
WHERE-এ লজিক্যাল অপারেটর
AND: একাধিক শর্ত পূরণ করতে।
SELECT * FROM students WHERE age > 15 AND grade = '10th';OR: যেকোনো একটি শর্ত পূরণ করতে।
SELECT * FROM students WHERE age > 15 OR grade = '9th';NOT: শর্ত ব্যতিক্রম করতে।
SELECT * FROM students WHERE NOT grade = '10th';
WHERE-এ প্যাটার্ন ম্যাচিং (LIKE)
LIKE ব্যবহার করে নির্দিষ্ট প্যাটার্নের সাথে মিল খুঁজে বের করা যায়:
SELECT * FROM students WHERE name LIKE 'J%';
উপরের কমান্ডটি এমন শিক্ষার্থীদের তথ্য দেখাবে যাদের নাম "J" দিয়ে শুরু।
ORDER BY কন্ডিশন
ORDER BY ব্যবহার করে টেবিলের ডেটা নির্দিষ্ট ক্রমে সাজানো হয়।
সাধারণ গঠন
SELECT column1, column2
FROM table_name
ORDER BY column_name [ASC|DESC];
- ASC: ক্রমানুসারে সাজানো (ডিফল্ট)।
- DESC: উল্টো ক্রমে সাজানো।
উদাহরণ
SELECT * FROM students ORDER BY age ASC;
উপরের কমান্ডটি শিক্ষার্থীদের বয়স অনুযায়ী ক্রমবর্ধমানভাবে সাজাবে।
SELECT * FROM students ORDER BY grade DESC;
উপরের কমান্ডটি শিক্ষার্থীদের গ্রেড অনুযায়ী উল্টো ক্রমে সাজাবে।
LIMIT কন্ডিশন
LIMIT ব্যবহার করে নির্বাচিত ডেটার সংখ্যা সীমাবদ্ধ করা হয়।
সাধারণ গঠন
SELECT column1, column2
FROM table_name
LIMIT number;
উদাহরণ
SELECT * FROM students LIMIT 5;
উপরের কমান্ডটি প্রথম ৫টি রেকর্ড দেখাবে।
LIMIT-এর সাথে OFFSET
LIMIT-এর সাথে OFFSET ব্যবহার করে নির্দিষ্ট অবস্থান থেকে ডেটা দেখানো যায়।
SELECT * FROM students LIMIT 5 OFFSET 10;
উপরের কমান্ডটি ১১তম থেকে শুরু করে পরবর্তী ৫টি রেকর্ড দেখাবে।
WHERE, ORDER BY এবং LIMIT একত্রে ব্যবহার
এই কন্ডিশনগুলো একসঙ্গে ব্যবহার করে আরও নির্দিষ্ট রেজাল্ট পাওয়া যায়।
উদাহরণ
SELECT name, age, grade
FROM students
WHERE grade = '10th'
ORDER BY age DESC
LIMIT 3;
উপরের কমান্ডটি ১০ম শ্রেণির শিক্ষার্থীদের মধ্যে সবচেয়ে বেশি বয়স্ক তিনজনের তথ্য দেখাবে।
সারাংশ
MariaDB-তে ডেটা ফিল্টার, সাজানো, এবং সীমিত করার জন্য WHERE, ORDER BY, এবং LIMIT কন্ডিশন ব্যবহার করা হয়।
- WHERE: নির্দিষ্ট মানদণ্ড অনুযায়ী ডেটা ফিল্টার করতে।
- ORDER BY: ডেটা ক্রমানুসারে সাজাতে।
- LIMIT: ডেটার সংখ্যা সীমাবদ্ধ করতে।
এই কন্ডিশনগুলো একত্রে ব্যবহার করলে ডেটাবেস থেকে দ্রুত এবং কার্যকরভাবে নির্দিষ্ট তথ্য রেট্রিভ করা যায়।
মারিয়া ডিবি (MariaDB) একটি রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS) যেখানে ডেটা সন্নিবেশ করতে ও বিশ্লেষণ করতে SQL ব্যবহার করা হয়। JOIN কুয়েরি SQL-এ একটি গুরুত্বপূর্ণ অংশ, যা একাধিক টেবিল থেকে ডেটা একত্রিত করতে সহায়তা করে। JOIN-এর বিভিন্ন ধরনের কুয়েরি রয়েছে, যেমন INNER JOIN, LEFT JOIN, RIGHT JOIN, এবং FULL OUTER JOIN, যা ডেটা একত্রিত করার জন্য বিভিন্ন পদ্ধতি ব্যবহার করে।
INNER JOIN কুয়েরি
INNER JOIN একটি সাধারণ JOIN অপারেটর, যা দুটি টেবিলের মধ্যে মিল থাকা রেকর্ডগুলোই নির্বাচন করে। যদি কোন টেবিলের রেকর্ড অন্য টেবিলের সাথে মেলে না, তবে সেই রেকর্ডগুলো অন্তর্ভুক্ত হয় না।
উদাহরণ:
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
এই কুয়েরিতে, employees এবং departments টেবিল থেকে শুধুমাত্র সেই রেকর্ডগুলো নির্বাচন করা হবে, যেগুলোর মধ্যে department_id মিলছে।
LEFT JOIN কুয়েরি
LEFT JOIN, যাকে LEFT OUTER JOIN বলা হয়, এটি বামপাশের (LEFT) টেবিলের সমস্ত রেকর্ডকে নির্বাচন করে এবং ডানপাশের (RIGHT) টেবিলের সাথে মিল থাকলে সেটি যুক্ত করে। যদি ডানপাশের টেবিলে মিল না পাওয়া যায়, তবে সেখানে NULL দেখানো হবে।
উদাহরণ:
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
এখানে, employees টেবিলের সমস্ত রেকর্ড প্রদর্শিত হবে, এবং যেখানে department_id মিল নেই, সেখানে department_name কলামে NULL দেখানো হবে।
RIGHT JOIN কুয়েরি
RIGHT JOIN, যাকে RIGHT OUTER JOIN বলা হয়, এটি ডানপাশের (RIGHT) টেবিলের সমস্ত রেকর্ডকে নির্বাচন করে এবং বামপাশের (LEFT) টেবিলের সাথে মিল থাকলে সেটি যুক্ত করে। যদি বামপাশের টেবিলে মিল না পাওয়া যায়, তবে সেখানে NULL দেখানো হবে।
উদাহরণ:
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
এই কুয়েরিতে, departments টেবিলের সমস্ত রেকর্ড দেখানো হবে, এবং যেখানে department_id মিল নেই, সেখানে name কলামে NULL প্রদর্শিত হবে।
FULL OUTER JOIN কুয়েরি
FULL OUTER JOIN দুটি টেবিলের সমস্ত রেকর্ড নির্বাচন করে, যাতে কোনো টেবিলের রেকর্ড অন্য টেবিলের সাথে না মেললেও তা অন্তর্ভুক্ত হবে। এই JOIN-এর মাধ্যমে, যেসব রেকর্ড অন্য টেবিলে পাওয়া যায়নি, সেগুলোর ক্ষেত্রে NULL দেখানো হবে।
মারিয়া ডিবিতে সরাসরি FULL OUTER JOIN সমর্থিত না হলেও, আপনি LEFT JOIN এবং RIGHT JOIN মিশ্রিত করে FULL OUTER JOIN-এর মতো ফলাফল পেতে পারেন।
উদাহরণ:
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id
UNION
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
এই কুয়েরি দুটি অংশে ভাগ করা হয়েছে: এক অংশে LEFT JOIN এবং অন্য অংশে RIGHT JOIN ব্যবহার করা হয়েছে, এবং তারপর UNION দিয়ে ফলাফল একত্রিত করা হয়েছে। এর ফলে FULL OUTER JOIN-এর ফলাফল পাওয়া যাবে।
সারাংশ
মারিয়া ডিবি (MariaDB)-তে JOIN কুয়েরির মাধ্যমে একাধিক টেবিলের ডেটা একত্রিত করা সম্ভব। INNER JOIN, LEFT JOIN, RIGHT JOIN এবং FULL OUTER JOIN-এর মাধ্যমে আপনি বিভিন্ন ধরনের রিলেশন এবং মিল থাকা রেকর্ডগুলোকে সঠিকভাবে ম্যানেজ করতে পারেন।
মারিয়া ডিবি (MariaDB) তে Subquery এবং Nested Query হল দুটি গুরুত্বপূর্ণ ধারণা, যেগুলি ডেটাবেসের জটিল এবং অত্যাধুনিক প্রশ্নগুলি কার্যকরভাবে পরিচালনা করতে সাহায্য করে।
Subquery কী?
Subquery বা সাবকোয়েরি হলো একটি SQL প্রশ্ন (query), যা আরেকটি প্রধান (outer) প্রশ্নের মধ্যে থাকে। সহজ ভাষায়, এটি মূল প্রশ্নের অংশ হিসেবে আরেকটি প্রশ্নের ফলাফল ব্যবহার করে। সাবকোয়েরি সাধারণত SELECT, INSERT, UPDATE, বা DELETE কমান্ডে ব্যবহার করা হয়।
Subquery এর ধরন
- ইনলাইন সাবকোয়েরি (Inline Subquery): যেখানে সাবকোয়েরি প্রধান প্রশ্নের মধ্যে সরাসরি ব্যবহৃত হয়।
- স্কেলার সাবকোয়েরি (Scalar Subquery): যেখানে সাবকোয়েরি শুধুমাত্র একটি একক মান প্রদান করে।
- ইন সাবকোয়েরি (IN Subquery): যেখানে সাবকোয়েরি একটি তালিকা প্রদান করে এবং মূল প্রশ্নের সাথে তুলনা করা হয়।
- এগেইন সাবকোয়েরি (Existential Subquery): যেখানে সাবকোয়েরি একটি ফলাফল প্রদান করে, যা নির্ধারণ করে যে কোনো রেকর্ড বিদ্যমান কিনা।
উদাহরণ:
SELECT Name
FROM Employees
WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE DepartmentName = 'Sales');
এখানে, সাবকোয়েরি (SELECT DepartmentID FROM Departments WHERE DepartmentName = 'Sales') প্রথমে কার্যকর হবে এবং তার ফলাফল মূল প্রশ্নে (Employees টেবিল থেকে নাম বের করা) ব্যবহার হবে।
Nested Query কী?
Nested Query বা নেস্টেড কোয়েরি হলো এমন একটি SQL প্রশ্ন, যেখানে একটি কোয়েরি অন্য একটি কোয়েরির মধ্যে লেখা থাকে। এটি মূলত Subquery এর সমার্থক, তবে অনেক সময় এটি আরও জটিল প্রশ্ন গঠনে ব্যবহৃত হয়।
নেস্টেড কোয়েরি সাধারণত দুই বা তার বেশি স্তরের (layered) কোয়েরি তৈরি করে। একে আরো জটিল প্রশ্নের ক্ষেত্রে ব্যবহার করা হয় যেখানে একাধিক ডেটা সোর্স থেকে তথ্য সংগ্রহ করা হয়।
উদাহরণ:
SELECT Name
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
এখানে, প্রথম কোয়েরি Employees টেবিল থেকে সেলারি গুণে AVG(Salary) (একটি সাবকোয়েরি) এর মাধ্যমে প্রাপ্ত গড় সেলারির তুলনা করছে।
Subquery এবং Nested Query এর পার্থক্য
মোটামুটিভাবে, Subquery এবং Nested Query একে অপরের সমার্থক হলেও, কিছু নির্দিষ্ট কনটেক্সটে তাদের ব্যবহার বা জটিলতা আলাদা হতে পারে:
- Subquery সাধারণত একক বা ছোট স্তরের কোয়েরি হিসেবে ব্যবহৃত হয়।
- Nested Query সাধারণত একাধিক স্তরের (nested layers) কোয়েরি তৈরি করতে ব্যবহৃত হয়, যা বেশি জটিল প্রশ্নের জন্য উপযুক্ত।
Subquery এবং Nested Query এর ব্যবহার
Complex Filtering
Subquery এবং Nested Query মূলত complex filtering এর জন্য ব্যবহৃত হয়, যেখানে একাধিক টেবিলের তথ্য তুলনা বা একসাথে মিলিয়ে দেখার প্রয়োজন হয়।
Performance Consideration
কখনো কখনো Subquery এর ব্যবহার পারফরম্যান্সের ক্ষেত্রে সমস্যার সৃষ্টি করতে পারে, বিশেষ করে যখন সাবকোয়েরি খুব বড় বা জটিল হয়। সেক্ষেত্রে JOIN বা অন্য অপটিমাইজেশন পদ্ধতি ব্যবহার করা হতে পারে।
মারিয়া ডিবি তে Subquery এবং Nested Query এর সঠিক ব্যবহার আপনাকে আরো জটিল ডেটাবেস প্রশ্নগুলি সহজে সমাধান করতে সাহায্য করবে, এবং এগুলি পারফরম্যান্সের দিক থেকেও কার্যকর হতে পারে যদি সঠিকভাবে ব্যবহৃত হয়।
মারিয়া ডিবি (MariaDB) এ অ্যাগ্রিগেট ফাংশন (Aggregate Functions) ডেটাবেসের এক বা একাধিক রেকর্ডের ওপর গণনা করতে ব্যবহৃত হয়। এগুলি সাধারণত গ্রুপিং এবং সন্নিবেশিত (aggregated) ফলাফল পাওয়ার জন্য ব্যবহার করা হয়। COUNT, SUM, AVG, MIN, এবং MAX এর মতো অ্যাগ্রিগেট ফাংশনগুলি খুবই জনপ্রিয় এবং ব্যবহারযোগ্য।
COUNT (গণনা)
COUNT ফাংশনটি একটি কলামের ভেতরে মোট কতটি রেকর্ড বা ভ্যালু রয়েছে তা গণনা করে।
সিঙ্গেল কলাম কাউন্ট:
SELECT COUNT(column_name) FROM table_name;
এই কোডটি column_name কলামে কতটি রেকর্ড আছে তা গননা করবে।
সর্বমোট রেকর্ড কাউন্ট:
SELECT COUNT(*) FROM table_name;
এটি টেবিলের মোট রেকর্ডের সংখ্যা গণনা করবে।
SUM (যোগফল)
SUM ফাংশনটি নির্দিষ্ট একটি কলামের সব মান যোগ করে।
SELECT SUM(column_name) FROM table_name;
এটি column_name কলামের সব মান যোগফল প্রদান করবে।
AVG (গড়)
AVG ফাংশনটি একটি কলামের গড় (average) মান প্রদান করে।
SELECT AVG(column_name) FROM table_name;
এটি column_name কলামের গড় মান বের করবে।
MIN (ন্যূনতম)
MIN ফাংশনটি একটি কলামে সর্বনিম্ন (নিচু) মান প্রদান করে।
SELECT MIN(column_name) FROM table_name;
এটি column_name কলামের সর্বনিম্ন মান বের করবে।
MAX (সর্বাধিক)
MAX ফাংশনটি একটি কলামে সর্বাধিক (উচ্চ) মান প্রদান করে।
SELECT MAX(column_name) FROM table_name;
এটি column_name কলামের সর্বাধিক মান বের করবে।
গ্রুপিংয়ের সাথে অ্যাগ্রিগেট ফাংশন ব্যবহার
আপনি যখন GROUP BY ব্যবহার করেন, তখন অ্যাগ্রিগেট ফাংশনগুলি খুবই কার্যকরী হয়ে ওঠে। GROUP BY ডেটাকে নির্দিষ্ট একটি কলামের ভিত্তিতে গ্রুপ করে এবং এরপর অ্যাগ্রিগেট ফাংশনগুলি গ্রুপের ওপর কাজ করে।
উদাহরণ:
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
এই কোডটি employees টেবিল থেকে প্রতিটি department অনুযায়ী গড় বেতন (AVG) প্রদর্শন করবে।
সারাংশ
মারিয়া ডিবি (MariaDB) তে অ্যাগ্রিগেট ফাংশনগুলি ডেটার ওপর নানা ধরনের গণনা এবং বিশ্লেষণ করতে সাহায্য করে। COUNT, SUM, AVG, MIN, এবং MAX ফাংশনগুলি ডেটাবেস ব্যবস্থাপনায় অত্যন্ত গুরুত্বপূর্ণ এবং এগুলি ব্যবহার করে আপনি দ্রুত এবং কার্যকরী বিশ্লেষণ করতে পারবেন।
GROUP BY এবং HAVING হল SQL এর দুটি শক্তিশালী কমান্ড, যা ডেটাকে গ্রুপ করে এবং নির্দিষ্ট শর্তের ভিত্তিতে ফিল্টার করে। মারিয়া ডিবি (MariaDB)-তে এই দুটি কমান্ড ব্যবহৃত হয় একত্রে, যাতে ডেটার ওপর বিভিন্ন ধরনের আংশিক বা সন্নিবেশিত (aggregated) ফলাফল পাওয়া যায়।
GROUP BY
GROUP BY কমান্ডটি ব্যবহৃত হয় ডেটাকে এক বা একাধিক কলামের মানের ভিত্তিতে গ্রুপ করার জন্য। এটি সাধারণত অ্যাগ্রিগেট ফাংশনগুলির সাথে ব্যবহার করা হয়, যেমন COUNT, SUM, AVG, MIN, বা MAX, যাতে প্রতিটি গ্রুপের ওপর গাণিতিক বিশ্লেষণ করা যায়।
গ্রুপিংয়ের সাধারণ সিঙ্কট্যাক্স:
SELECT column_name, AGGREGATE_FUNCTION(column_name)
FROM table_name
GROUP BY column_name;
এখানে:
column_name: যেটি আপনি গ্রুপ করতে চান।AGGREGATE_FUNCTION: যেমন COUNT, SUM, AVG, MIN, বা MAX।
উদাহরণ:
ধরা যাক, একটি sales টেবিল রয়েছে, যেখানে বিভিন্ন বিভাগের (department) বিক্রির তথ্য রয়েছে। আপনি যদি প্রতিটি বিভাগের মোট বিক্রি জানাতে চান, তবে নিম্নলিখিত SQL কমান্ড ব্যবহার করবেন:
SELECT department, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY department;
এটি প্রতিটি department এর জন্য মোট বিক্রি (sales_amount) যোগফল প্রদর্শন করবে।
HAVING
HAVING কমান্ডটি GROUP BY এর সাথে ব্যবহার করা হয়, তবে এটি শুধুমাত্র গ্রুপগুলোর ওপর শর্ত প্রযোজ্য করতে ব্যবহৃত হয়। যেখানে WHERE ক্লজটি সাধারণ রেকর্ডগুলোর জন্য শর্ত দেয়, HAVING গ্রুপের ওপর শর্ত প্রয়োগ করে।
HAVING এর সিঙ্কট্যাক্স:
SELECT column_name, AGGREGATE_FUNCTION(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;
এখানে:
condition: যে শর্তটি গ্রুপের ওপর প্রয়োগ করতে চান, যেমন SUM বা AVG এর মানের ওপর শর্ত।
উদাহরণ:
ধরা যাক, আপনি শুধু সেই সব বিভাগের বিক্রি দেখতে চান, যেখানে মোট বিক্রির পরিমাণ ৫০,০০০-এর বেশি। তখন আপনার SQL কোডটি হবে:
SELECT department, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY department
HAVING SUM(sales_amount) > 50000;
এটি শুধু সেই বিভাগের তথ্য প্রদর্শন করবে, যেখানে মোট বিক্রির পরিমাণ ৫০,০০০ এর বেশি।
GROUP BY এবং HAVING একত্রে ব্যবহার
GROUP BY এবং HAVING একত্রে ব্যবহার করে, আপনি গ্রুপের ওপর শর্ত আরোপের মাধ্যমে আরো নির্দিষ্ট ফলাফল পেতে পারেন।
উদাহরণ:
ধরা যাক, আপনি employees টেবিল থেকে প্রতিটি department-এর গড় বেতন দেখতে চান, যেখানে গড় বেতন ৪৫,০০০ এর বেশি। তখন SQL কোডটি হবে:
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 45000;
এটি সেই সব department-এর গড় বেতন প্রদর্শন করবে, যেখানে গড় বেতন ৪৫,০০০ এর বেশি।
সারাংশ
GROUP BY এবং HAVING মিলে মারিয়া ডিবি (MariaDB) এ শক্তিশালী ডেটাবেস কুয়েরি তৈরির জন্য ব্যবহৃত হয়। GROUP BY ডেটাকে নির্দিষ্ট কলামের ওপর ভিত্তি করে গ্রুপ করে এবং HAVING কমান্ড গ্রুপের ওপর শর্ত আরোপ করে। এই দুটি কমান্ড একসাথে ব্যবহার করে আপনি ডেটাবেস থেকে খুব নির্দিষ্ট এবং সুনির্দিষ্ট ফলাফল পেতে পারেন।
Read more