ডাটাবেস থেকে নির্দিষ্ট তথ্য বের করতে আমরা প্রায়ই একাধিক শর্ত ব্যবহার করি। যেমন “যাদের বয়স ২৫-এর বেশি এবং বেতন ৫০,০০০-এর উপরে” অথবা “যারা টেক্সাস কিংবা নিউইয়র্ক শহরে থাকে”। SQLite-তে এই ধরনের জটিল শর্ত তৈরির জন্য আমাদের প্রধান হাতিয়ার হলো AND ও OR – কনজাংকটিভ অপারেটর। এরা একটি WHERE ক্লজের ভেতরে একাধিক তুলনামূলক শর্তকে জুড়ে দিয়ে একটি যৌক্তিক ফলাফল (TRUE/FALSE) তৈরি করে। আজকের পর্বে আমরা এই দুটি অপারেটরের সিনট্যাক্স, ব্যবহারিক উদাহরণ, এবং কিছু গুরুত্বপূর্ণ কৌশল বিস্তারিতভাবে শিখব।
পূর্বপ্রস্তুতি
- SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
- আমাদের পরিচিত
company.dbডাটাবেস ওCOMPANYটেবিল ব্যবহার করব। যদি না থাকে, নিচের ধাপে তৈরি করুন:
bash
sqlite3 company.db
sql
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00); INSERT INTO COMPANY VALUES (3, 'Teddy', 23, 'Norway', 20000.00); INSERT INTO COMPANY VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00); INSERT INTO COMPANY VALUES (5, 'David', 27, 'Texas', 85000.00); INSERT INTO COMPANY VALUES (6, 'Kim', 22, 'South-Hall', 45000.00); INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00);
- আউটপুট পরিষ্কার দেখতে প্রম্পটে
.header onএবং.mode columnদিয়ে নিন।
১. AND অপারেটর – সব শর্তই সত্য হতে হবে
AND অপারেটর ব্যবহার করা হয় যখন সকল শর্ত একইসাথে সত্য হতে হবে। WHERE ক্লজে একাধিক শর্ত AND দিয়ে যুক্ত করলে, প্রতিটি শর্ত সত্য হলেই কেবল সেই সারিটি ফলাফলে অন্তর্ভুক্ত হয়।
সিনট্যাক্স:
sql
SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND ... conditionN;
আপনি প্রয়োজনমত যেকোনো সংখ্যক শর্ত AND দিয়ে সংযুক্ত করতে পারেন।
উদাহরণ: যেসব কর্মীর বয়স ২৫ বা তার বেশি এবং বেতন ৬৫,০০০ বা তার বেশি, তাদের দেখতে:
sql
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
এখানে Mark ও David উভয় শর্ত পূরণ করে। Paul-এর বয়স ৩২ কিন্তু বেতন ২০,০০০ – সে দ্বিতীয় শর্ত পূরণ করতে পারেনি। Allen-এর বয়স ২৫ কিন্তু বেতন কম।
আরেকটি উদাহরণ: টেক্সাসে থাকা এবং বয়স ২৫-এর কম?
sql
SELECT * FROM COMPANY WHERE ADDRESS = 'Texas' AND AGE < 25;
টেক্সাসে Allen (AGE 25) এবং David (AGE 27) – কেউই বয়স ২৫-এর কম নয়, তাই ফলাফল খালি আসবে।
২. OR অপারেটর – যেকোনো একটি শর্ত সত্য হলেই চলবে
OR অপারেটর ব্যবহার করা হয় যখন যেকোনো একটি শর্ত সত্য হলেই সারিটি ফলাফলে আসবে। একাধিক শর্ত OR দিয়ে যুক্ত করলে, যদি একটিও শর্ত সত্য হয়, সারিটি প্রদর্শিত হবে।
সিনট্যাক্স:
sql
SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR ... conditionN;
উদাহরণ: যাদের বয়স ২৫ বা তার বেশি অথবা বেতন ৬৫,০০০ বা তার বেশি:
sql
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Paul ও Allen বয়সের শর্তে এসেছে (যদিও বেতন কম), Mark ও David উভয় শর্তেই। Teddy, Kim, James বাদ পড়েছে।
আরেকটি উদাহরণ: ক্যালিফোর্নিয়া অথবা টেক্সাসের কর্মী:
sql
SELECT NAME, ADDRESS FROM COMPANY WHERE ADDRESS = 'California' OR ADDRESS = 'Texas';
৩. AND ও OR একসাথে ব্যবহার – ব্র্যাকেটের গুরুত্ব
যখন AND ও OR একই WHERE ক্লজে ব্যবহার করবেন, তখন SQLite-তে AND অপারেটরের প্রাধান্য OR-এর চেয়ে বেশি। অর্থাৎ, A OR B AND C মানে A OR (B AND C)। জটিল শর্ত পরিষ্কার রাখতে ও ভুল এড়াতে ব্র্যাকেট (parenthesis) ব্যবহার করা অত্যন্ত জরুরি।
উদাহরণ: যারা (টেক্সাস বা ক্যালিফোর্নিয়া) এবং বেতন ২০,০০০-এর বেশি:
sql
SELECT * FROM COMPANY WHERE (ADDRESS = 'Texas' OR ADDRESS = 'California') AND SALARY > 20000;
ফলাফল: David (Texas, 85k) – কারণ Paul California হলেও SALARY = 20000, যা 20000-এর বেশি নয়।
যদি ব্র্যাকেট না দিতেন: WHERE ADDRESS = 'Texas' OR ADDRESS = 'California' AND SALARY > 20000, সেটি হতো ADDRESS = 'Texas' OR (ADDRESS = 'California' AND SALARY > 20000) – এটি Allen (Texas, 15k)-কেও দেখাতো, যা আমাদের উদ্দেশ্য নয়।
৪. UPDATE ও DELETE-তে AND/OR
এই অপারেটরগুলো শুধু SELECT-এ সীমাবদ্ধ নয়, বরং UPDATE বা DELETE-তেও সুনির্দিষ্ট শর্ত তৈরি করতে ব্যবহার হয়।
UPDATE:
sql
UPDATE COMPANY SET SALARY = 90000 WHERE NAME = 'David' AND ADDRESS = 'Texas';
DELETE:
sql
DELETE FROM COMPANY WHERE AGE < 23 OR SALARY <= 10000;
কিন্তু সাবধান! WHERE না দিলে বা শর্ত ভুল হলে সম্পূর্ণ টেবিলের ডেটা পরিবর্তিত বা মুছে যেতে পারে।
৫. প্র্যাকটিক্যাল টিপস ও সাধারণ ভুল
- একাধিক AND/OR মিশ্রণে সর্বদা ব্র্যাকেট ব্যবহার করুন – এতে আপনার উদ্দেশ্য স্পষ্ট থাকে এবং কোয়েরি বুঝতে সুবিধা হয়।
- বড় লজিক্যাল এক্সপ্রেশন ভেঙে ছোট ছোট অংশে লিখুন – প্রয়োজনে একাধিক লাইনে।
- IN অপারেটর ব্যবহার করুন যখন একই কলামের একাধিক মানের সাথে OR চেক করতে হয়:sqlWHERE ADDRESS IN (‘Texas’, ‘California’)এটি
ADDRESS = 'Texas' OR ADDRESS = 'California'এর চেয়ে পরিষ্কার ও দ্রুততর। - NULL-এর সাথে তুলনা করতে IS NULL ব্যবহার করুন,
= NULLনয়। AND/OR-এর সাথে মিশিয়েWHERE AGE IS NOT NULL AND SALARY > 0ইত্যাদি দিতে হবে। - কোয়েরি পারফরম্যান্স: AND-যুক্ত শর্তে যদি কোনো কলামে ইনডেক্স থাকে, তবে SQLite দ্রুত ফলাফল দিতে পারে। অতিরিক্ত OR শর্ত অনেক সময় ইনডেক্স ব্যবহারে বাধা দেয়।
৬. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
এই পর্বের অনুশীলনের জন্য শুধুমাত্র company.db ফাইলটি প্রয়োজন। কোনো বিশেষ প্যাকেজ লাগবে না। আপনি চাইলে .backup দিয়ে ডাটাবেস কপি রেখে পরীক্ষা চালাতে পারেন।
পরবর্তী পর্বে
আমরা SQLite-তে LIKE, GLOB, এবং LIMIT ক্লজ নিয়ে আরও ডিটেইলস শিখব – প্যাটার্ন ম্যাচিং ও আউটপুট নিয়ন্ত্রণ।
লেখকের কথা: AND ও OR অপারেটরের সঠিক ব্যবহার ডাটাবেস কোয়েরিকে অত্যন্ত শক্তিশালী করে তোলে। বাংলায় এই টিউটোরিয়াল আপনার কাজে লাগলে অবশ্যই শেয়ার করুন। সিরিজের সব আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
