SELECT Archives - To Learn Team https://tolearnteam.com/tag/select/ Learn about Everything Online Sat, 08 Aug 2026 04:59:14 +0000 en-US hourly 1 https://wordpress.org/?v=7.1.2 https://tolearnteam.com/wp-content/uploads/2026/07/cropped-Logo-32x32.png SELECT Archives - To Learn Team https://tolearnteam.com/tag/select/ 32 32 SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল) https://tolearnteam.com/sqlite-subqueries-bangla/ Sat, 08 Aug 2026 02:56:51 +0000 http://tolearnteam.com/?p=2222 একটি কোয়েরির ভেতর আরেকটি কোয়েরি – এটাই হলো সাবকোয়েরি (Subquery) বা ইনার কোয়েরি বা নেস্টেড কোয়েরি। সাবকোয়েরি সাধারণত WHERE ক্লজের মধ্যে বসে এবং মূল কোয়েরির জন্য প্রয়োজনীয় ডেটা সরবরাহ করে। এর মাধ্যমে আমরা জটিল…

The post SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল) appeared first on To Learn Team.

]]>
একটি কোয়েরির ভেতর আরেকটি কোয়েরি – এটাই হলো সাবকোয়েরি (Subquery) বা ইনার কোয়েরি বা নেস্টেড কোয়েরি। সাবকোয়েরি সাধারণত WHERE ক্লজের মধ্যে বসে এবং মূল কোয়েরির জন্য প্রয়োজনীয় ডেটা সরবরাহ করে। এর মাধ্যমে আমরা জটিল যুক্তি একটি সহজবোধ্য উপায়ে প্রকাশ করতে পারি। সাবকোয়েরি SELECT, INSERT, UPDATE, DELETE – সব ধরনের DML অপারেশনের সাথেই ব্যবহার করা যায়। আজ আমরা সাবকোয়েরির নিয়মকানুন, প্রতিটি স্টেটমেন্টে ব্যবহার ও বাস্তব উদাহরণ শিখব।


পূর্বপ্রস্তুতি

  • SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
  • আমরা subquery_demo.db নামে ডাটাবেস তৈরি করব, যেখানে COMPANY ও তার ব্যাকআপ COMPANY_BKP টেবিল থাকবে।

টার্মিনাল:

bash

sqlite3 subquery_demo.db

sql

-- COMPANY টেবিল
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);

-- COMPANY_BKP টেবিল (একই কাঠামো, ব্যাকআপ হিসেবে)
CREATE TABLE COMPANY_BKP(
   ID INT PRIMARY KEY NOT NULL,
   NAME TEXT NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR(50),
   SALARY REAL
);

INSERT INTO COMPANY_BKP SELECT * FROM COMPANY;
  • আউটপুট ফরম্যাট: .header on, .mode column।

১. সাবকোয়েরি কী ও নিয়মাবলী

সাবকোয়েরি হলো প্যারেন্থেসিস ()-র মধ্যে আবদ্ধ একটি SELECT স্টেটমেন্ট, যা মূল SQL স্টেটমেন্টের একটি অংশ হিসেবে কাজ করে। এটি প্রথমে সম্পাদিত হয়, তারপর তার ফলাফল মূল কোয়েরিতে ব্যবহৃত হয়।

প্রধান নিয়ম:

  • সাবকোয়েরি অবশ্যই প্রথম বন্ধনীর (parentheses) মধ্যে থাকতে হবে।
  • সাবকোয়েরির SELECT ক্লজে সাধারণত একটি মাত্র কলাম থাকা উচিত, যদি না মূল কোয়েরি একাধিক কলামের সাথে তুলনা করে (এক্ষেত্রে জোড়ায় জোড়ায় মিলাতে হবে)।
  • সাবকোয়েরিতে ORDER BY ব্যবহার করা যায় না (মূল কোয়েরিতে ব্যবহার করতে হবে)। তবে GROUP BY ব্যবহার করে একই ধরনের কাজ চালানো যায়।
  • যদি সাবকোয়েরি একাধিক সারি ফেরত দেয়, তবে শুধুমাত্র IN, ANY, ALL-র মতো মাল্টি-ভ্যালু অপারেটর ব্যবহার করতে হবে। = একক মানের জন্য।
  • BETWEEN অপারেটর সরাসরি সাবকোয়েরির সাথে ব্যবহার করা যায় না, তবে সাবকোয়েরির ভেতরে BETWEEN ব্যবহার করা যায়।

২. SELECT-এ সাবকোয়েরি

সবচেয়ে সাধারণ প্রয়োগ। একটি উদাহরণ: যেসব কর্মীর বেতন ৪৫,০০০-এর বেশি, তাদের আইডি সাবকোয়েরি দিয়ে বের করে সেই আইডিগুলো মূল টেবিল থেকে দেখানো।

sql

SELECT *
FROM COMPANY
WHERE ID IN (SELECT ID
             FROM COMPANY
             WHERE SALARY > 45000);

ফলাফল:

text

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

এখানে সাবকোয়েরি (SELECT ID FROM COMPANY WHERE SALARY > 45000) প্রথমে ID 4 এবং 5 ফেরত দেয়, তারপর মূল SELECT তাদের সম্পূর্ণ তথ্য নিয়ে আসে।

সাবকোয়েরির সাথে =: যদি নিশ্চিত যে সাবকোয়েরি একটিমাত্র সারি ফেরত দেবে, তাহলে = ব্যবহার করা যায়। যেমন:

sql

SELECT * FROM COMPANY
WHERE SALARY = (SELECT MAX(SALARY) FROM COMPANY);

এটি সর্বোচ্চ বেতনধারী কর্মীকে দেখাবে। MAX একটি একক মান দেয়, তাই = ব্যবহার করা নিরাপদ।


৩. INSERT-এ সাবকোয়েরি

সাবকোয়েরি ব্যবহার করে আপনি এক টেবিল থেকে ডেটা এনে আরেক টেবিলে ইনসার্ট করতে পারেন। এটি INSERT INTO ... SELECT স্টেটমেন্টের মাধ্যমে করা হয়।

সিনট্যাক্স:

sql

INSERT INTO target_table (column_list)
SELECT column_list
FROM source_table
WHERE condition;

উদাহরণ: COMPANY টেবিল থেকে সব রেকর্ড COMPANY_BKP-তে কপি করা (ইতিমধ্যে করেছি, কিন্তু আবার দেখানো যাক):

sql

INSERT INTO COMPANY_BKP
SELECT * FROM COMPANY
WHERE ID IN (SELECT ID FROM COMPANY);

অথবা আরও ফিল্টার করে: শুধুমাত্র যাদের বয়স ২৫-এর বেশি তাদের ব্যাকআপ নিতে:

sql

INSERT INTO COMPANY_BKP
SELECT * FROM COMPANY
WHERE AGE IN (SELECT AGE FROM COMPANY WHERE AGE > 25);

৪. UPDATE-এ সাবকোয়েরি

আপডেটের WHERE ক্লজে সাবকোয়েরি ব্যবহার করে আপনি নির্দিষ্ট শর্তসাপেক্ষে রেকর্ড আপডেট করতে পারেন। আবার SET-এও সাবকোয়েরি ব্যবহার করা যায়।

উদাহরণ: COMPANY টেবিলে যেসব কর্মীর বয়স ২৭ বা তার বেশি, তাদের বেতন অর্ধেক করে দেওয়া। আমরা COMPANY_BKP থেকে সেই বয়সের তালিকা নিচ্ছি (একই টেবিল থেকেও নেওয়া যায়)।

sql

UPDATE COMPANY
SET SALARY = SALARY * 0.50
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
              WHERE AGE >= 27);

ফলাফল: Paul (AGE 32) ও David (AGE 27) আপডেট হবে।

text

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  10000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

৫. DELETE-এ সাবকোয়েরি

ডিলিটের WHERE ক্লজে সাবকোয়েরি ব্যবহার করে নির্দিষ্ট শর্তের ভিত্তিতে রেকর্ড মুছে ফেলা যায়।

উদাহরণ: COMPANY টেবিল থেকে তাদের মুছে ফেলি, যাদের বয়স ২৭-এর বেশি (অর্থাৎ ২৮ বা তার বেশি, বা বড়) – COMPANY_BKP থেকে সেই শর্তে বয়স বের করে।

sql

DELETE FROM COMPANY
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
              WHERE AGE > 27);

ফলাফল: Paul (AGE 32) ডিলিট হবে। David (AGE 27) থাকবে, কারণ > 27 তে সে আসে না।

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       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

৬. সাবকোয়েরির প্রকারভেদ (সংক্ষেপ)

  • স্কেলার সাবকোয়েরি: একটি মাত্র মান (এক কলাম, এক সারি) ফেরত দেয়। = অপারেটরের সাথে ব্যবহার হয়।
  • রো সাবকোয়েরি: একাধিক কলাম ফেরত দেয়, তুলনার সময় কলাম সংখ্যা মিলাতে হয়।
  • টেবিল সাবকোয়েরি: একাধিক কলাম ও সারি ফেরত দেয়, IN, EXISTS, ANY, ALL-র সাথে ব্যবহার হয়।

৭. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ

ডাটাবেস ফাইল: subquery_demo.db। কোনো অতিরিক্ত প্যাকেজ ইন্সটল করতে হবে না।

text

project-folder/
└── subquery_demo.db

৮. গুরুত্বপূর্ণ টিপস

  • সাবকোয়েরি সর্বদা বন্ধনীতে রাখুন।
  • পারফরম্যান্স বিবেচনা: কখনো কখনো সাবকোয়েরির বদলে JOIN ব্যবহার করলে দ্রুত ফলাফল পাওয়া যায়। জটিল সাবকোয়েরির বদলে JOIN বিবেচনা করুন।
  • একাধিক সারি পেলে = নয়: যদি সাবকোয়েরি একাধিক সারি ফেরত দেয়, তাহলে = ব্যবহার করলে এরর আসবে। IN ব্যবহার করুন।
  • সাবকোয়েরিতে ORDER BY নেই: সাজানোর প্রয়োজন হলে মূল কোয়েরিতে ORDER BY ব্যবহার করুন।
  • EXISTS অপারেটর: সাবকোয়েরির সারি আছে কিনা তা চেক করতে EXISTS ব্যবহার করা যায়, যা অনেক সময় IN-এর চেয়ে দ্রুত কাজ করে।

৯. সম্পূর্ণ অনুশীলন সেশন

sql

.headers on
.mode column

-- প্রাথমিক টেবিল দেখি
SELECT * FROM COMPANY;
SELECT * FROM COMPANY_BKP;

-- SELECT-এ সাবকোয়েরি: সবার বেতন থেকে বেশি বেতন যাদের
SELECT * FROM COMPANY WHERE SALARY > (SELECT AVG(SALARY) FROM COMPANY);

-- INSERT-এ সাবকোয়েরি: যাদের বয়স 30 এর নিচে, তাদের ব্যাকআপে কপি
INSERT INTO COMPANY_BKP SELECT * FROM COMPANY WHERE AGE IN (SELECT AGE FROM COMPANY WHERE AGE < 30);

-- UPDATE-এ সাবকোয়েরি: যাদের বয়স Mark-এর সমান তাদের বেতন 10% বাড়ান
UPDATE COMPANY SET SALARY = SALARY * 1.10 WHERE AGE = (SELECT AGE FROM COMPANY WHERE NAME = 'Mark');

-- DELETE-এ সাবকোয়েরি: যাদের বেতন গড় বেতনের নিচে তাদের মুছে ফেলি (পরীক্ষা করে দেখতে পারেন, তবে আগে ব্যাকআপ নিন)
-- DELETE FROM COMPANY WHERE SALARY < (SELECT AVG(SALARY) FROM COMPANY);

পরবর্তী পর্বে

আমরা শিখব SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধির কৌশল।

লেখকের কথা: সাবকোয়েরি SQL-এর জাদু! এটি আপনার ডেটাবেস প্রশ্নকে শক্তিশালী করে তোলে। বাংলায় এই টিউটোরিয়াল সিরিজ আপনার শেখার সঙ্গী হয়ে উঠুক। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সিরিজের সব আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করুন। আপনার মতামত আমাদের অনুপ্রাণিত করে – কমেন্ট করতে ভুলবেন না!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল) appeared first on To Learn Team.

]]>
SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা) https://tolearnteam.com/sqlite-indexed-by-clause-bangla/ Sat, 08 Aug 2026 02:28:28 +0000 http://tolearnteam.com/?p=2207 আমরা গত পর্বে জেনেছি যে ইনডেক্স ডেটা খোঁজার গতি বাড়ায়, এবং SQLite স্বয়ংক্রিয়ভাবে উপযুক্ত ইনডেক্স নির্বাচন করে। কিন্তু কখনো কখনো আমরা নিজেরা নির্দিষ্ট করে দিতে চাই যে কোনো কোয়েরিতে কোন ইনডেক্স…

The post SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা) appeared first on To Learn Team.

]]>
আমরা গত পর্বে জেনেছি যে ইনডেক্স ডেটা খোঁজার গতি বাড়ায়, এবং SQLite স্বয়ংক্রিয়ভাবে উপযুক্ত ইনডেক্স নির্বাচন করে। কিন্তু কখনো কখনো আমরা নিজেরা নির্দিষ্ট করে দিতে চাই যে কোনো কোয়েরিতে কোন ইনডেক্স ব্যবহার করা হবে, নাকি কোনো ইনডেক্সই ব্যবহার করা হবে না। SQLite-তে এটি করার জন্য INDEXED BY ও NOT INDEXED ক্লজ দুটি ব্যবহৃত হয়। আজ আমরা এই ক্লজ দুটির ব্যবহারিক প্রয়োগ, সুবিধা ও সীমাবদ্ধতা উদাহরণসহ শিখব।


পূর্বপ্রস্তুতি

  • SQLite ইন্সটল থাকতে হবে।
  • COMPANY টেবিল সম্বলিত indexedby_demo.db ডাটাবেস তৈরি করি। সাথে একটি ইনডেক্সও তৈরি করব।

টার্মিনাল:

bash

sqlite3 indexedby_demo.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);

-- SALARY-র উপর একটি ইনডেক্স তৈরি করি
CREATE INDEX salary_index ON COMPANY (SALARY);
  • আউটপুট ফরম্যাট: .header on, .mode column।

১. INDEXED BY ক্লজ

INDEXED BY ক্লজ ব্যবহার করে আপনি নির্দিষ্ট একটি ইনডেক্সের মাধ্যমে টেবিল অ্যাক্সেস করতে বাধ্য করতে পারেন। যদি উল্লেখিত ইনডেক্স না থাকে বা সেই কোয়েরির জন্য ব্যবহার করা সম্ভব না হয়, তাহলে SQLite এরর তৈরি করবে এবং স্টেটমেন্টটি ব্যর্থ হবে।

সিনট্যাক্স (SELECT-এর জন্য):

sql

SELECT column_list FROM table_name
INDEXED BY index_name
WHERE condition;

একইভাবে DELETE ও UPDATE-তেও INDEXED BY ব্যবহার করা যায়, যেখানে WHERE ক্লজের ভিত্তিতে সারি খোঁজা হয়।


২. INDEXED BY-এর উদাহরণ

আমরা salary_index ইনডেক্সটি ব্যবহার করে তাদের বের করি যাদের বেতন ৫০০০-এর বেশি।

sql

SELECT * FROM COMPANY
INDEXED BY salary_index
WHERE SALARY > 5000;

ফলাফল:

text

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
7           James       24          Houston     10000.0
2           Allen       25          Texas       15000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
6           Kim         22          South-Hall  45000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

এখন যদি ভুল ইনডেক্স নাম দিই:

sql

SELECT * FROM COMPANY
INDEXED BY wrong_index
WHERE SALARY > 5000;

এরর: no such index: wrong_index

কিংবা এমন ইনডেক্স দিই যা WHERE-এর কলামে ব্যবহার করা যায় না (যেমন NAME-এর উপর ইনডেক্স নেই, অথচ AGE-তে চালাচ্ছি):

sql

CREATE INDEX age_idx ON COMPANY (AGE);
SELECT * FROM COMPANY INDEXED BY age_idx WHERE SALARY > 5000; -- সম্ভবত কাজ করবে না বা ভুল রেজাল্ট দেবে; বাস্তবে এটি ইনডেক্স ব্যবহার করতে বাধ্য করবে, কিন্তু পারফরম্যান্স কমতে পারে, যদিও SQLite সাধারণত মান্য করে। তবে যদি ইনডেক্সের সাথে WHERE-এর কলামের সম্পর্ক না থাকে, তবুও এটি ইনডেক্স স্ক্যান করতে পারে। এরর তখনই হবে যখন ইনডেক্স একেবারেই ব্যবহার অনুপযোগী (যেমন WHERE ছাড়া)।

তবে মূল বিষয়: INDEXED BY দিয়ে আপনি একটি নির্দিষ্ট ইনডেক্সের ব্যবহার জোর করতে পারেন, এবং যদি সেটি সম্ভব না হয়, তাহলে স্টেটমেন্ট প্রস্তুতিতেই ব্যর্থ হবে।


৩. NOT INDEXED ক্লজ

NOT INDEXED ক্লজ দিয়ে আপনি নির্দেশ দেন যে এই টেবিলের জন্য কোনো ইনডেক্স ব্যবহার করা হবে না, এমনকি প্রাইমারি কি বা ইউনিক কনস্ট্রেইন্টের কারণে তৈরি ইমপ্লিসিট ইনডেক্সও না। তবে ব্যতিক্রম: INTEGER PRIMARY KEY সবসময় ব্যবহার করা যেতে পারে সারি খুঁজতে, NOT INDEXED থাকলেও।

সিনট্যাক্স:

sql

SELECT column_list FROM table_name
NOT INDEXED
WHERE condition;

উদাহরণ:

sql

SELECT * FROM COMPANY
NOT INDEXED
WHERE SALARY > 5000;

এটি ইনডেক্স ব্যবহার না করে সম্পূর্ণ টেবিল স্ক্যান করবে। ছোট টেবিলে পার্থক্য বোঝা না গেলেও বড় টেবিলে এটি ধীরগতির হতে পারে।

NOT INDEXED সাধারণত তখন ব্যবহার করা হয় যখন আপনি জানেন যে ইনডেক্স ব্যবহার না করাই ভালো (যেমন খুব ছোট টেবিল, অথবা ইনডেক্স দুষ্প্রাপ্য), অথবা ডিবাগিংয়ের উদ্দেশ্যে।


৪. INDEXED BY এবং NOT INDEXED-এর ব্যবহারিক গুরুত্ব

  • ডিবাগিং ও পারফরম্যান্স টিউনিং: আপনি পরীক্ষা করতে পারেন কোনো নির্দিষ্ট ইনডেক্স কোনো কোয়েরির গতি বাড়াচ্ছে কিনা, বা ইনডেক্স ছাড়া কেমন গতি হয়।
  • কোয়েরি প্ল্যান নিয়ন্ত্রণ: অনেক সময় SQLite-র অটোমেটিক ইনডেক্স সিলেকশন আপনার পছন্দ মতো নাও হতে পারে; তখন INDEXED BY দিয়ে সঠিক ইনডেক্সে বাধ্য করা যায়।
  • সতর্কতা: ভুল ইনডেক্স জোর করলে কোয়েরি ব্যর্থ হবে। তাই শুধুমাত্র তখনই ব্যবহার করবেন যখন আপনি নিশ্চিত যে ওই ইনডেক্সটি কোয়েরির জন্য কার্যকর।

৫. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ

শুধুমাত্র indexedby_demo.db ফাইলটি ব্যবহৃত হচ্ছে। কোনো অতিরিক্ত প্যাকেজ ইন্সটল করতে হবে না।

text

project-folder/
└── indexedby_demo.db

৬. গুরুত্বপূর্ণ টিপস

  • INDEXED BY ব্যবহার করার আগে EXPLAIN QUERY PLAN দিয়ে দেখুন SQLite আসলে কী করছে। তারপর ইচ্ছাকৃতভাবে ইনডেক্স পরিবর্তন করে তুলনা করুন।
  • NOT INDEXED দিলেও INTEGER PRIMARY KEY কলামে সরাসরি WHERE id = ? দ্রুত কাজ করবে, কারণ এটি rowid-এর অ্যালিয়াস।
  • যেসব ক্ষেত্রে টেবিল খুব ছোট, সেখানে NOT INDEXED ব্যবহার করলে ইনডেক্স লুকআপের ওভারহেড বাঁচে, ফলে গতি বাড়তে পারে।
  • একই কোয়েরিতে একাধিক টেবিল থাকলে প্রতিটি টেবিলের জন্য আলাদাভাবে INDEXED BY বা NOT INDEXED উল্লেখ করা যায়।

৭. সম্পূর্ণ অনুশীলন সেশন

sql

.headers on
.mode column

-- ইনডেক্স তৈরি (আগেই করা আছে)
CREATE INDEX IF NOT EXISTS salary_index ON COMPANY (SALARY);

-- INDEXED BY দিয়ে SELECT
SELECT * FROM COMPANY INDEXED BY salary_index WHERE SALARY BETWEEN 10000 AND 50000;

-- NOT INDEXED দিয়ে SELECT (কোনো ইনডেক্স নয়)
SELECT * FROM COMPANY NOT INDEXED WHERE AGE = 25;

-- UPDATE-তে INDEXED BY
UPDATE COMPANY INDEXED BY salary_index SET ADDRESS = 'Dallas' WHERE SALARY = 20000;
SELECT * FROM COMPANY;

-- DELETE-তে INDEXED BY
DELETE FROM COMPANY INDEXED BY salary_index WHERE SALARY < 15000;

-- ভুল ইনডেক্স নাম দিয়ে পরীক্ষা (এরর আসবে)
-- SELECT * FROM COMPANY INDEXED BY wrong_index WHERE SALARY > 1000;

পরবর্তী পর্বে

আমরা শিখব SQLite ALTER TABLE – টেবিলের কাঠামো পরিবর্তনের সীমিত কিন্তু গুরুত্বপূর্ণ কমান্ডগুলো।

লেখকের কথা: INDEXED BY দিয়ে আপনি নিজের ইচ্ছেমতো ইনডেক্স নিয়ন্ত্রণ করতে পারেন, যা বিশেষ করে বড় ও জটিল ডাটাবেসে কাজে আসে। বাংলায় SQLite শেখার এই সিরিজ চলমান রাখতে আপনার উৎসাহ একান্ত প্রয়োজন। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সিরিজের সব আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করুন। কোনো প্রশ্ন বা মতামত কমেন্টে জানাতে পারেন – আমরা উত্তর দিতে প্রস্তুত!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা) appeared first on To Learn Team.

]]>
SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা) https://tolearnteam.com/sqlite-union-clause-bangla/ Fri, 07 Aug 2026 17:20:32 +0000 http://tolearnteam.com/?p=2192 কখনো কখনো আমাদের একই ধরনের ডেটা একাধিক টেবিল বা একাধিক শর্ত থেকে আলাদা আলাদা SELECT করে আনতে হয়, এবং শেষে সেই সব ফলাফল একটি মাত্র ফলাফল সেট হিসেবে দেখতে চাই।…

The post SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা) appeared first on To Learn Team.

]]>
কখনো কখনো আমাদের একই ধরনের ডেটা একাধিক টেবিল বা একাধিক শর্ত থেকে আলাদা আলাদা SELECT করে আনতে হয়, এবং শেষে সেই সব ফলাফল একটি মাত্র ফলাফল সেট হিসেবে দেখতে চাই। SQLite-তে এই কাজটি করার জন্য UNION এবং UNION ALL অপারেটর ব্যবহার করা হয়। UNION দুটি বা ততোধিক SELECT স্টেটমেন্টের আউটপুটকে উল্লম্বভাবে (একটির নিচে আরেকটি) জুড়ে দেয়। আজকের পর্বে আমরা UNION-এর নিয়মকানুন, ডুপ্লিকেট সরানোর কৌশল এবং ব্যবহারিক উদাহরণ বিস্তারিত শিখব।


পূর্বপ্রস্তুতি

  • SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
  • আমাদের পরিচিত COMPANY এবং DEPARTMENT টেবিল ব্যবহার করব। তবে এবার DEPARTMENT-এ আরও কিছু রেকর্ড যোগ করতে হবে, যাতে UNION-এর ফল বোঝা যায়। union_demo.db নামে ডাটাবেস তৈরি করি।

টার্মিনালে ডাটাবেস তৈরি:

bash

sqlite3 union_demo.db

sql

-- COMPANY টেবিল (আগের মতো)
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);

-- DEPARTMENT টেবিল (বর্ধিত, প্রতিটি কর্মীর জন্য একটি করে বিভাগ)
CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY NOT NULL,
   DEPT CHAR(50) NOT NULL,
   EMP_ID INT NOT NULL
);
INSERT INTO DEPARTMENT VALUES (1, 'IT Billing', 1);
INSERT INTO DEPARTMENT VALUES (2, 'Engineering', 2);
INSERT INTO DEPARTMENT VALUES (3, 'Finance', 7);
INSERT INTO DEPARTMENT VALUES (4, 'Engineering', 3);
INSERT INTO DEPARTMENT VALUES (5, 'Finance', 4);
INSERT INTO DEPARTMENT VALUES (6, 'Engineering', 5);
INSERT INTO DEPARTMENT VALUES (7, 'Finance', 6);

এখন COMPANY-তে ৭ জন কর্মী এবং DEPARTMENT-এ তাদের প্রত্যেকের জন্য একটি বিভাগ নির্ধারিত আছে (সবাই মিলেছে, ফলে INNER JOIN ও LEFT JOIN একই ফল দেবে ৭টি সারি)। UNION দেখানোর জন্য আমরা INNER JOIN ও LEFT JOIN কৃত্রিমভাবে আলাদা করে আবার মিলিয়ে দেখব, কিন্তু মূল বিষয় হলো দুটি SELECT-এর একত্রীকরণ।

  • আউটপুট ফরম্যাট: .header on, .mode column।

১. UNION-এর সিনট্যাক্স ও শর্ত

UNION অপারেটর ব্যবহার করতে হলে নিচের শর্তগুলো মেনে চলতে হবে:

  • প্রতিটি SELECT স্টেটমেন্টে সমান সংখ্যক কলাম থাকতে হবে।
  • কলামগুলোর ডেটা টাইপ মিলতে হবে (বা তুলনীয় হতে হবে)।
  • কলামগুলোর ক্রম একই হতে হবে।
  • প্রতিটি SELECT-এর কলামের দৈর্ঘ্য সমান না হলেও চলবে।

সিনট্যাক্স:

sql

SELECT column1, column2, ...
FROM table1
[WHERE condition]
UNION
SELECT column1, column2, ...
FROM table2
[WHERE condition];

UNION স্বয়ংক্রিয়ভাবে ডুপ্লিকেট সারি সরিয়ে দেয়। অর্থাৎ, একই সারি একাধিকবার এলে ফলাফলে শুধু একবার আসবে।


২. UNION উদাহরণ – ডুপ্লিকেট ছাড়া মেশানো

ধরা যাক আমরা প্রথমে INNER JOIN দিয়ে কর্মী ও তাদের বিভাগ বের করলাম। তারপর আবার LEFT OUTER JOIN দিয়েও একই তথ্য বের করলাম। বর্তমান ডেটায় সব কর্মীর বিভাগ আছে, তাই দুটি SELECT-ই একই ৭টি সারি দেবে। UNION ব্যবহার করলে ডুপ্লিকেট সরিয়ে ৭টি সারি ফিরবে।

sql

SELECT EMP_ID, NAME, DEPT
FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID

UNION

SELECT EMP_ID, NAME, DEPT
FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;

ফলাফল:

text

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineering
3           Teddy       Engineering
4           Mark        Finance
5           David       Engineering
6           Kim         Finance
7           James       Finance

যদি LEFT JOIN-এ কোনো NULL থাকত, সেগুলোও ডুপ্লিকেট বাদ দিয়ে আসত। মূল বিষয়: UNION ডুপ্লিকেট দূর করে।


৩. UNION ALL – ডুপ্লিকেটসহ সব রেকর্ড

কখনো কখনো আমরা চাই ডুপ্লিকেট রাখতেও। তখন UNION ALL ব্যবহার করতে হবে। এটি কোনো ডুপ্লিকেট সরায় না; ঠিক যত সারি আসে, ততই জোড়া দেয়।

সিনট্যাক্স:

sql

SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;

উদাহরণ: উপরের একই কোয়েরি UNION ALL-এর মাধ্যমে চালালে ১৪টি সারি আসবে (প্রথম SELECT-এর ৭ + দ্বিতীয় SELECT-এর ৭)।

sql

SELECT EMP_ID, NAME, DEPT
FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID

UNION ALL

SELECT EMP_ID, NAME, DEPT
FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;

ফলাফল: প্রতিটি সারি দুইবার করে আসবে (মোট ১৪টি)।

ব্যবহার: যখন আপনি নিশ্চিত যে কোনো ডুপ্লিকেট নেই, অথবা ডুপ্লিকেট রেখে মোট গণনা করতে চান, তখন UNION ALL ব্যবহার করুন। এটি UNION-এর চেয়ে দ্রুত, কারণ ডুপ্লিকেট চেক করতে হয় না।


৪. বাস্তব দৃশ্যপট: ভিন্ন শর্তে ডেটা একত্রিত

ধরা যাক, আমরা চাই এমন একটি তালিকা যেখানে কিছু কর্মীর বেতন ৬০,০০০-এর বেশি এবং কিছু কর্মীর বয়স ২৫-এর কম – কিন্তু একই ফলাফলে দেখতে চাই।

sql

SELECT NAME, SALARY, 'High Earner' AS Category
FROM COMPANY
WHERE SALARY > 60000

UNION

SELECT NAME, SALARY, 'Young'
FROM COMPANY
WHERE AGE < 25;

এখানে প্রথম SELECT কলামগুলোতে একটি এক্সট্রা ক্যাটাগরি কলাম দিচ্ছে, দ্বিতীয় SELECT-ও তাই। কলাম সংখ্যা ও ক্রম মিলছে (NAME, SALARY, Category)।

ফলাফল:

text

NAME        SALARY      Category
----------  ----------  ----------
Mark        65000.0     High Earner
David       85000.0     High Earner
Teddy       20000.0     Young
Kim         45000.0     Young
James       10000.0     Young

(Mark এবং David উভয়ই High Earner; তরুণদের মধ্যে Teddy, Kim, James আছে। কেউ একাধিক শর্তে পড়লে UNION তাকে একবারই দেখাবে।)


৫. UNION বনাম JOIN পার্থক্য

অনেকেই UNION ও JOIN গুলিয়ে ফেলেন। সহজ নিয়ম:

  • JOIN টেবিলের কলাম পাশাপাশি (অনুভূমিকভাবে) যোগ করে।
  • UNION সারি নিচের দিকে (উল্লম্বভাবে) যোগ করে।

উদাহরণ: দুটি টেবিলের ডেটা একটির নিচে আরেকটি বসাতে UNION; আর সম্পর্কিত কলাম একই সারিতে আনতে JOIN।


৬. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ

আমাদের ডাটাবেস ফাইল union_demo.db। UNION কোনো বাড়তি ফাইল তৈরি করে না। কোনো বিশেষ প্যাকেজের প্রয়োজন নেই।

text

project-folder/
└── union_demo.db

৭. গুরুত্বপূর্ণ টিপস

  • ORDER BY: UNION-এর শেষে ORDER BY ব্যবহার করা যায়, কিন্তু তা সম্পূর্ণ ফলাফলের উপর কাজ করবে। প্রতিটি SELECT-এ আলাদা ORDER BY দিতে চাইলে সাবকোয়েরি ব্যবহার করতে হবে।
  • কলাম নাম: UNION-এর চূড়ান্ত কলামের নাম প্রথম SELECT থেকে নেওয়া হয়। তাই প্রথম SELECT-এ অর্থবহ অ্যালিয়াস দিন।
  • পারফরম্যান্স: UNION ALL দ্রুত, কারণ এটি ডুপ্লিকেট খোঁজে না। যদি আপনি নিশ্চিত হন যে সারি ইউনিক, তবে UNION ALL-ই ব্যবহার করবেন।
  • সব SELECT-এ সমান কলাম: যদি একটি SELECT-এ কম কলাম দিতে হয়, তাহলে NULL বা স্থির মান (যেমন 'N/A') বসিয়ে কলাম সংখ্যা মিলান।
  • UNION-এ NULL: UNION NULL-কে ডুপ্লিকেট হিসেবে বিবেচনা করে? হ্যাঁ, একাধিক NULL থাকলে UNION কেবল একটি NULL সারি রাখবে, কারণ NULL = NULL সমীকরণ UNION-এর ডুপ্লিকেট চেকের সময় সত্য ধরা হয় (ডুপ্লিকেট হিসেবে গণ্য হয়)।

৮. সম্পূর্ণ অনুশীলন সেশন

টার্মিনালে নিচের কমান্ডগুলো চালান:

sql

.headers on
.mode column

-- সম্পূর্ণ COMPANY ও DEPARTMENT দেখি
SELECT * FROM COMPANY;
SELECT * FROM DEPARTMENT;

-- UNION দিয়ে INNER এবং LEFT JOIN এর ফল একত্র (ডুপ্লিকেট বাদ)
SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;

-- UNION ALL দিয়ে একই কাজ (ডুপ্লিকেট সহ)
SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION ALL
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;

-- বাস্তব উদাহরণ: উচ্চ বেতন ও তরুণ কর্মী এক তালিকায়
SELECT NAME, SALARY, 'High' AS Type FROM COMPANY WHERE SALARY > 50000
UNION
SELECT NAME, SALARY, 'Young' FROM COMPANY WHERE AGE < 25;

পরবর্তী পর্বে

আমরা শিখব SQLite NULL Values – NULL-এর সঠিক ব্যবহার এবং NULL সম্পর্কিত ফাংশন।

লেখকের কথা: UNION দিয়ে ডেটা ম্যানিপুলেশনের দরজা আরও খুলে যায়। বাংলায় প্রযুক্তি শেখার এই ধারা বজায় রাখতে আপনার শেয়ার, কমেন্ট ও উৎসাহ আমাদের অনুপ্রেরণা। পোস্টটি ভালো লাগলে বন্ধুদের জানাতে ভুলবেন না! সিরিজের সব পর্ব পেতে ToLearnTeam.com সাবস্ক্রাইব করুন। কোনো প্রশ্ন থাকলে কমেন্টে জানান – আমরা উত্তর দিতে প্রস্তুত!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা) appeared first on To Learn Team.

]]>
SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা) https://tolearnteam.com/sqlite-distinct-keyword-bangla/ Fri, 07 Aug 2026 15:36:49 +0000 http://tolearnteam.com/?p=2179 ডাটাবেসে প্রায়ই একই ধরনের ডেটা বারবার আসে – যেমন একই নামের একাধিক কর্মী, একই শহরের ঠিকানা, কিংবা একই বেতনের রেকর্ড। যখন আমরা শুধু জানতে চাই “কোন কোন নাম আছে” বা…

The post SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা) appeared first on To Learn Team.

]]>
ডাটাবেসে প্রায়ই একই ধরনের ডেটা বারবার আসে – যেমন একই নামের একাধিক কর্মী, একই শহরের ঠিকানা, কিংবা একই বেতনের রেকর্ড। যখন আমরা শুধু জানতে চাই “কোন কোন নাম আছে” বা “কোন কোন শহর থেকে কর্মীরা এসেছে”, তখন পুনরাবৃত্তি না দেখিয়ে শুধু একটি করে মান দেখানোই যথেষ্ট। SQLite-তে এই কাজটি করে DISTINCT কীওয়ার্ড। এটি SELECT স্টেটমেন্টের পরপরই বসে এবং ফলাফল থেকে ডুপ্লিকেট সারি সরিয়ে শুধুমাত্র ইউনিক সমন্বয় ফেরত দেয়। আজকের পর্বে আমরা DISTINCT-এর সিনট্যাক্স, ব্যবহারিক উদাহরণ, একাধিক কলামে এর আচরণ, এবং GROUP BY-এর সাথে পার্থক্য বিস্তারিতভাবে শিখব।


পূর্বপ্রস্তুতি

  • 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);
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
  • আউটপুট সুন্দর করতে: .header on এবং .mode column।

১. DISTINCT-এর সিনট্যাক্স

sql

SELECT DISTINCT column1, column2, ...
FROM table_name
WHERE condition;
  • DISTINCT কীওয়ার্ডটি SELECT-এর ঠিক পরে বসে।
  • এরপর এক বা একাধিক কলামের নাম দেওয়া যায়। DISTINCT প্রতিটি সারির সমন্বয় (row combination) বিবেচনা করে। যদি একাধিক কলাম দেওয়া হয়, তবে সেই কলামগুলোর মানের পুরো সেটটি ইউনিক কিনা দেখবে।
  • WHERE শর্ত থাকলে আগে ফিল্টার হবে, তারপর DISTINCT কাজ করবে।

২. একক কলামে DISTINCT-এর উদাহরণ

প্রথমে দেখি ডুপ্লিকেট অবস্থা কেমন:

sql

SELECT NAME FROM COMPANY;

ফলাফল:

text

NAME
----------
Paul
Allen
Teddy
Mark
David
Kim
James
Paul
James
James

Paul ও James একাধিকবার এসেছে।

এখন DISTINCT ব্যবহার করি:

sql

SELECT DISTINCT NAME FROM COMPANY;

ফলাফল:

text

NAME
----------
Paul
Allen
Teddy
Mark
David
Kim
James

প্রতিটি নাম মাত্র একবার দেখাচ্ছে।


৩. একাধিক কলামে DISTINCT

যখন একাধিক কলাম নির্দিষ্ট করি, তখন DISTINCT সেই কলামগুলোর কম্বিনেশন দেখবে। যদি দুটি সারির সবগুলো কলামের মান হুবহু মিলে যায়, তবেই সেটি ডুপ্লিকেট হিসেবে গণ্য হবে এবং একটি সরিয়ে দেওয়া হবে।

sql

SELECT DISTINCT NAME, AGE FROM COMPANY;

এখন (Paul, 32) এবং (Paul, 24) ভিন্ন, তাই দুটোই থাকবে। কিন্তু (James, 24) একটি রেকর্ড, আবার কোনো (James, 24) ডুপ্লিকেট নেই, তাই এটিও থাকবে। মোট সারির সংখ্যা হবে 10টির কম, কারণ একই (NAME, AGE) জুটি থাকলে ডুপ্লিকেট সরবে। আমাদের ডেটায় এমন কোনো ডুপ্লিকেট জুটি নেই, তাই আউটপুট 10টি সারিই আসবে। যদি একই নামের ও বয়সের দুটি রেকর্ড থাকত, তবে একটি বাদ যেত।

উদাহরণ: ধরুন, দুটি ('James', 45) রেকর্ড থাকত, তবে DISTINCT NAME, AGE করলে একটি সরিয়ে ফেলত।


৪. DISTINCT-এর সাথে WHERE ও ORDER BY

DISTINCT অন্যান্য ক্লজের সাথে একত্রে কাজ করে।

  • WHERE দিয়ে ফিল্টার করে তারপর DISTINCT:

sql

SELECT DISTINCT ADDRESS FROM COMPANY WHERE AGE > 25;

এটি AGE > 25 এমন সব রেকর্ডের মধ্যে থেকে অনন্য ঠিকানা বের করবে।

  • ORDER BY দিয়ে সাজানো:

sql

SELECT DISTINCT NAME FROM COMPANY ORDER BY NAME DESC;

নামগুলো উল্টো ক্রমে আসবে: Teddy, Paul, Mark, Kim, James, David, Allen.


৫. DISTINCT ও GROUP BY-এর পার্থক্য

অনেকেই DISTINCT-কে GROUP BY-এর বিকল্প ভাবেন। উভয়ই ডুপ্লিকেট দূর করতে পারে, কিন্তু পার্থক্য আছে:

  • DISTINCT শুধুমাত্র ইউনিক সারি বের করে, কোনো অ্যাগ্রিগেট ফাংশন (SUM, COUNT) দেয় না।
  • GROUP BY গ্রুপ তৈরি করে এবং তার উপর অ্যাগ্রিগেট ফাংশন প্রয়োগ করা যায়। সাধারণ ইউনিক মান পেতে GROUP BY column লিখলেও একই ফলাফল আসে, তবে GROUP BY-তে অ্যাগ্রিগেটের সুযোগ থাকে।

sql

SELECT NAME FROM COMPANY GROUP BY NAME; -- DISTINCT-এর মতোই ইউনিক নাম দেবে

কিন্তু যদি আপনি প্রতিটি নামের সাথে কতবার এসেছে তা চান, তবে GROUP BY + COUNT লাগবে, DISTINCT তা পারে না।

তুলনা:

বৈশিষ্ট্যDISTINCTGROUP BY
ডুপ্লিকেট অপসারণহ্যাঁহ্যাঁ
অ্যাগ্রিগেট ফাংশননাহ্যাঁ
ফলাফলশুধুমাত্র কলামের অনন্য মানগ্রুপ ভিত্তিক ডেটা (অ্যাগ্রিগেট সহ)
ব্যবহারের ক্ষেত্রদ্রুত ইউনিক তালিকাবিশ্লেষণমূলক রিপোর্ট

৬. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ

এই অনুশীলনের জন্য শুধুমাত্র company.db ফাইলটি প্রয়োজন। কোনো অতিরিক্ত প্যাকেজ ইন্সটল করতে হবে না। DISTINCT সম্পূর্ণরূপে SQLite-এর মৌলিক SQL সাপোর্টের অংশ।


৭. গুরুত্বপূর্ণ টিপস

  • পারফরম্যান্স: DISTINCT বড় টেবিলে ধীরগতি সৃষ্টি করতে পারে, কারণ এটি সমস্ত সারি কম্পেয়ার করে। দরকার হলে ইনডেক্স ব্যবহার করুন।
  • NULL এর সাথে DISTINCT: DISTINCT একাধিক NULL-কে একই মান হিসেবে গণ্য করে, তাই NULL একটি মাত্র সারিতে আসবে।
  • DISTINCT-এর অবস্থান: শুধু SELECT এর পরে। SELECT DISTINCT ছাড়া অন্য কোনো স্টেটমেন্টে (যেমন UPDATE, DELETE) DISTINCT ব্যবহার করা যায় না।
  • DISTINCTROW: SQLite DISTINCTROW কীওয়ার্ড সমর্থন করে, যা DISTINCT-এর মতোই, কিন্তু DISTINCT ব্যবহার করাই স্ট্যান্ডার্ড।

৮. সম্পূর্ণ অনুশীলন সেশন

টার্মিনালে নিচের কমান্ডগুলো চালিয়ে দেখুন:

sql

.headers on
.mode column

-- ইউনিক নাম
SELECT DISTINCT NAME FROM COMPANY;

-- ইউনিক শহর
SELECT DISTINCT ADDRESS FROM COMPANY;

-- নাম ও বয়সের ইউনিক জুটি
SELECT DISTINCT NAME, AGE FROM COMPANY;

-- যাদের বেতন 20000-এর বেশি, তাদের ইউনিক নাম
SELECT DISTINCT NAME FROM COMPANY WHERE SALARY > 20000;

-- ইউনিক বেতনের তালিকা, বড় থেকে ছোট
SELECT DISTINCT SALARY FROM COMPANY ORDER BY SALARY DESC;

পরবর্তী পর্বে

আমরা SQLite PRAGMA স্টেটমেন্ট নিয়ে শিখব – ডাটাবেসের বিভিন্ন সেটিংস ও মেটাডেটা কিভাবে দেখা ও পরিবর্তন করা যায়।

লেখকের কথা: DISTINCT ছোট্ট কিন্তু অত্যন্ত দরকারি একটি ফিচার। বাংলায় প্রযুক্তি শেখার এই ধারা অব্যাহত রাখতে আপনার শেয়ার ও উৎসাহ আমাদের পাথেয়। পোস্টটি ভালো লাগলে বন্ধুদের সাথে শেয়ার করুন, এবং সম্পূর্ণ সিরিজের আপডেট পেতে ToLearnTeam.com ব্লগে সাবস্ক্রাইব করতে ভুলবেন না। আপনার প্রশ্ন বা মন্তব্য জানাতে কমেন্ট করুন – আমরা উত্তর দিতে প্রস্তুত!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা) appeared first on To Learn Team.

]]>
SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা) https://tolearnteam.com/sqlite-limit-clause-bangla/ Fri, 07 Aug 2026 14:00:31 +0000 http://tolearnteam.com/?p=2166 ডাটাবেস থেকে ডেটা আনার সময় অনেক সময় পুরো টেবিল না এনে নির্দিষ্ট সংখ্যক সারি দরকার হয় – যেমন ওয়েবসাইটের পেজিনেশন, “সর্বশেষ ১০টি রেকর্ড”, বা পরীক্ষামূলকভাবে কয়েকটি ডেটা দেখা। SQLite-তে এই…

The post SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা) appeared first on To Learn Team.

]]>
ডাটাবেস থেকে ডেটা আনার সময় অনেক সময় পুরো টেবিল না এনে নির্দিষ্ট সংখ্যক সারি দরকার হয় – যেমন ওয়েবসাইটের পেজিনেশন, “সর্বশেষ ১০টি রেকর্ড”, বা পরীক্ষামূলকভাবে কয়েকটি ডেটা দেখা। SQLite-তে এই চাহিদা পূরণ করে LIMIT ক্লজ। এটি শুধুমাত্র SELECT স্টেটমেন্টের সাথে ব্যবহৃত হয় এবং ফিরে আসা সারির সংখ্যা সীমিত করে দেয়। এর সাথে OFFSET যুক্ত করে আমরা শুরু করার অবস্থানও নির্ধারণ করতে পারি। আজকের পর্বে আমরা LIMIT ও OFFSET-এর বাস্তব ব্যবহার, সিনট্যাক্স এবং গুরুত্বপূর্ণ টিপস শিখব।


পূর্বপ্রস্তুতি

  • 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।

১. LIMIT-এর সিনট্যাক্স

শুধুমাত্র LIMIT:

sql

SELECT column1, column2, ...
FROM table_name
LIMIT number_of_rows;

number_of_rows হলো সর্বোচ্চ কতটি সারি ফেরত আসবে। যদি টেবিলে তার চেয়ে কম সারি থাকে, তাহলে যত আছে তত দেখাবে।

LIMIT with OFFSET:

sql

SELECT column1, column2, ...
FROM table_name
LIMIT number_of_rows OFFSET offset_value;
  • offset_value – কতটি সারি বাদ দিয়ে তার পর থেকে দেখানো শুরু করবে। OFFSET 0 হলে প্রথম সারি থেকেই শুরু হয় (অর্থাৎ কোনো বাদ যায় না)।

২. ব্যবহারিক উদাহরণ (COMPANY টেবিল)

উদাহরণ ১: প্রথম ৬টি রেকর্ড দেখানো।

sql

SELECT * FROM COMPANY LIMIT 6;

ফলাফল:

text

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
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

ID 7 (James) বাদ পড়েছে, কারণ আমরা LIMIT 6 দিয়েছি।

উদাহরণ ২: তৃতীয় রেকর্ড থেকে শুরু করে ৩টি রেকর্ড দেখানো।

sql

SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

এখানে OFFSET 2 মানে প্রথম ২টি সারি (ID 1 এবং 2) বাদ দিয়ে তারপরের ৩টি সারি দেখাবে।
ফলাফল:

text

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

অর্থাৎ ID 3, 4, 5 ফিরে এসেছে।

OFFSET-এর ধারণা: OFFSET n দিলে প্রথম nটি রেকর্ড স্কিপ করে n+1 তম রেকর্ড থেকে দেখানো শুরু হয়।


৩. পেজিনেশন (Pagination) বাস্তবায়ন

LIMIT ও OFFSET ব্যবহার করেই সাধারণ পেজিনেশন তৈরি করা যায়। যেমন প্রতিটি পেজে ২টি করে রেকর্ড দেখাতে:

  • পেজ ১: SELECT * FROM COMPANY LIMIT 2 OFFSET 0; (ID 1,2)
  • পেজ ২: SELECT * FROM COMPANY LIMIT 2 OFFSET 2; (ID 3,4)
  • পেজ ৩: SELECT * FROM COMPANY LIMIT 2 OFFSET 4; (ID 5,6)
  • পেজ ৪: SELECT * FROM COMPANY LIMIT 2 OFFSET 6; (ID 7)

যদি OFFSET টেবিলের সারির সংখ্যার চেয়ে বেশি বা সমান হয়, তাহলে কোনো ফলাফল আসে না।

সূত্র: পেজ নম্বর page (1 থেকে শুরু) এবং প্রতি পেজে per_page সংখ্যক রেকর্ড হলে:

sql

LIMIT per_page OFFSET (page - 1) * per_page

৪. LIMIT-এর সাথে ORDER BY ব্যবহার

ফলাফল সুসংহত করতে LIMIT-এর আগে ORDER BY ব্যবহার করা ভালো। না হলে কোন সারিগুলো আসবে তা নিশ্চিত নয় (যদিও সাধারণত rowid ক্রমে আসে)।

উদাহরণ: সর্বোচ্চ বেতনের ৩ জন কর্মী দেখতে:

sql

SELECT * FROM COMPANY ORDER BY SALARY DESC LIMIT 3;

ফলাফল: David (85000), Mark (65000), Kim (45000)।


৫. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ

এই পুরো কাজে শুধুমাত্র company.db ফাইলটি ব্যবহার হচ্ছে। কোনো অতিরিক্ত প্যাকেজ বা লাইব্রেরি লাগবে না। LIMIT ও OFFSET SQLite-র মৌলিক অংশ।


৬. গুরুত্বপূর্ণ টিপস

  • ORDER BY ছাড়া LIMIT ব্যবহারে সতর্কতা: ORDER BY না দিলে রেকর্ডের ক্রম নির্ভর করে rowid বা অভ্যন্তরীণ সংরক্ষণ ক্রমের ওপর। এটি নির্ভরযোগ্য নাও হতে পারে। ডেটা ইন্টিগ্রিটির জন্য LIMIT-এর সাথে ORDER BY দেওয়ার অভ্যাস করুন।
  • OFFSET-এর বিকল্প: SQLite 3.15.0+ সংস্করণে আপনি LIMIT ... OFFSET-এর বদলে LIMIT offset, count সিনট্যাক্সও ব্যবহার করতে পারেন: LIMIT 2, 3 অর্থাৎ OFFSET 2, LIMIT 3। কিন্তু LIMIT ... OFFSET ...-ই বেশি পঠনযোগ্য এবং স্ট্যান্ডার্ডের কাছাকাছি।
  • পারফরমেন্স: বড় টেবিলে বড় OFFSET ধীরগতি তৈরি করতে পারে, কারণ SQLite OFFSET পর্যন্ত সমস্ত সারি প্রক্রিয়াকরণ করে। এক্ষেত্রে WHERE ক্লজ দিয়ে রেঞ্জ নির্ধারণ করলে ভালো হয় (যেমন WHERE id > last_seen_id)।
  • LIMIT 0: LIMIT 0 দিলে কোনো ডেটা আসে না, তবে কলামের নাম ও টাইপ দেখা যেতে পারে (প্রোগ্রামিং এ কাজে লাগে)।

৭. সম্পূর্ণ অনুশীলন সেশন

টার্মিনালে নিচের কোয়েরিগুলো চালিয়ে দেখুন:

sql

.headers on
.mode column

-- প্রথম ৪টি রেকর্ড
SELECT * FROM COMPANY LIMIT 4;

-- ২ নম্বর থেকে ৩টি রেকর্ড
SELECT * FROM COMPANY LIMIT 3 OFFSET 1;

-- সর্বনিম্ন বেতনের ২ জন
SELECT * FROM COMPANY ORDER BY SALARY ASC LIMIT 2;

-- ৫ম রেকর্ড থেকে বাকি সব (প্রথম ৪ বাদ)
SELECT * FROM COMPANY LIMIT -1 OFFSET 4;  -- LIMIT -1 দেয়া যায় না, তাই আমরা বড় সংখ্যা দিতে পারি
-- বা:
SELECT * FROM COMPANY LIMIT (SELECT COUNT(*) FROM COMPANY) OFFSET 4;

পরবর্তী পর্বে

আমরা SQLite-তে ORDER BY ক্লজ নিয়ে বিস্তারিত শিখব – কিভাবে ফলাফলকে আরোহী বা অবরোহী ক্রমে সাজানো যায়, এবং একাধিক কলামের ওপর সাজানো।

লেখকের কথা: LIMIT ও OFFSET ব্যবহার করে আপনার অ্যাপ্লিকেশনে পেজিনেশন আর ডেটা প্রদর্শন অনেক সহজ হবে। বাংলায় এই টিউটোরিয়াল সিরিজ আপনার শেখার যাত্রাকে আরও মসৃণ করুক। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সব আপডেট পেতে ToLearnTeam.com ব্লগ সাবস্ক্রাইব করুন। আপনার মতামত ও প্রশ্ন আমাদের অনুপ্রেরণা – কমেন্ট করতে দ্বিধা করবেন না!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা) appeared first on To Learn Team.

]]>
SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল) https://tolearnteam.com/sqlite-operators-bangla/ Fri, 07 Aug 2026 12:09:17 +0000 http://tolearnteam.com/?p=2143 অপারেটর (Operator) হলো বিশেষ কিছু সংরক্ষিত শব্দ বা চিহ্ন, যা SQLite স্টেটমেন্টের WHERE ক্লজে (এবং অনেক সময় SELECT-এর কলাম তালিকায়) বিভিন্ন শর্ত তৈরি করতে ও গণনা সম্পাদন করতে ব্যবহৃত হয়। অপারেটর ছাড়া…

The post SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল) appeared first on To Learn Team.

]]>
অপারেটর (Operator) হলো বিশেষ কিছু সংরক্ষিত শব্দ বা চিহ্ন, যা SQLite স্টেটমেন্টের WHERE ক্লজে (এবং অনেক সময় SELECT-এর কলাম তালিকায়) বিভিন্ন শর্ত তৈরি করতে ও গণনা সম্পাদন করতে ব্যবহৃত হয়। অপারেটর ছাড়া ডাটাবেস থেকে আমাদের প্রয়োজনীয় তথ্য সঠিকভাবে ফিল্টার করে আনা কার্যত অসম্ভব। SQLite-তে চার ধরনের অপারেটর রয়েছে: গাণিতিক (Arithmetic), তুলনামূলক (Comparison), যৌক্তিক (Logical) ও বিটভিত্তিক (Bitwise)। আজকের পর্বে আমরা প্রতিটি অপারেটরের বাংলা বর্ণনা, সিনট্যাক্স এবং বাস্তব উদাহরণ দেখব।

পূর্বপ্রস্তুতি:

  • SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
  • আমরা company.db এবং COMPANY টেবিল ব্যবহার করব। না থাকলে আগের পর্বের ডেটা তৈরি করে নিন।
  • কোনো অতিরিক্ত প্যাকেজ লাগবে না।

১. গাণিতিক অপারেটর (Arithmetic Operators)

গাণিতিক অপারেটরগুলো সংখ্যার ওপর যোগ, বিয়োগ, গুণ, ভাগ ও মডুলাস অপারেশন চালায়। এগুলো শুধু WHERE নয়, SELECT-এর ভেতরেও ব্যবহার করা যায়।

ধরি, a = 10 এবং b = 20। তাহলে অপারেটরগুলোর ফলাফল নিচের টেবিলে দেওয়া হলো:

অপারেটরবর্ণনাউদাহরণফলাফল
+যোগa + b30
-বিয়োগa - b-10
*গুণa * b200
/ভাগb / a2
%মডুলাস (ভাগশেষ)b % a0

টেস্ট করার জন্য 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)

বিটভিত্তিক অপারেটর সংখ্যার বাইনারি বিটের ওপর কাজ করে। এগুলো সাধারণত ফ্ল্যাগ বা স্টেটাস ম্যানেজমেন্টে ব্যবহৃত হয়। নিচে ট্রুথ টেবিল দেওয়া হলো:

pqp & q (AND)p | q (OR)
0000
0101
1111
1001

ধরা যাক, A = 60 (0011 1100) এবং B = 13 (0000 1101)।

অপারেটরবর্ণনাউদাহরণফলাফল (দশমিক)
&বিট-ভিত্তিক ANDA & B12 (0000 1100)
|বিট-ভিত্তিক ORA | B61 (0011 1101)
~একের কমপ্লিমেন্ট (টগল)~A-61 (২’স কমপ্লিমেন্টে)
<<বামে শিফটA << 2240 (1111 0000)
>>ডানে শিফটA >> 215 (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

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল) appeared first on To Learn Team.

]]>
SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা) https://tolearnteam.com/sqlite-select-query-bangla/ Fri, 07 Aug 2026 12:00:04 +0000 http://tolearnteam.com/?p=2140 ডাটাবেসে জমা করা তথ্যের সবচেয়ে বড় মূল্য হলো সেটি প্রয়োজনমতো খুঁজে বের করতে পারা। SQLite-তে এই কাজটি সম্পাদন করে SELECT স্টেটমেন্ট। এটি ডাটা কোয়েরি ল্যাঙ্গুয়েজের (DQL) প্রধান কমান্ড, যা টেবিল থেকে ডেটা…

The post SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা) appeared first on To Learn Team.

]]>
ডাটাবেসে জমা করা তথ্যের সবচেয়ে বড় মূল্য হলো সেটি প্রয়োজনমতো খুঁজে বের করতে পারা। SQLite-তে এই কাজটি সম্পাদন করে SELECT স্টেটমেন্ট। এটি ডাটা কোয়েরি ল্যাঙ্গুয়েজের (DQL) প্রধান কমান্ড, যা টেবিল থেকে ডেটা এনে একটি রেজাল্ট টেবিল বা রেজাল্ট সেট তৈরি করে। আজকের পর্বে আমরা SELECT-এর মৌলিক ব্যবহার, সমস্ত কলাম বনাম নির্দিষ্ট কলাম ফেচ করা, আউটপুটকে সুন্দরভাবে ফরম্যাট করা এবং sqlite_master টেবিল থেকে ডাটাবেসের গঠনতন্ত্র বের করার পদ্ধতি শিখব।


পূর্বপ্রস্তুতি

  • 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);

১. SELECT-এর মৌলিক সিনট্যাক্স

সহজতম রূপ:

sql

SELECT column1, column2, ... FROM table_name;
  • column1, column2, ...: যেসব কলামের মান আপনি দেখতে চান।
  • table_name: টেবিলের নাম।

সমস্ত কলাম নির্বাচন করতে তারকাচিহ্ন (*) ব্যবহার করা হয়:

sql

SELECT * FROM table_name;

২. ব্যবহারিক উদাহরণ – COMPANY টেবিল থেকে ডেটা দেখা

আমরা এখন company.db শেলে প্রবেশ করে বিভিন্ন SELECT চালাব।

ধাপ ১: টার্মিনালে ডাটাবেস খুলুন

bash

sqlite3 company.db

ধাপ ২: আউটপুট ফরম্যাট সেট করুন (পাঠযোগ্য করতে)

sql

.header on
.mode column

এখন কলামের নাম এবং সারিবদ্ধ কলাম দেখা যাবে।

ধাপ ৩: সমস্ত রেকর্ড দেখি

sql

SELECT * FROM COMPANY;

আউটপুট হবে:

text

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
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

ধাপ ৪: শুধুমাত্র নির্দিষ্ট কলাম – ID, NAME, SALARY

sql

SELECT ID, NAME, SALARY FROM COMPANY;

ফলাফল:

text

ID          NAME        SALARY
----------  ----------  ----------
1           Paul        20000.0
2           Allen       15000.0
3           Teddy       20000.0
4           Mark        65000.0
5           David       85000.0
6           Kim         45000.0
7           James       10000.0

৩. আউটপুট কলামের প্রস্থ নিয়ন্ত্রণ (.width)

ডিফল্ট column মোডে অনেক সময় লেখা কেটে যায় বা দেখতে অস্বস্তি হয়। .width কমান্ড দিয়ে আমরা প্রতিটি কলামের জন্য ন্যূনতম প্রস্থ (অক্ষর সংখ্যা) নির্ধারণ করতে পারি।

ব্যবহার:

sql

.width num1, num2, num3, ...

সংখ্যাগুলো পর্যায়ক্রমে SELECT-এর কলামগুলোর প্রস্থ নির্ধারণ করে।

উদাহরণ: ১০, ২০, ১০ প্রস্থ সেট করে পুরো টেবিল দেখি:

sql

.width 10, 20, 10
SELECT * FROM COMPANY;

এবার আউটপুট:

text

ID          NAME                  AGE         ADDRESS     SALARY
----------  --------------------  ----------  ----------  ----------
1           Paul                  32          California  20000.0
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

লক্ষ্য করুন, NAME কলাম এখন আরও পরিষ্কার, ফাঁকা জায়গা বেশি। আপনি চাইলে .width auto দিলে SQLite স্বয়ংক্রিয়ভাবে ডেটা অনুযায়ী প্রস্থ ঠিক করবে (SQLite 3.38+ সংস্করণে)।


৪. sqlite_master টেবিল থেকে স্কিমা তথ্য পাওয়া

আমরা আগে ডট কমান্ড .tables ও .schema ব্যবহার করেছি। কিন্তু প্রোগ্রামিং করার সময় বা যখন ডট কমান্ড পাওয়া যায় না, তখন আপনাকে sqlite_master টেবিল থেকে সরাসরি SELECT করে তথ্য বের করতে হবে।

ডাটাবেসে সব টেবিলের নাম বের করা:

sql

SELECT tbl_name FROM sqlite_master WHERE type = 'table';

আমাদের company.db-তে এটি দেখাবে:

text

tbl_name
----------
COMPANY

(যদি YOUNG_EMPLOYEES থেকে থাকে, সেটিও দেখাবে।)

কোনো নির্দিষ্ট টেবিলের CREATE স্টেটমেন্ট দেখা:

sql

SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';

আউটপুট:

text

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY NOT NULL,
   NAME TEXT NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR(50),
   SALARY REAL
)

এটাই হলো .schema COMPANY কমান্ডের ভেতরের কাজ। sqlite_master-এ কলামগুলো হলো: type, name, tbl_name, rootpage, sql। আমরা এখানে name ও tbl_name একই (টেবিলের জন্য), কিন্তু ইনডেক্স বা ট্রিগারের ক্ষেত্রে ভিন্ন হতে পারে।


৫. আরও কিছু প্র্যাকটিস উদাহরণ

  • শুধু নাম ও ঠিকানা দেখতে:sqlSELECT NAME, ADDRESS FROM COMPANY;
  • শর্ত ছাড়া গণনা (COUNT) – অস্থায়ী রেজাল্ট:sqlSELECT COUNT(*) FROM COMPANY;(COUNT একটি অ্যাগ্রিগেট ফাংশন, পরে বিস্তারিত আসবে।)
  • DISTINCT দিয়ে অনন্য শহরের তালিকা:sqlSELECT DISTINCT ADDRESS FROM COMPANY;

৬. ডিরেক্টরি স্ট্রাকচার

আপনার কাজের ফোল্ডারে এখনো শুধু company.db ফাইলটি আছে। SELECT শুধু ডেটা পড়ে, ফাইলে কোনো পরিবর্তন আনে না।

text

project-folder/
└── company.db

৭. গুরুত্বপূর্ণ টিপস

  • ফরম্যাটিং চালু রাখা: .header on ও .mode column একবার দিলে পুরো সেশনজুড়ে কাজ করে। পরবর্তী সেশনে আবার দিতে হবে, অথবা এগুলো .sqliterc ফাইলে লিখে স্থায়ী করা যায় (পরে আলোচনা হবে)।
  • বড় টেবিলে সতর্কতা: SELECT * ব্যবহার করলে বিশাল টেবিলের সব ডেটা স্ক্রিনে আসবে, তাই সীমিত করতে LIMIT ক্লজ (পরের পর্ব) ব্যবহার করা ভালো।
  • ইন-মেমরি ও ফাইল: SELECT ডাটাবেস ফাইল থেকে সরাসরি ডেটা পড়ে, তাই ডাটাবেস ফাইল যত বড়ই হোক, সঠিক কোয়েরি দ্রুত ফল দেবে।
  • sqlite_master-এর গুরুত্ব: ডাইনামিক অ্যাপ্লিকেশন তৈরি করতে গেলে এই সিস্টেম টেবিল আপনাকে টেবিলের গঠন জানতে দারুণ কাজে লাগবে।

পরবর্তী পর্বে

আমরা SELECT-এর সাথে WHERE ক্লজ ও অপারেটর ব্যবহার করে শর্ত সাপেক্ষে ডেটা ফিল্টার করা শিখব।

লেখকের কথা: এই টিউটোরিয়াল সিরিজের প্রতিটি পর্ব সহজ ও বাস্তব উদাহরণ দিয়ে সাজানো হচ্ছে, যেন আপনি নিজেই হাতে-কলমে শিখতে পারেন। আপনার ভালোলাগা, শেয়ার ও কমেন্ট আমাদের নিরন্তর উৎসাহ যোগায়। সম্পূর্ণ সিরিজের আপডেট পেতে ToLearnTeam.com ব্লগ সাবস্ক্রাইব করতে ভুলবেন না!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা) appeared first on To Learn Team.

]]>