সিলেক্ট স্টেটমেন্ট ব্যবহার করে ডেটাবেজ থেকে ডেটা কুয়েরি করা হয়। সিম্পল সিলেক্ট স্ট্যাটমেন্ট নিচের মত করে লেখা হয়ঃ
SELECT column1, column2, ... FROM table_name;
SELECT এর পরে টেবিলের কোন কোন কলাম থেকে ডেটা চাচ্ছি আমরা, সেগুলোর দিতে হয়। এরপর FROM দিয়ে টেবিলের নাম দিতে হয়। যদি একটা টেবিলের সব গুলো ডেটা চাই, তখন কলামের যায়গায় আমরা এসটেরিক্স (*) ব্যবহার করি। যেমনঃ
SELECT * FROM table_name;
SQL টিউটোরিয়াল আমরা দেখেছি কিভাবে ব্যাসিক টেবিল তৈরি করা যায়, কিভাবে ডেটা ইনসার্ট করা যায়। যেহেতু ডেটাবেজে ডেটা না থাকলে আমরা ডেটা কুয়েরি করতে পারব না, তাই প্রথমে একটা টেবিল তৈরি করে কিছু ডেটা ইনসার্ট করে নেই।
প্রথমে ডেটাবেজ ওপেন করতে হবেঃ
sqlite3 db_name.db
এরপর ডেটাবেজে টেবিল তৈরি করতে হবেঃ
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
তারপর ডেটা ইনসার্ট করতে হবেঃ
INSERT INTO users (name, email) VALUES
('Alice Johnson', '[email protected]'),
('Bob Smith', '[email protected]'),
('Charlie Brown', '[email protected]'),
('Diana Prince', '[email protected]'),
('Eve Adams', '[email protected]');
এবার আমরা ডেটাবেজ থেকে ডেটা কুয়েরি করার জন্য প্রস্তুত। নিছের স্টেটমেন্ট লিখিঃ
একটা টেবিল থেকে সব গুলো কলামের সব গুলো ডেটা কুয়েরি করাঃ
SELECT * FROM users;
আউটপুট পাবো এমনঃ
নির্দিষ্ট কলাম কুয়েরি করাঃ
যেমন users টেবিল থেকে যদি আমরা শুধু ইমেইল গুলো পেতে চাই, তাহলে এভাবে লিখবঃ
SELECT email FROM users;
আউটপুট পাবোঃ
একের অধিক কলাম থেকে ডেটা কুয়েরি করার জন্য কলাম গুলোর মধ্যে কমা ব্যবহার করা হয়। যেমন আমরা যদি name এবং email কলাম থেকে ডেটা কুয়েরি করতে চাই, তাহলে এভাবে লিখবঃ
SELECT name, email FROM users;
ডেটাবেজ থেকে ডেটা ফিল্টার
WHERE ক্লজ
ডেটা কুয়েরি করার সময় WHERE ক্লজ ব্যবহার করে ডেটা ফিল্টার করা হয়।
SELECT name FROM users WHERE email = '[email protected]';
আউটপুট পাবোঃ Alice Johnson
আবার WHERE ক্লজ ব্যবহার করে নির্দিষ্ট আইডি এর ডেটাও কুয়েরি করা যায়। আইডি যেহেতু প্রাইমারি কী মানে ইউনিক তাই একটা আইডি দিয়ে শুধু মাত্র একটা রেকর্ডই পাওয়া যাবে।
SELECT * FROM users WHERE id = 3;
আউটোপুট পাবোঃ
3|Charlie Brown|[email protected]
WHERE ক্লজের সাথে আমরা বিভিন্ন লজিক্যাল অপারেটর যেমন >, >=, < , <= ইত্যাদি অপারেটর ব্যবহার করতে পারি। যেমনঃ
SELECT * FROM users WHERE id > 3;
যা 3 থেকে বড় আইডি যুক্ত রেকর্ড গুলো আমাদের রিটার্ণ করবে।
LIKE অপারেটর
WHERE ক্লজের সাথে LIKE অপারেটর ব্যবহার করে ডেটা ফিল্টার করা যায়। যা অনেকটা সার্চের মত কাজ করে। যেমনঃ
SELECT * FROM users WHERE email LIKE '%@example.com';
ডেটাবেজে যদিও সব গুলো ইউজারের ইমেইলের শেষ অংশ @example.com। তাই users টেবিলের সব গুলো ডেটাই রিটার্ণ করবে। যদি ভিন্ন ইমেইল থাকত যেমন @gamil.com, @yahoo.com, @outlook.com ইত্যাদি, তাহলে শুধু @example.com দিয়ে যে ইমেল গুলো রয়েছে, শুধু মাত্র ঐ ইউজারের ডেটা গুলো রিটার্ণ করত।
আরেকটা উদাহরণ দেখিঃ
SELECT * FROM users WHERE name LIKE '%Smith';
উপরের স্ট্যাটমেন্ট দিয়ে users টেবিল থেকে নামে Smith থাকা সব ইউজারের ডেটা রিটার্ণ করবে। যদি একাধিক ইউজারের নামের অংশে Smith থাকত, তাহলে একাধিক ইউজারের ডেটা রিটার্ণ করত। খেয়াল করে দেখি এখানে প্যাটার্ণের আগে % চিহ্ন ব্যবহার করেছি। এটা ব্যবহার না করলে ডেটা পাবো না। তখন আবার এক্স্যাক্ট ম্যাচিং করে ডেটা রিটার্ণ করবে।
ডেটা অর্ডার – ORDER BY
ডেটাবেজ থেকে ডেটা কুয়েরি করার সময় আমরা তা বিভিন্ন কলাম অনুযায়ী সর্ট করে নিতে পারি। সাধারণত আইডি অনুযায়ী ডেটা রিটার্ণ করে আমাদের। আমরা সর্বশেষ রেকর্ড যদি আগে পেতে চাই, তাহলে এভাবে স্টেটমেন্ট লিখতে পারি:
SELECT * FROM users ORDER BY id DESC;
name কলাম অনুযায়ী অর্ডার করতে পারি এভাবেঃ
SELECT * FROM users ORDER BY name ASC;
ORDER BY তে আমরা ASC অথবা DESC প্যারামিটার ব্যবহার করতে পারি। প্যারামিটার ব্যবহার না করলে ডিফল্ট ভাবে ASC অর্ডারে ডেটা সর্ট করে রিটার্ণ করবে।
SELECT * FROM users ORDER BY name;
ডেটা লিমিট – LIMIT
কত গুলো ডেটা আমরা রিটার্ণ পেতে চাই, তা বলে দিতে পারি LIMIT অপারেটর দিয়েঃ
SELECT * FROM users LIMIT 3;
যা আমাদের users টেবিল থেকে তিনটা রেকর্ড রিটার্ণ করবে। এই লিমিটের সাথে আমরা অন্য অপারেটর গুলো ব্যবহার করতে পারি। যেমনঃ
SELECT * FROM users WHERE email LIKE '%@example.com' LIMIT 3;
কন্ডিশনাল কুয়েরি
WHERE ক্লজের সাথে AND
, OR
এবং NOT
কন্ডিশন ব্যবহার করে আমরা ডেটা কুয়েরি করতে পারি। যেমনঃ
SELECT * FROM users WHERE id > 2 AND id < 5;
যা আমাদের 2 থেকে বড় এবং 5 থেকে ছোট id এর রেকর্ড গুলো রিটার্ণ করবে।
প্রয়োজন অনুযায়ী আরো অনেক কমপ্লেক্স কন্ডিশন আমরা ব্যবহার করতে পারব। পরবর্তীতে যখন আরো বেশি ডেটা এবং টেবিল নিয়ে কাজ করব, তখন আরো শিখব।
রেকর্ড কাউন্ট – COUNT() ফাংশন
একটা কলামে কত গুলো রেকর্ড রয়েছে, তা পেতে পারি COUNT() ফাংশন ব্যবহার করে। যেমনঃ
SELECT COUNT(name) FROM users;
আরো দরকারি অনেক গুলো ফাংশন রয়েছে যেগুলো আমরা পরবর্তীতে শিখব। যেমন SUM(), AVG(), MIN(), MAX()
ইত্যাদি।
ডেটাবেজ নিয়ে সব গুলো লেখা পাওয়া যাবে বাংলায় ডেটাবেজ টিউটোরিয়াল – SQL পেইজে।