কুয়েরি (SQL Query) ব্যবহার শেখার সম্পূর্ণ বাংলা টিউটোরিয়াল

ডেটাবেসে তথ্য সংরক্ষণ করাই শেষ কথা নয়। প্রকৃত কাজ শুরু হয় যখন সেই তথ্য থেকে প্রয়োজনীয় ডেটা বের করতে হয়, নতুন তথ্য যোগ করতে হয়, পুরোনো তথ্য পরিবর্তন করতে হয় বা অপ্রয়োজনীয় তথ্য মুছে ফেলতে হয়। এই সব কাজের জন্য ব্যবহৃত হয় 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 (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;

ফলাফলঃ

DepartmentStudents
CSE120
EEE95
BBA80

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

WHEREHAVING
Grouping-এর আগে কাজ করেGrouping-এর পরে কাজ করে
Aggregate Function ব্যবহার করা যায় নাAggregate Function ব্যবহার করা যায়
সাধারণ FilteringGroup 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_IDNameDepartment_ID
101Rahim1
102Karim2

Departments Table

Department_IDDepartment_Name
1CSE
2EEE

এখন যদি শিক্ষার্থীর নামের সঙ্গে বিভাগের নাম দেখাতে চান, তাহলে JOIN ব্যবহার করতে হবে।

INNER JOIN

শুধুমাত্র উভয় টেবিলে মিল থাকা রেকর্ড দেখায়।

SELECT Students.Name,
Departments.Department_Name
FROM Students
INNER JOIN Departments
ON Students.Department_ID =
Departments.Department_ID;

ফলাফলঃ

NameDepartment
RahimCSE
KarimEEE

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 সাধারণত নিচের ধাপ অনুসরণ করেন।

  1. Requirement বোঝা
  2. Table Structure বিশ্লেষণ
  3. Query লেখা
  4. Query Test করা
  5. Performance পরীক্ষা
  6. Index যোগ করা
  7. Security যাচাই
  8. 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 কমানো

একটি মন্তব্য পোস্ট করুন

নবীনতর পূর্বতন