ডেটাবেসে তথ্য সংরক্ষণ করাই শেষ কথা নয়। প্রকৃত কাজ শুরু হয় যখন সেই তথ্য থেকে প্রয়োজনীয় ডেটা বের করতে হয়, নতুন তথ্য যোগ করতে হয়, পুরোনো তথ্য পরিবর্তন করতে হয় বা অপ্রয়োজনীয় তথ্য মুছে ফেলতে হয়। এই সব কাজের জন্য ব্যবহৃত হয় SQL Query।
বর্তমান সময়ে প্রায় সব Relational Database Management System (RDBMS) যেমন MySQL, PostgreSQL, Microsoft SQL Server এবং Oracle Database-এ SQL Query ব্যবহার করা হয়। একজন Backend Developer, Data Analyst, Software Engineer বা Database Administrator-এর জন্য SQL Query জানা একটি মৌলিক দক্ষতা।
পোস্ট সূচিপত্র
SQL Query কী?
SQL Query কেন গুরুত্বপূর্ণ?
SQL Query-এর প্রধান ধরন
SQL Syntax
SELECT Statement
নির্দিষ্ট কলাম নির্বাচন
FROM Clause
WHERE Clause
Comparison Operator
AND Operator
OR Operator
NOT Operator
ORDER BY
LIMIT
Alias ব্যবহার
SQL Query লেখার নিয়ম
INSERT Statement
একাধিক রেকর্ড যোগ করা
UPDATE Statement
DELETE Statement
পুরো টেবিলের তথ্য মুছে ফেলা
Aggregate Functions
GROUP BY
HAVING Clause
LIKE Operator
BETWEEN Operator
IN Operator
IS NULL
IS NOT NULL
WHERE বনাম HAVING
SQL Query লেখার সময় সাধারণ ভুল
বাস্তব উদাহরণ
JOIN কী?
Subquery কী?
EXISTS
Views কী?
Index কী?
Query Optimization
SQL Query Best Practices
SQL Comment
Transaction
বাস্তব উদাহরণ
সাধারণ ভুল
Common Table Expression (CTE)
Window Function
Stored Procedure
SQL Security Best Practices
SQL Query Workflow
SQL Query শেখার রোডম্যাপ
FAQ
SQL Query কী?
SQL (Structured Query Language) হলো ডেটাবেসের সঙ্গে যোগাযোগ করার একটি মানসম্মত ভাষা, আর Query হলো SQL-এ লেখা এমন একটি নির্দেশ (Instruction), যার মাধ্যমে ডেটাবেস থেকে তথ্য সংগ্রহ, সংযোজন, পরিবর্তন বা অপসারণ করা হয়। সহজভাবে বলতে গেলে, Query হলো ডেটাবেসকে দেওয়া একটি প্রশ্ন বা নির্দেশ।
SQL Query কেন গুরুত্বপূর্ণ?
SQL Query-এর মাধ্যমে আপনিঃ
- নির্দিষ্ট তথ্য খুঁজে বের করতে পারবেন
- নতুন তথ্য সংরক্ষণ করতে পারবেন
- ভুল তথ্য সংশোধন করতে পারবেন
- অপ্রয়োজনীয় তথ্য মুছে ফেলতে পারবেন
- রিপোর্ট তৈরি করতে পারবেন
- বিশ্লেষণমূলক তথ্য (Analytics) তৈরি করতে পারবেন
SQL Query-এর প্রধান ধরন
SQL Query সাধারণত চারটি প্রধান শ্রেণিতে বিভক্ত।
১. DQL (Data Query Language)
তথ্য দেখার জন্য। উদাহরণঃ
- SELECT
২. DML (Data Manipulation Language)
ডেটা পরিবর্তনের জন্য।
- INSERT
- UPDATE
- DELETE
৩. DDL (Data Definition Language)
ডেটাবেসের কাঠামো তৈরির জন্য।
- CREATE
- ALTER
- DROP
- TRUNCATE
৪. DCL (Data Control Language)
নিরাপত্তা ও অনুমতির জন্য।
- GRANT
- REVOKE
SQL Syntax
প্রায় সব SQL Query একটি নির্দিষ্ট কাঠামো অনুসরণ করে। উদাহরণঃ
SELECT column_name
FROM table_name
WHERE condition;এখানেঃ
- SELECT → কোন তথ্য চাই
- FROM → কোন টেবিল থেকে
- WHERE → কোন শর্তে
SELECT Statement
SELECT হলো সবচেয়ে বেশি ব্যবহৃত SQL Command। এটি ডেটাবেস থেকে তথ্য দেখানোর জন্য ব্যবহৃত হয়। উদাহরণঃ
SELECT *
FROM Students;এখানে * অর্থ সব কলাম।
নির্দিষ্ট কলাম নির্বাচন
SELECT Name, Email
FROM Students;এখানে শুধুমাত্র Name এবং Email দেখানো হবে।
FROM Clause
FROM নির্দেশ করে কোন টেবিল থেকে তথ্য নেওয়া হবে।
SELECT Name
FROM Employees;WHERE Clause
WHERE ব্যবহার করা হয় নির্দিষ্ট শর্ত অনুযায়ী তথ্য বের করতে।
SELECT *
FROM Students
WHERE Department = 'CSE';এখানে শুধুমাত্র CSE বিভাগের শিক্ষার্থীদের তথ্য দেখানো হবে।
Comparison Operator
WHERE Clause-এর সঙ্গে সাধারণত নিচের Operator ব্যবহার করা হয়।
- =
- <
=
- <=
- <>
- !=
উদাহরণঃ
SELECT *
FROM Products
WHERE Price > 1000;AND Operator
একাধিক শর্ত একসঙ্গে ব্যবহার করতেঃ
SELECT *
FROM Students
WHERE Department='CSE'
AND Semester=4;OR Operator
যে কোনো একটি শর্ত পূরণ হলেই ফলাফল দেখাবে।
SELECT *
FROM Students
WHERE Department='CSE'
OR Department='EEE';NOT Operator
শর্তের বিপরীত ফলাফল দেখাতে ব্যবহৃত হয়।
SELECT *
FROM Students
WHERE NOT Department='CSE';ORDER BY
তথ্য সাজানোর জন্য ORDER BY ব্যবহৃত হয়।
Ascending (ছোট থেকে বড়):
SELECT *
FROM Products
ORDER BY Price ASC;Descending (বড় থেকে ছোট):
SELECT *
FROM Products
ORDER BY Price DESC;LIMIT
LIMIT ব্যবহার করে নির্দিষ্ট সংখ্যক রেকর্ড দেখানো যায়।
SELECT *
FROM Students
LIMIT 10;এখানে প্রথম ১০টি রেকর্ড দেখানো হবে।
Alias ব্যবহার
Alias-এর মাধ্যমে কলামের নাম পরিবর্তন করে দেখানো যায়।
SELECT Name AS Student_Name
FROM Students;SQL Query লেখার নিয়ম
- SQL Keyword সাধারণত বড় হাতের অক্ষরে লেখা হয় (SELECT, WHERE, ORDER BY)।
- Table ও Column-এর নাম অর্থবহ হওয়া উচিত।
- Query পরিষ্কার ও সহজবোধ্য রাখুন।
- অপ্রয়োজনীয়ভাবে
SELECT *ব্যবহার করবেন না।
বাস্তব উদাহরণ
ধরুন একটি ই-কমার্স ওয়েবসাইটে আপনি ৫,০০০ টাকার বেশি দামের সব পণ্য দেখতে চান।
SELECT Product_Name, Price
FROM Products
WHERE Price > 5000
ORDER BY Price DESC;এই Query শুধু প্রয়োজনীয় তথ্য দ্রুত দেখাবে।
INSERT Statement
ডেটাবেসে নতুন তথ্য যোগ করার জন্য INSERT ব্যবহার করা হয়।
Syntax
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);উদাহরণ
INSERT INTO Students (Student_ID, Name, Department)
VALUES (101, 'Rahim', 'CSE');এখানে Students টেবিলে একটি নতুন রেকর্ড যোগ করা হয়েছে।
একাধিক রেকর্ড যোগ করা
একসঙ্গে একাধিক তথ্যও সংরক্ষণ করা যায়।
INSERT INTO Students (Student_ID, Name, Department)
VALUES
(102,'Karim','EEE'),
(103,'Sohan','BBA'),
(104,'Nadia','CSE');UPDATE Statement
সংরক্ষিত তথ্য পরিবর্তন করতে UPDATE ব্যবহার করা হয়।
Syntax
UPDATE table_name
SET column_name = value
WHERE condition;উদাহরণ
UPDATE Students
SET Department='CSE'
WHERE Student_ID=102;এখানে Student_ID 102-এর বিভাগের নাম পরিবর্তন করা হয়েছে।
গুরুত্বপূর্ণ:
WHEREব্যবহার না করলে টেবিলের সব রেকর্ড পরিবর্তিত হয়ে যাবে।
DELETE Statement
রেকর্ড মুছে ফেলার জন্য DELETE ব্যবহার করা হয়।
উদাহরণ
DELETE FROM Students
WHERE Student_ID=103;পুরো টেবিলের তথ্য মুছে ফেলা
DELETE FROM Students;এটি সব রেকর্ড মুছে ফেলবে, তবে টেবিল থাকবে।
DISTINCT
Duplicate ফলাফল বাদ দিতে DISTINCT ব্যবহার করা হয়।
SELECT DISTINCT Department
FROM Students;যদি ১০০ জন CSE বিভাগের শিক্ষার্থী থাকে, তবুও ফলাফলে CSE একবারই দেখাবে।
Aggregate Functions
ডেটা বিশ্লেষণের জন্য SQL-এ কিছু বিশেষ Function রয়েছে।
COUNT()
মোট রেকর্ড গণনা করে।
SELECT COUNT(*)
FROM Students;SUM()
সংখ্যার যোগফল বের করে।
SELECT SUM(Salary)
FROM Employees;AVG()
গড় বের করে।
SELECT AVG(Salary)
FROM Employees;MAX()
সবচেয়ে বড় মান বের করে।
SELECT MAX(Salary)
FROM Employees;MIN()
সবচেয়ে ছোট মান বের করে।
SELECT MIN(Salary)
FROM Employees;GROUP BY
একই ধরনের তথ্যকে গ্রুপ করার জন্য GROUP BY ব্যবহার করা হয়।
SELECT Department,
COUNT(*)
FROM Students
GROUP BY Department;ফলাফলঃ
| Department | Students |
|---|---|
| CSE | 120 |
| EEE | 95 |
| BBA | 80 |
HAVING Clause
GROUP BY-এর পরে শর্ত প্রয়োগ করতে HAVING ব্যবহার করা হয়।
SELECT Department,
COUNT(*)
FROM Students
GROUP BY Department
HAVING COUNT(*) > 100;এখানে শুধুমাত্র ১০০ জনের বেশি শিক্ষার্থী রয়েছে এমন বিভাগ দেখানো হবে।
LIKE Operator
আংশিক মিল (Pattern Matching) খুঁজতে LIKE ব্যবহার করা হয়।
শুরুতে মিল
SELECT *
FROM Students
WHERE Name LIKE 'R%';R দিয়ে শুরু হওয়া সব নাম দেখাবে।
শেষে মিল
SELECT *
FROM Students
WHERE Name LIKE '%n';n দিয়ে শেষ হওয়া নাম দেখাবে।
মাঝখানে মিল
SELECT *
FROM Students
WHERE Name LIKE '%im%';যেসব নামে "im" রয়েছে সেগুলো দেখাবে।
BETWEEN Operator
নির্দিষ্ট সীমার মধ্যে তথ্য বের করতে BETWEEN ব্যবহার করা হয়।
SELECT *
FROM Products
WHERE Price BETWEEN 1000 AND 5000;IN Operator
একাধিক নির্দিষ্ট মানের জন্য ব্যবহার করা হয়।
SELECT *
FROM Students
WHERE Department IN ('CSE','EEE','BBA');IS NULL
যেসব কলামে NULL রয়েছে, সেগুলো খুঁজতে:
SELECT *
FROM Employees
WHERE Phone IS NULL;IS NOT NULL
যেসব কলামে তথ্য আছেঃ
SELECT *
FROM Employees
WHERE Phone IS NOT NULL;WHERE বনাম HAVING
| WHERE | HAVING |
| Grouping-এর আগে কাজ করে | Grouping-এর পরে কাজ করে |
| Aggregate Function ব্যবহার করা যায় না | Aggregate Function ব্যবহার করা যায় |
| সাধারণ Filtering | Group Filtering |
SQL Query লেখার সময় সাধারণ ভুল
WHERE বাদ দেওয়া
UPDATE Students
SET Department='CSE';এটি টেবিলের সব রেকর্ড পরিবর্তন করবে।
DELETE-এ WHERE না দেওয়া
DELETE FROM Students;এটি পুরো টেবিলের তথ্য মুছে ফেলবে।
NULL তুলনা ভুলভাবে করা
ভুলঃ
WHERE Phone = NULL;সঠিকঃ
WHERE Phone IS NULL;বাস্তব উদাহরণ
ধরুন একটি অনলাইন দোকানে ৫,০০০ টাকার বেশি মূল্যের পণ্যের সংখ্যা জানতে চান।
SELECT COUNT(*)
FROM Products
WHERE Price > 5000;অথবা প্রতিটি ক্যাটাগরিতে কতটি পণ্য রয়েছেঃ
SELECT Category,
COUNT(*)
FROM Products
GROUP BY Category;
JOIN কী?
বাস্তব ডেটাবেসে তথ্য সাধারণত একাধিক টেবিলে সংরক্ষণ করা হয়। সেই টেবিলগুলোর তথ্য একত্রে দেখানোর জন্য JOIN ব্যবহার করা হয়।
উদাহরণঃ
Students Table
Student_ID Name Department_ID 101 Rahim 1 102 Karim 2
Departments Table
Department_ID Department_Name 1 CSE 2 EEE
এখন যদি শিক্ষার্থীর নামের সঙ্গে বিভাগের নাম দেখাতে চান, তাহলে JOIN ব্যবহার করতে হবে।
INNER JOIN
শুধুমাত্র উভয় টেবিলে মিল থাকা রেকর্ড দেখায়।
SELECT Students.Name,
Departments.Department_Name
FROM Students
INNER JOIN Departments
ON Students.Department_ID =
Departments.Department_ID;
ফলাফলঃ
Name Department Rahim CSE Karim EEE
LEFT JOIN
বাম পাশের (Left Table) সব রেকর্ড দেখাবে।
মিল না থাকলে ডান পাশের তথ্য NULL হবে।
SELECT Students.Name,
Departments.Department_Name
FROM Students
LEFT JOIN Departments
ON Students.Department_ID=
Departments.Department_ID;
RIGHT JOIN
ডান পাশের টেবিলের সব তথ্য দেখাবে।
SELECT Students.Name,
Departments.Department_Name
FROM Students
RIGHT JOIN Departments
ON Students.Department_ID=
Departments.Department_ID;
FULL OUTER JOIN
উভয় টেবিলের সব তথ্য দেখায়। যেখানে মিল নেই, সেখানে NULL দেখানো হয়।
দ্রষ্টব্য: MySQL সরাসরি FULL OUTER JOIN সমর্থন করে না। এটি LEFT JOIN এবং RIGHT JOIN-এর সঙ্গে UNION ব্যবহার করে করা হয়।
SELF JOIN
একই টেবিলকে নিজের সঙ্গে JOIN করাকে SELF JOIN বলে। উদাহরণঃ
Employee Table-এ Manager_ID থাকলে Manager-এর নাম বের করতে SELF JOIN ব্যবহার করা যায়।
UNION
দুটি Query-এর ফলাফল একত্রিত করতে UNION ব্যবহৃত হয়।
SELECT Name
FROM Teachers
UNION
SELECT Name
FROM Students;
UNION Duplicate বাদ দেয়।
UNION ALL
Duplicate-সহ সব তথ্য দেখায়।
SELECT Name
FROM Teachers
UNION ALL
SELECT Name
FROM Students;
Subquery কী?
একটি Query-এর ভিতরে আরেকটি Query থাকলে তাকে Subquery বলে। উদাহরণঃ
গড় বেতনের চেয়ে বেশি বেতন পাওয়া কর্মীদের তালিকা।
SELECT Name
FROM Employees
WHERE Salary >
(
SELECT AVG(Salary)
FROM Employees
);
EXISTS
যদি Subquery কোনো রেকর্ড ফেরত দেয়, তাহলে EXISTS সত্য (TRUE) হয়।
SELECT Name
FROM Customers
WHERE EXISTS
(
SELECT *
FROM Orders
WHERE Customers.Customer_ID=
Orders.Customer_ID
);
Views কী?
View হলো একটি Virtual Table।
এটি মূল ডেটা সংরক্ষণ করে না।
বরং Query-এর ফলাফল দেখায়।
CREATE VIEW Student_View AS
SELECT Name, Email
FROM Students;
View ব্যবহারঃ
SELECT *
FROM Student_View;
View-এর সুবিধা
- নিরাপত্তা বৃদ্ধি
- জটিল Query সহজ করা
- পুনঃব্যবহারযোগ্য Query
- রিপোর্ট তৈরি সহজ
Index কী?
Index হলো এমন একটি ডেটা স্ট্রাকচার যা Search দ্রুত করে।
CREATE INDEX idx_email
ON Students(Email);
Query Optimization
দ্রুত Query চালানোর জন্য কিছু গুরুত্বপূর্ণ নিয়ম:
১. SELECT * ব্যবহার কমান
ভুলঃ
SELECT *
FROM Students;
সঠিকঃ
SELECT Name,
Email
FROM Students;
২. WHERE ব্যবহার করুন
শুধু প্রয়োজনীয় তথ্য আনুন।
৩. Index ব্যবহার করুন
যেসব কলামে Search বেশি হয়ঃ
- Email
- Username
- Product_ID
- Order_Date
৪. JOIN সীমিত রাখুন
অপ্রয়োজনীয়ভাবে অনেক Table JOIN করলে Query ধীর হয়ে যায়।
৫. Subquery-এর পরিবর্তে JOIN ব্যবহার
অনেক ক্ষেত্রে JOIN দ্রুত কাজ করে।
SQL Query Best Practices
- Keyword বড় হাতের অক্ষরে লিখুন।
- Table Name অর্থবহ রাখুন।
- Alias ব্যবহার করুন।
- Comment লিখুন।
- Query Indentation ঠিক রাখুন।
- Duplicate Query এড়িয়ে চলুন।
- Transaction ব্যবহার করুন।
- Production Database-এ DELETE চালানোর আগে WHERE যাচাই করুন।
SQL Comment
Single Line:
-- Student List
Multiple Line:
/*
Student Report
Created By Admin
*/
Transaction
একাধিক Query একসঙ্গে নিরাপদভাবে চালাতে Transaction ব্যবহার করা হয়।
START TRANSACTION;
UPDATE Accounts
SET Balance=Balance-1000
WHERE ID=1;
UPDATE Accounts
SET Balance=Balance+1000
WHERE ID=2;
COMMIT;
যদি সমস্যা হয়ঃ
ROLLBACK;
বাস্তব উদাহরণ
একটি ই-কমার্স সাইটে Orders এবং Customers Table থেকে অর্ডার তথ্য বের করাঃ
SELECT Customers.Name,
Orders.Order_Date,
Orders.Total
FROM Customers
INNER JOIN Orders
ON Customers.Customer_ID=
Orders.Customer_ID;
সাধারণ ভুল
- JOIN Condition ভুল লেখা
- WHERE বাদ দেওয়া
- SELECT * ব্যবহার করা
- Index না ব্যবহার করা
- Subquery অতিরিক্ত ব্যবহার করা
- Duplicate UNION
- View আপডেট করার সীমাবদ্ধতা না জানা
Common Table Expression (CTE)
CTE বা Common Table Expression হলো একটি অস্থায়ী Result Set, যা জটিল Query-কে সহজ ও পাঠযোগ্য করে।
Syntax
WITH DepartmentCount AS
(
SELECT Department,
COUNT(*) AS Total
FROM Students
GROUP BY Department
)
SELECT *
FROM DepartmentCount;
CTE-এর সুবিধা
- জটিল Query সহজ হয়
- কোড পুনঃব্যবহার করা যায়
- Nested Subquery কম লাগে
- Debug করা সহজ
Window Function
Window Function প্রতিটি সারির জন্য হিসাব করে, কিন্তু GROUP BY-এর মতো রেকর্ড একত্রিত করে না।
ROW_NUMBER()
SELECT Name,
Salary,
ROW_NUMBER() OVER
(
ORDER BY Salary DESC
) AS Rank
FROM Employees;
RANK()
একই মানের ক্ষেত্রে একই র্যাঙ্ক দেয়।
SELECT Name,
Salary,
RANK() OVER
(
ORDER BY Salary DESC
)
FROM Employees;
DENSE_RANK()
ক্রমিক র্যাঙ্ক দেয়, তবে সংখ্যা বাদ যায় না।
Stored Procedure
Stored Procedure হলো ডেটাবেসে সংরক্ষিত SQL Statements-এর একটি সেট।
উদাহরণ
CREATE PROCEDURE StudentList()
BEGIN
SELECT *
FROM Students;
END;
ব্যবহারঃ
CALL StudentList();
সুবিধা
- একই Query বারবার লেখার প্রয়োজন হয় না
- নিরাপত্তা বৃদ্ধি পায়
- পারফরম্যান্স উন্নত হয়
- Maintenance সহজ হয়
SQL Security Best Practices
ডেটাবেসের নিরাপত্তা নিশ্চিত করতে নিচের বিষয়গুলো অনুসরণ করুন।
১. SQL Injection প্রতিরোধ
সবসময় Parameterized Query বা Prepared Statement ব্যবহার করুন।
ভুলঃ
SELECT *
FROM Users
WHERE Username=' " + username + " ';
সঠিক পদ্ধতিঃ
- Prepared Statement
- Parameter Binding
- ORM Framework
২. Least Privilege Principle
প্রতিটি ব্যবহারকারীকে কেবল প্রয়োজনীয় অনুমতি দিন।
৩. Backup Policy
- দৈনিক Backup
- সাপ্তাহিক Full Backup
- অফসাইট Backup
- নিয়মিত Restore Test
৪. Encryption
সংবেদনশীল তথ্য যেমনঃ
- Password
- NID
- Credit Card
- API Key
Hash বা Encryption ব্যবহার করে সংরক্ষণ করুন।
SQL Query Workflow
একজন SQL Developer সাধারণত নিচের ধাপ অনুসরণ করেন।
- Requirement বোঝা
- Table Structure বিশ্লেষণ
- Query লেখা
- Query Test করা
- Performance পরীক্ষা
- Index যোগ করা
- Security যাচাই
- Production-এ ব্যবহার
SQL Query শেখার রোডম্যাপ
আপনি যদি SQL-এ দক্ষ হতে চান, তাহলে এই ক্রম অনুসরণ করুনঃ
- Database Basics
- SQL Syntax
- SELECT
- WHERE
- ORDER BY
- INSERT
- UPDATE
- DELETE
- Aggregate Functions
- GROUP BY
- HAVING
- JOIN
- Subquery
- UNION
- View
- Index
- Stored Procedure
- Trigger
- Transaction
- CTE
- Window Functions
- Query Optimization
FAQ
১. SQL Query কী?
SQL Query হলো ডেটাবেসে তথ্য খোঁজা, যোগ করা, পরিবর্তন করা বা মুছে ফেলার জন্য ব্যবহৃত SQL নির্দেশনা।
২. SELECT এবং WHERE-এর মধ্যে পার্থক্য কী?
SELECT নির্ধারণ করে কোন তথ্য দেখানো হবে, আর WHERE নির্ধারণ করে কোন শর্তে তথ্য নির্বাচন করা হবে।
৩. JOIN কেন ব্যবহার করা হয়?
একাধিক টেবিলের সম্পর্কযুক্ত তথ্য একসঙ্গে দেখানোর জন্য JOIN ব্যবহার করা হয়।
৪. Subquery কী?
একটি Query-এর ভেতরে আরেকটি Query থাকলে তাকে Subquery বলা হয়।
৫. GROUP BY ও HAVING-এর কাজ কী?
GROUP BY একই ধরনের তথ্যকে গ্রুপ করে এবং HAVING সেই গ্রুপগুলোর ওপর শর্ত প্রয়োগ করে।
৬. SQL Query দ্রুত করার উপায় কী?
- সঠিক Index ব্যবহার
- অপ্রয়োজনীয়
SELECT * এড়ানো - WHERE ব্যবহার
- Query Optimization
- অপ্রয়োজনীয় JOIN কমানো