অপারেটর (Operator) হলো বিশেষ কিছু সংরক্ষিত শব্দ বা চিহ্ন, যা SQLite স্টেটমেন্টের WHERE ক্লজে (এবং অনেক সময় SELECT-এর কলাম তালিকায়) বিভিন্ন শর্ত তৈরি করতে ও গণনা সম্পাদন করতে ব্যবহৃত হয়। অপারেটর ছাড়া ডাটাবেস থেকে আমাদের প্রয়োজনীয় তথ্য সঠিকভাবে ফিল্টার করে আনা কার্যত অসম্ভব। SQLite-তে চার ধরনের অপারেটর রয়েছে: গাণিতিক (Arithmetic), তুলনামূলক (Comparison), যৌক্তিক (Logical) ও বিটভিত্তিক (Bitwise)। আজকের পর্বে আমরা প্রতিটি অপারেটরের বাংলা বর্ণনা, সিনট্যাক্স এবং বাস্তব উদাহরণ দেখব।
পূর্বপ্রস্তুতি:
- SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
- আমরা
company.dbএবংCOMPANYটেবিল ব্যবহার করব। না থাকলে আগের পর্বের ডেটা তৈরি করে নিন। - কোনো অতিরিক্ত প্যাকেজ লাগবে না।
১. গাণিতিক অপারেটর (Arithmetic Operators)
গাণিতিক অপারেটরগুলো সংখ্যার ওপর যোগ, বিয়োগ, গুণ, ভাগ ও মডুলাস অপারেশন চালায়। এগুলো শুধু WHERE নয়, SELECT-এর ভেতরেও ব্যবহার করা যায়।
ধরি, a = 10 এবং b = 20। তাহলে অপারেটরগুলোর ফলাফল নিচের টেবিলে দেওয়া হলো:
| অপারেটর | বর্ণনা | উদাহরণ | ফলাফল |
|---|---|---|---|
+ | যোগ | a + b | 30 |
- | বিয়োগ | a - b | -10 |
* | গুণ | a * b | 200 |
/ | ভাগ | b / a | 2 |
% | মডুলাস (ভাগশেষ) | b % a | 0 |
টেস্ট করার জন্য SELECT ব্যবহার:
sql
SELECT 10 + 20; -- 30 SELECT 10 - 20; -- -10 SELECT 10 * 20; -- 200 SELECT 20 / 10; -- 2 SELECT 20 % 10; -- 0
COMPANY টেবিলের সাথে ব্যবহার: যাদের বেতন ২৫০০০-এর বেশি, তাদের নাম ও বেতন ১০% বাড়িয়ে দেখানো যাক:
sql
SELECT NAME, SALARY, SALARY * 1.1 AS INCREMENTED_SALARY FROM COMPANY WHERE SALARY > 25000;
এটি কর্মচারীর বেতনের সাথে গাণিতিক গুণ প্রয়োগ করে একটি নতুন কলাম দেখাচ্ছে।
২. তুলনামূলক অপারেটর (Comparison Operators)
এই অপারেটরগুলো দুটি মানের মধ্যে সম্পর্ক যাচাই করে। WHERE ক্লজে এগুলো অত্যাবশ্যক। ধরি a = 10, b = 20।
| অপারেটর | বর্ণনা | উদাহরণ (a=10, b=20) | সত্য/মিথ্যা |
|---|---|---|---|
== | দুটি মান সমান কিনা | a == b | মিথ্যা |
= | দুটি মান সমান কিনা | a = b | মিথ্যা |
!= | অসমান কিনা | a != b | সত্য |
<> | অসমান কিনা | a <> b | সত্য |
> | বাম > ডান | a > b | মিথ্যা |
< | বাম < ডান | a < b | সত্য |
>= | বাম >= ডান | a >= b | মিথ্যা |
<= | বাম <= ডান | a <= b | সত্য |
!< | বাম ডানের চেয়ে কম নয় (>=) | a !< b | মিথ্যা |
!> | বাম ডানের চেয়ে বেশি নয় (<=) | a !> b | সত্য |
বাস্তব উদাহরণ COMPANY টেবিলে:
sql
-- ২৫ বছর বয়সী কর্মী SELECT * FROM COMPANY WHERE AGE = 25; -- বেতন ২০০০০ এর বেশি SELECT NAME, SALARY FROM COMPANY WHERE SALARY > 20000; -- যাদের বয়স ২৫ নয় SELECT NAME, AGE FROM COMPANY WHERE AGE <> 25; -- বা WHERE AGE != 25; -- বয়স ২৫-এর চেয়ে কম নয় (>=25) SELECT NAME, AGE FROM COMPANY WHERE AGE !< 25;
লক্ষ্য করুন: SQLite-তে = এবং == একই কাজ করে। তবে == কিছুটা অপ্রচলিত, তাই = ব্যবহারই বেশি প্রচলিত।
৩. যৌক্তিক অপারেটর (Logical Operators)
যৌক্তিক অপারেটর একাধিক শর্ত একত্রে ব্যবহার, প্যাটার্ন মিল, তালিকা যাচাই ইত্যাদি জটিল যুক্তি তৈরি করে।
নিচে গুরুত্বপূর্ণ যৌক্তিক অপারেটরগুলোর তালিকা ও ব্যাখ্যা দেওয়া হলো:
| অপারেটর | বর্ণনা | ||
|---|---|---|---|
| AND | একাধিক শর্ত একসাথে সত্য হতে হবে | ||
| OR | এক বা একাধিক শর্ত সত্য হলে সত্য | ||
| NOT | শর্তের উল্টো অর্থ | ||
| BETWEEN … AND … | একটি রেঞ্জের মধ্যে মান | ||
| IN (val1, val2, …) | তালিকাভুক্ত মানগুলোর মধ্যে আছে কিনা | ||
| NOT IN | তালিকার বাইরের মান | ||
| LIKE | প্যাটার্ন মিল (কেস-ইনসেনসিটিভ; % যেকোনো স্ট্রিং, _ একক অক্ষর) | ||
| GLOB | প্যাটার্ন মিল (কেস-সেনসিটিভ; * যেকোনো, ? একক অক্ষর) | ||
| EXISTS | সাবকোয়েরির সারি থাকলে সত্য | ||
| IS NULL | মান NULL কিনা যাচাই | ||
| IS / IS NOT | যথাক্রমে = ও !=-এর মতো, কিন্তু NULL-এর সাথে তুলনায়ও সঠিক আচরণ করে | ||
| UNIQUE | টেবিলে একটি নির্দিষ্ট মান অনন্য কিনা (প্রায়োগিক ব্যবহার কম) | ||
| ** | ** | দুটি স্ট্রিং জোড়া দেয় (কনক্যাটিনেশন) |
উদাহরণ দিয়ে ব্যাখ্যা (COMPANY টেবিল)
AND: বয়স ২৫-এর বেশি এবং বেতন ২০০০০-এর বেশি
sql
SELECT * FROM COMPANY WHERE AGE > 25 AND SALARY > 20000;
ফলাফল: Paul (32, 20000), Allen (25, 15000 — বয়স ২৫ বেশি নয়, বাদ), David (27, 85000) ইত্যাদি।
OR: বয়স ২৫-এর কম অথবা বেতন ৬০০০০-এর বেশি
sql
SELECT * FROM COMPANY WHERE AGE < 25 OR SALARY > 60000;
BETWEEN: বয়স ২৩ থেকে ২৭ এর মধ্যে
sql
SELECT * FROM COMPANY WHERE AGE BETWEEN 23 AND 27;
IN: নির্দিষ্ট শহরে থাকা কর্মী
sql
SELECT * FROM COMPANY WHERE ADDRESS IN ('Texas', 'Houston');
LIKE: নাম ‘J’ দিয়ে শুরু (যেকোনো কেস)
sql
SELECT * FROM COMPANY WHERE NAME LIKE 'J%';
GLOB: নাম ‘K’ দিয়ে শুরু (কেস-সেনসিটিভ)
sql
SELECT * FROM COMPANY WHERE NAME GLOB 'K*';
IS NULL: ঠিকানা অনুপস্থিত (NULL) থাকলে
sql
SELECT * FROM COMPANY WHERE ADDRESS IS NULL;
|| (স্ট্রিং কনক্যাট):
sql
SELECT NAME || ' works in ' || ADDRESS AS info FROM COMPANY;
আউটপুট হবে: Paul works in California ইত্যাদি।
NOT: শর্ত উল্টানো
sql
SELECT * FROM COMPANY WHERE NOT (AGE = 25); -- বয়স ২৫ নয়
EXISTS: (সাবকোয়েরির উপর নির্ভর করে) — অন্যদের চেয়ে আলাদা; একটি উদাহরণ:
sql
SELECT NAME FROM COMPANY WHERE EXISTS (SELECT * FROM COMPANY WHERE SALARY > 80000);
এটি আসলে সব সারি দেখাবে কারণ সাবকোয়েরি অন্তত একটি রেকর্ড ফেরত দেয় (David)। বাস্তবে EXISTS ব্যবহার করা হয় সম্পর্কিত টেবিলের সাথে, যা পরবর্তীতে শিখব।
৪. বিটভিত্তিক অপারেটর (Bitwise Operators)
বিটভিত্তিক অপারেটর সংখ্যার বাইনারি বিটের ওপর কাজ করে। এগুলো সাধারণত ফ্ল্যাগ বা স্টেটাস ম্যানেজমেন্টে ব্যবহৃত হয়। নিচে ট্রুথ টেবিল দেওয়া হলো:
| p | q | p & q (AND) | p | q (OR) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
ধরা যাক, A = 60 (0011 1100) এবং B = 13 (0000 1101)।
| অপারেটর | বর্ণনা | উদাহরণ | ফলাফল (দশমিক) |
|---|---|---|---|
& | বিট-ভিত্তিক AND | A & B | 12 (0000 1100) |
| | বিট-ভিত্তিক OR | A | B | 61 (0011 1101) |
~ | একের কমপ্লিমেন্ট (টগল) | ~A | -61 (২’স কমপ্লিমেন্টে) |
<< | বামে শিফট | A << 2 | 240 (1111 0000) |
>> | ডানে শিফট | A >> 2 | 15 (0000 1111) |
টেস্ট SELECT:
sql
SELECT 60 & 13; -- 12 SELECT 60 | 13; -- 61 SELECT ~60; -- -61 SELECT 60 << 2; -- 240 SELECT 60 >> 2; -- 15
আমাদের COMPANY টেবিলে বর্তমানে এ ধরনের বিট অপারেশনের তেমন প্রয়োগ নেই। তবে ধরুন, একটি কলাম PERMISSIONS (পূর্ণসংখ্যা) আছে যা বিভিন্ন বিট সেট ধরে রাখে। তাহলে নির্দিষ্ট বিট চেক করতে আমরা & ব্যবহার করি:
sql
SELECT NAME FROM USERS WHERE (PERMISSIONS & 4) != 0; -- তৃতীয় বিট চালু থাকলে
এটি পরে টেবিল ডিজাইন করার সময় কাজে লাগবে।
৫. সম্পূর্ণ অনুশীলন (নমুনা সেশন)
টার্মিনাল খুলে নিচের ধাপগুলো অনুসরণ করুন:
bash
sqlite3 company.db
sql
.header on .mode column -- গাণিতিক অপারেটর SELECT NAME, SALARY, SALARY * 0.9 AS DISCOUNTED FROM COMPANY WHERE AGE > 25; -- তুলনামূলক SELECT NAME FROM COMPANY WHERE AGE != 25; -- লজিক্যাল SELECT NAME, AGE, SALARY FROM COMPANY WHERE AGE BETWEEN 23 AND 27 AND SALARY > 30000; -- বিটওয়াইজ (টেস্ট) SELECT 60 & 13 AS bitwise_and; -- স্ট্রিং কনক্যাট SELECT NAME || ' - ' || ADDRESS AS Details FROM COMPANY;
ডিরেক্টরি স্ট্রাকচার: শুধু company.db ফাইল। কোনো অতিরিক্ত প্যাকেজের প্রয়োজন নেই।
৬. গুরুত্বপূর্ণ টিপস
- কেস সেনসিটিভ:
LIKEকেস-ইনসেনসিটিভ (ছোট-বড় অক্ষর একই), কিন্তুGLOBকেস-সেনসিটিভ। তাই নির্ভুল প্যাটার্ন মেলাতে GLOB ব্যবহারে সতর্ক থাকুন। - NULL-এর সাথে তুলনা:
= NULLসবসময় মিথ্যা; NULL চেক করতেIS NULLবাIS NOT NULLব্যবহার করুন। - অগ্রাধিকার: অপারেটরের প্রাধান্য (precedence) রয়েছে। উদাহরণ:
*/%-এর প্রাধান্য+--এর চেয়ে বেশি। জটিল শর্তে ব্র্যাকেট দিয়ে নিশ্চিত করুন। - বিট অপারেটরের ব্যবহার: বিট অপারেটর শুধুমাত্র পূর্ণসংখ্যায় কাজ করে। REAL টাইপের ওপর ব্যবহার করলে ফলাফল অপ্রত্যাশিত হতে পারে।
- || বিকল্প: SQLite-তে কনক্যাটিনেশন করতে
concat()ফাংশন নেই;||ব্যবহার করুন।
পরবর্তী পর্বে
আমরা WHERE ক্লজ ও LIKE, GLOB, IN, BETWEEN-এর আরও গভীরে গিয়ে শিখব জটিল ডেটা ফিল্টারিং। একই সাথে LIMIT ও ORDER BY দিয়ে ফলাফল সাজানো ও সীমিত করা শিখব।
লেখকের কথা: প্রতিটি অপারেটর নিজে টাইপ করে চালান – এতে আত্মবিশ্বাস বাড়বে। বাংলায় প্রযুক্তি শেখার এই উদ্যোগ আপনার ভালো লাগলে শেয়ার করুন, এবং সিরিজের কোনো পর্ব মিস না করতে ToLearnTeam.com ব্লগে সাবস্ক্রাইব করুন। প্রশ্ন ও মন্তব্য জানাতে দ্বিধা করবেন না!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
