ডাটাবেসে অনেক সময় আমরা এমন সব রেকর্ড খুঁজতে চাই, যাদের কোনো কলামের মান একটি নির্দিষ্ট প্যাটার্ন মেনে চলে – যেমন “যেসব নাম ‘A’ দিয়ে শুরু”, “যেসব ফোন নম্বর ‘০১৭’ দিয়ে শুরু”, বা “ঠিকানায় ‘-’ চিহ্ন আছে”। SQLite-তে এই কাজটি করার জন্য LIKE অপারেটর ব্যবহার করা হয়। LIKE দুটি শক্তিশালী ওয়াইল্ডকার্ড ক্যারেক্টারের সাথে কাজ করে:
%(পার্সেন্ট সাইন) – শূন্য, এক বা একাধিক অক্ষর/সংখ্যা বোঝায়।_(আন্ডারস্কোর) – ঠিক একটি মাত্র অক্ষর বা সংখ্যা বোঝায়।
এই পর্বে আমরা LIKE-এর সমস্ত ব্যবহারিক দিক উদাহরণসহ শিখব এবং COMPANY টেবিলের উপর প্রয়োগ করব।
পূর্বপ্রস্তুতি
- 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।
১. LIKE-এর সিনট্যাক্স
sql
SELECT FROM table_name WHERE column LIKE pattern;
- column – যে কলামে প্যাটার্ন খুঁজবেন।
- pattern – টেক্সট স্ট্রিং, যেখানে
%এবং_ওয়াইল্ডকার্ড ব্যবহৃত হয়।
আপনি চাইলে AND/OR দিয়ে একাধিক LIKE শর্ত একত্র করতে পারেন।
২. ওয়াইল্ডকার্ডের বিবরণ ও সাধারণ উদাহরণ
নিচে কিছু প্যাটার্ন ও তাদের অর্থ দেওয়া হলো, একটি ধার্য কল্পিত মানের জন্য (যেমন SALARY কলাম, যা স্ট্রিং নয়; কিন্তু LIKE স্বয়ংক্রিয়ভাবে সংখ্যাকে টেক্সটে রূপান্তর করে তুলনা করে)।
| প্যাটার্ন | অর্থ |
|---|---|
'200%' | ‘200’ দিয়ে শুরু হওয়া যেকোনো মান |
'%200%' | যেকোনো জায়গায় ‘200’ আছে এমন মান |
'_00%' | দ্বিতীয় ও তৃতীয় অক্ষরে ‘00’ আছে, প্রথমে একটি মাত্র অক্ষর |
'2_%_%' | ‘2’ দিয়ে শুরু, অন্তত ৩ অক্ষরের (প্রথম অক্ষর 2, দ্বিতীয় যেকোনো, তৃতীয় যেকোনো, পরে কিছু) |
'%2' | ‘2’ দিয়ে শেষ হয় এমন মান |
'_2%3' | দ্বিতীয় অক্ষর ‘2’ এবং শেষ অক্ষর ‘3’ |
'2___3' | ‘2’ দিয়ে শুরু, ‘3’ দিয়ে শেষ, মাঝে ঠিক তিনটি অক্ষর (মোট ৫ অক্ষর) |
মনে রাখবেন: LIKE কেস-ইনসেনসিটিভ – ছোট-বড় অক্ষরে কোনো পার্থক্য হয় না। 'A%' এবং 'a%' একই ফলাফল দেবে। আরেকটি অপারেটর GLOB কেস-সেনসিটিভ এবং ইউনিক্স-স্টাইল ওয়াইল্ডকার্ড (*, ?) ব্যবহার করে।
৩. COMPANY টেবিলে বাস্তব উদাহরণ
ক) বয়স যাদের ‘2’ দিয়ে শুরু (অর্থাৎ ২০-২৯ বছর)
sql
SELECT * FROM COMPANY WHERE AGE LIKE '2%';
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
শুধু Paul (AGE 32) বাদ পড়েছে।
খ) ঠিকানায় হাইফেন (‘-’) আছে এমন রেকর্ড
sql
SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 6 Kim 22 South-Hall 45000.0
উল্লেখ্য, ‘Rich-Mond’ ও ‘South-Hall’ এই দুটি ঠিকানাতেই হাইফেন আছে।
গ) নাম যাদের ‘J’ দিয়ে শুরু এবং কমপক্ষে ৪ অক্ষরের
sql
SELECT * FROM COMPANY WHERE NAME LIKE 'J___%';
এখানে J___ মানে J + তিনটি অক্ষর, তারপর %। এটি James-কে ধরবে (J + ames), কিন্তু J দিয়ে ৩ অক্ষরের নাম নেই। (John থাকলে ধরত।)
ব্যাখ্যা: James মোট ৫ অক্ষর, J___% প্যাটার্নের সাথে মেলে কারণ _ _ _ তিন অক্ষর এবং % বাকি অংশ নেয়।
ঘ) বেতনের শেষে ’00’ আছে
sql
SELECT * FROM COMPANY WHERE SALARY LIKE '%00';
ফলাফল: Paul (20000.0), Teddy (20000.0) ইত্যাদি – মনে রাখবেন, রিয়েল নাম্বার ডিসপ্লেতে .0 থাকে, কিন্তু LIKE ম্যাচিং-এ সেটি টেক্সট হিসেবে গণ্য হবে। 20000.0 শেষ হচ্ছে '0' দিয়ে, '%00' মেলাতে গেলে শেষ দুই অক্ষর ’00’ হতে হবে। 20000.0 শেষ হচ্ছে .0 দিয়ে, তাই এটি সরাসরি '%00'-এ আসবে না। (আপনি .mode csv করে দেখতে পারেন।) টেক্সট ফরম্যাটে SALARY রূপান্তর করলে দশমিক বিন্দুর কারণে কিছুটা পার্থক্য আসতে পারে। বাস্তবে সরাসরি SALARY LIKE '%00' শুধু তখন কাজ করবে যখন SALARY দশমিক ছাড়া সংরক্ষিত হয় (যেমন 20000), কিন্তু আমরা 20000.0 ইনসার্ট করেছি। তাই এ উদাহরণটি প্যাটার্ন বোঝানোর জন্য, বাস্তবে বেতনের ক্ষেত্রে রেঞ্জ (BETWEEN) ব্যবহার করা শ্রেয়।
তবে আপনি যদি টেক্সট কলামে ব্যবহার করেন, তাহলে নির্ভুলভাবে কাজ করবে।
৪. একাধিক শর্ত (AND/OR) সহ LIKE
আপনি একাধিক LIKE বা অন্য অপারেটরের সাথে মিলিয়ে শর্ত তৈরি করতে পারেন।
উদাহরণ: যাদের নাম ‘A’ দিয়ে শুরু অথবা ঠিকানায় ‘Texas’ আছে:
sql
SELECT * FROM COMPANY WHERE NAME LIKE 'A%' OR ADDRESS LIKE '%Texas%';
উদাহরণ: যাদের নাম ‘J’ দিয়ে শুরু এবং বয়স ২৫-এর কম:
sql
SELECT * FROM COMPANY WHERE NAME LIKE 'J%' AND AGE < 25;
৫. LIKE বনাম GLOB
- LIKE: কেস-ইনসেনসিটিভ, ওয়াইল্ডকার্ড
%এবং_। - GLOB: কেস-সেনসিটিভ, ওয়াইল্ডকার্ড
*(যেকোনো কিছু) এবং?(একটি অক্ষর)।
উদাহরণ:
sql
-- LIKE (কেস ইনসেনসিটিভ) SELECT * FROM COMPANY WHERE NAME LIKE 'k%'; -- Kim পাবে -- GLOB (কেস সেনসিটিভ) SELECT * FROM COMPANY WHERE NAME GLOB 'K*'; -- Kim পাবে SELECT * FROM COMPANY WHERE NAME GLOB 'k*'; -- কিছু পাবে না
কাজেই, যদি অক্ষরের বড়-ছোট খেয়াল রাখতে চান, GLOB ব্যবহার করুন, নইলে LIKE নিরাপদ।
৬. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
এই পুরো অনুশীলনের জন্য শুধুমাত্র company.db ফাইলটি প্রয়োজন। কোনো বাড়তি প্যাকেজ লাগবে না। SQLite কমান্ড-লাইন টুল সব কাজ করছে।
৭. গুরুত্বপূর্ণ টিপস
- সংখ্যার ক্ষেত্রে LIKE ব্যবহার না করাই ভালো: সংখ্যাকে স্ট্রিং হিসেবে তুলনা করতে গেলে অপ্রত্যাশিত ফল আসতে পারে (যেমন দশমিক, নেতিবাচক চিহ্ন)। সম্ভব হলে
BETWEEN,>,<ব্যবহার করুন। - প্যাটার্নে ওয়াইল্ডকার্ড এস্কেপ: যদি সত্যিই
%বা_চিহ্ন খুঁজতে চান, তবেESCAPEক্লজ ব্যবহার করুন। যেমন:sqlSELECT * FROM table WHERE col LIKE ‘%\%%’ ESCAPE ‘\’;এটি%চিহ্ন রয়েছে এমন মান খুঁজবে। - ইনডেক্স ব্যবহার: LIKE ব্যবহার করলে ইনডেক্স কাজ করে যদি প্যাটার্ন ওয়াইল্ডকার্ড দিয়ে শুরু না হয়। যেমন
LIKE 'A%'ইনডেক্স ব্যবহার করতে পারে, কিন্তুLIKE '%A'পারে না। - বাংলা টেক্সট: ইউনিকোডের সাথে LIKE পুরোপুরি কাজ করে। তাই বাংলা নাম বা ঠিকানা খুঁজতে একই নিয়ম প্রযোজ্য।
৮. সম্পূর্ণ অনুশীলন সেশন
টার্মিনালে company.db খুলে নিচের কমান্ডগুলো চালান:
sql
.headers on .mode column -- নাম 'M' দিয়ে শুরু SELECT * FROM COMPANY WHERE NAME LIKE 'M%'; -- ঠিকানায় 'll' আছে SELECT * FROM COMPANY WHERE ADDRESS LIKE '%ll%'; -- বয়স দুই অঙ্কের এবং ২ দিয়ে শুরু SELECT * FROM COMPANY WHERE AGE LIKE '2_'; -- ২০-২৯? কিন্তু ১০ হলে ধরা পড়ত না। AGE LIKE '2_' হবে ২ অঙ্কের ২০-২৯ পর্যন্ত। -- বয়স ২ অঙ্কের এবং দ্বিতীয় অঙ্ক ৫ (২৫, ৩৫ ইত্যাদি) SELECT * FROM COMPANY WHERE AGE LIKE '_5';
পরবর্তী পর্বে
আমরা SQLite-তে GLOB অপারেটর, LIMIT ও ORDER BY ক্লজের বিস্তারিত ব্যবহার শিখব।
লেখকের কথা: LIKE অপারেটর ব্যবহার করে ডেটা খোঁজা যেমন মজার, তেমনি শক্তিশালী। বাংলায় এই টিউটোরিয়াল সিরিজ আপনার ডাটাবেস দক্ষতা বাড়াতে সাহায্য করবে। ভালো লাগলে শেয়ার করুন, এবং আপডেট মিস না করতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
