অন্তত ২০ লাইন ইংরেজীতে লেখার পরে চিন্তা করলাম বাংলায় লেখলেই বোধহয় ব্যাপারগুলো বুঝাতে সহজ হবে। কিন্তু বাংলায় লিখতে গেলে একটা বড় সমস্যা হয়। সেটা পোস্টের শেষে বুঝিয়ে বলবো
আপাতত আমরা যেকারনে এখানে এসেছি, তা সম্পন্ন করি।
প্রথম পর্বে আমি দেখিয়েছি কিভাবে, PostgreSQL Admin সফটওয়্যারটি আপনার কম্পিউটারে ইন্টস্টল করবেন। আমি জানি না আপনার মনে আছে কিনা, আপনি কিন্তু পুরো একটি ডেটাবেজ এবং ঐ ডেটাবেজের একটি টেবিল বানিয়েছিলেন। কিন্তু সমস্যা হলো এটি করতে গিয়ে বেশ কিছু কোড/সিন্ট্যাক্স আমরা একটা জায়গা থেকে কপি করে বসিয়েছি শুধু। আমরা তখন জানতামও না কোনটার কি কাজ। কোনটা কেন করছি, কি লিখছি, কোনটার মানে কি - এইসব কিছুই তখন বুঝতাম না। আমি প্রমিস করছি, এবার এই পর্বের পরে আপনি সেগুলো এবার থেকে নিজেই একা একা বুঝে বুঝে করতে পারবেন। আপনি নিজেই প্রত্যেকটা সিন্ট্যাক্সতো বুঝবেনই বরং তার সাথে অতিরিক্ত আরো জানতে পারবেন কিভাবে একই কাজ কয়েকভাবে করা যেতে পারে। আসুন এসব আলাপচারিতা শেষ করে মূল অধ্যায় শুরু করি।
❌সংবিধিবদ্ধ সতর্কীকরণঃ আমি এখানে অনেক কিছুই বিস্তারিত আলোচনা করবোনা। কারন তা করলে হয়তো ব্লগটা এত বেশিই বড় হবে যে আপনি শিখতে আগ্রহ হারিয়ে ফেলবেন। আর একটা কারন হতে পারে আমি অলস প্রজাতি। তবে সেটা মূল কারন হিসেবে বলা বারণ। প্রত্যেকটা টপিক এবং সিন্ট্যাক্সের ব্যাপারে বিস্তারিত জানতে হলে বইয়ের বিপরীত নেই।
ডেটাবেজ ও ডেটাবেজ টেবিলের সাধারণ কিছু ধারণাঃ
ডেটাবেজের প্রাথমিক ধারণা না থাকলে PostgreSQL শিখার কোনো মানেই হয় না বলে আমি মনে করি। তাই প্রথমে কিছু ধারণা নেয়া যাক।
সহজভাবে বুঝার জন্য আমি ডেটাবেজকে একটি মিষ্টির দোকানের সাথে তুলনা করি। যেখানে অনেকরকম মিষ্টি সাজানো থাকে। আবার একই রকম মিষ্টির মধ্যেও অনেক প্রকারভেদ থাকতে পারে। যার ফলে একই রকম মিষ্টিগুলো আবার আলাদা আলাদা করে সাজানো থাকে। ডেটাবেজ হলো এরকমই কিছু। এখানে অনেক অনেক ডেটা থাকে যেগুলো আমরা বাস্তব জীবনে ব্যাবহার করি। আমরা ফেসবুক যখন ব্রাউজ করি, সেখানে আমরা যাই দেখিনা কেন, বা যাই পোস্ট করি না কেন, ফেসবুকের ডেটাবেজে সেগুলো সব বিভিন্ন নামে এবং বিভিন্ন ভাবে সাজানো থাকে। এখন সমস্যা হলো আমাদের সব ডেটা একই রকম না। যেমন আমার প্রোফাইলের ডেটা (আমার নাম, আমার প্রোফাইল পিকচার, আমার পোস্ট) আর আপনার প্রোফাইলের পোস্ট একেবারে হুবুহু এক না। তবে ক্যাটাগরি এক। তা হলো একটি পারসোনাল একাউন্টের ডেটা। এরকম অনেকগুলো সেম ক্যাটাগরির ডেটাগুলো নিয়ে একটি টেবিল বানানো হয়।
এখন প্রশ্ন হতে পারে টেবিল কি? এটি কি আমরা বাসায় যেই টেবিল ব্যাবহার করি সেই টেবিল? এটি কি খায় না মাথায় দেয়? - না! টেবিল হলো একটা খাতা। যেখানে ধরুন আমি প্রথমে কয়েকটা কলাম বানাবো। প্রথম কলামের নাম সিরিয়াল নম্বর। দ্বিতীয় কলামের নাম মিষ্টির নাম, তৃতীয় কলামের নাম দাম। এই ৩টা কলামের মাধ্যমে আমি কি রেকর্ড রাখতে পারি? আমার মিষ্টির দোকানে কয়রকমের মিষ্টি আছে, কোন মিষ্টির কি নাম, কত দাম এগুলো। এইযে আমি অনেকগুলো তথ্য একসাথে একটা খাতায় লিখে রাখছি যাদের ক্যাটাগরি একই এই খাতাই হলো আমার টেবিল। এইযে মিষ্টিগুলোর তথ্য লিখেছি, প্রত্যেকটা মিষ্টির তথ্যকে আলাদা আলাদা Entity বা Record বলা হয়। প্রত্যেকটা কলামগুলো হলো একেকটা Field। আপাতত এটুকু বুঝলেই হবে। তবে এটুকু বুঝেছেন কিনা, তা পরীক্ষা করতে নিজে একটু যাচাই করে দেখুন, যদি আমি একটি ক্লাসের ডেটাবেজ টেবিল বানাই যেখানে ৬০ জন ছাত্রের নাম, রোল আর বাবার নাম, ঠিকানা থাকবে, তাহলে সেখানে মোট কয়টি Record, Field থাকবে।
ডেটাটাইপ (Data type)
এবার একটু খেয়াল করে দেখবেন, এখানে মিষ্টির নামে কিন্তু শুধু অক্ষর বা Alphabetical Letters ব্যবহার করা হবে। কিন্তু মিষ্টির দামে কিন্তু আবার শুধু নাম্বার বা Numerical Digits ব্যবহার করা হবে। দুটো কিন্তু দুইরকম। এই প্রার্থক্যটাকেই আমরা বলবো Data Type। Data type অনেক রকম হতে পারে। তবে সাধারানত যেসব Data type বেশি ব্যাবহার করা হয় এবং যেসব ব্যাসিক Data type আপাতত জানলে হবে, সেগুলো হলোঃ
- Char Data Type ( যদি ইংরেজী বর্ণমালা A-Z এবং a-z দিয়েই ডেটাগুলো লিখা হয়)
- Text Data Type (যদি ইংরেজী বর্ণমালা এবং যেকোন সংখ্যা বা বিশেষ চিহ্ন দিয়ে ডেটাগুলো লিখা হয়)
- Integer Data Type ( শুধুমাত্র ইংরেজি 0-9 পর্যন্ত ডিজিট দিয়ে লিখা হয় - মূলত কোন সংখ্যা)
- Time Data Type ( সময় লিখার জন্য ব্যাবহৃত ডেটাটাইপ )
- Array Data Type ( এটা একটু ভিন্ন ধরনের অন্যগুলো থেকে। সহজ কথায় যদি বলি অনেকগুলো ক্যারেক্টার মিলে যদি একটা ডেটা প্রকাশ করে, তাহলে তাকে বলা হয় ক্যারেক্টার Array ডেটাটাইপ। আবার অনেকগুলো সংখ্যা মিলে যদি একটা ডেটা প্রকাশ করে, তাহলে তাকে বলা হবে নাম্বার Array ডেটাটাইপ )
সহজেই ডেটাবেজ টেবিল তৈরিঃ
প্রশ্ন হতে পারে আমাদের ডেটাটাইপ দিয়ে কি কাজ! এর উত্তর বলতে গেলে আমাদের এবার টেবিল বানানো শুরু করতে হবে। এখান থেকেই আমাদের তাত্ত্বিক পর্ব শেষ হলো। এবার আপনার স্টার্ট মেনু থেকে pgadmin লিখে pgadmin4 ওপেন করে ফেলুন। যদি আপনার ইচ্ছা করে তাহলে সম্পূর্ণ নতুন একটি ডেটাবেজ তৈরি করতে পারেন। নতুবা চাইলে আগের ডেটাবেজেই একটু নতুন টেবিল তৈরি করতে পারেন। তবে এবার নতুন আরেকটি উপায়ে সহজেই টেবিল তৈরি করা দেখাচ্ছি।
প্রথমে একটু নতুন ডেটাবেজ তৈরি করুন অথবা আগের ডেটাবেজেই যান। এবার বামপাশের সাইডবার থেকে ঐ ডেটাবাজে নামের উপর ডবল ক্লিক করে এক্সপান্ড করুন। এভাবে ডবল ক্লিক করে Schemas থেকে Public এক্সপান্ড করার পরে সেখানে Tables নাম দেখতে পাবেন। এবার Tables এর উপর মাউসের রাইট বাটন ক্লিক করে Create এর উপর মাউস নিতেই দেখবেন আবার Table লেখা।
অর্থাৎ আপনি একটু নতুন Table তৈরি করতে যাচ্ছেন এখান থেকে। ক্লিক করার পর একটা ফর্ম টাইপ কিছু আসবে ডান দিকে এবং আপনার উইন্ডোজের মাঝ বরাবর। এটি হলো আপনার নতুন Table এর ব্যাসিক তথ্যের ফর্ম। আপনি শুধু এখানে আপনার নতুন Table এর নাম লিখে Save ক্লিক করুন। আমি আপাতত Testing নাম দিয়ে একটা Table বানাচ্ছি।
এবার আপনি বামপাশের সাইডবার থেকে Table লেখার উপর ডবল ক্লিক করে এক্সপান্ড করলে দেখবেন আপনার দেয়া নাম অনুযায়ী একটা নতুন টেবিল তৈরি হয়ে গিয়েছে। ঠিক এইভাবে আপনি আপনার টেবিলের কলামগুলোও তৈরি করতে পারবেন। তবে সেক্ষেত্রে একটু অতিরিক্ত কাজ করা লাগবে। প্রতিটা কলামে একই রকম ডেটা থাকে। অর্থাৎ আপনি একই ফিল্ডে দুই রকম ডেটা সংরক্ষণ করতে পারবেন না। তাই কলামগুলো তৈরি করার সময় আপনাকে কলামের ডেটাটাইপ বলে দিতে হবে আগে থেকে।
আপনার আমার সাথে শিখার সুবিধার্থে আমি যেই কলামগুলো বলবো সেগুলোই তৈরি করুন। একবার শিখে গেলে নিজেই পরে নিজের মতো করে Table বানিয়ে প্র্যাকটিস করতে পারবেন।

|
আগেই সেভ করে ফেলবেন না যেন। আর নামগুলোতে স্পেসিং ব্যাবহার করবেন না।
|

|
Definition ট্যাব থেকে Data type এর মধ্যে টাইপ করুন integer। প্রথমেই যেই সাজেশন আসবে, সেটায় ক্লিক করুন। খেয়াল করুন সিরিয়াল নাম্বারগুলো সাধারণত নম্বর দিয়েই হয়। তাই আমরা integer সিলেক্ট করছি এর ডেটাটাইপ।
এবার সেভ করলে খেয়াল করবেন আপনার সেই টেবিলের Columns এর মধ্যে একটি নতুন কলাম যুক্ত হয়েছে যার নাম serial_no। অর্থাৎ আমাদের Tables এ আপাতত একটা কলাম রয়েছে। এরকম ভাবে আপনি আরো কিছু কলাম তৈরি করুন যেগুলো হবে, - first_name ( Data type: character varying )
- last_name ( Data type: character varying )
- email ( Data type: character varying )
- rank ( Data type: character varying )
- salary ( Data type: integer )
প্রত্যেকটা character varying ডেটাটাইপের সাথে লেন্থ সেট করতে হবে, যে সর্বোচ্চ কর ক্যারেক্টার এর ডেটা থাকতে পারে ঐ ফিল্ডে। আপাতত ৫০ সেট করে সেভ করবেন প্রতিবার।
প্রথম PostgreSQL কুয়েরী করাঃযদি আপনার উপরের কলামগুলো তৈরি করা হয়ে থাকে তাহলে এবার Tables এর উপর মাউসের রাইট বাটন ক্লিক করুন। সেখান থেকে Query Tool এ ক্লিক করলে দেখতে পাবেন ডান পাশে একটা টেক্সট ইডিটর ওপেন হয়েছে। এখানেই আপনি আপনার যাবতীয় SQL কুয়েরী এর সিন্ট্যাক্সগুলো লিখবেন। চলুন আপনার প্রথম কুয়েরী করে ফেলি। এই টেক্সট ইডিটরে নিচের লিখাটি লিখে উপরে রান (▶) আইকনে ক্লিক করেন। নিচের দিকে দেখবেন আপনার এড করা সকল কলামগুলোর নাম দেখাচ্ছে। SELECT * FROM public."Testing"; আসলে এখানে পুরো টেবিলটাই দেখাচ্ছে। যেহেতু এখানে কলামগুলোতে কোন ডেটা নেই, তাই এখানে কিছু দেখাচ্ছে না। চলুন এবার আমরা কিছু ডেটা ইন্সার্ট করি।
নোটঃ হয়তো ভাবছেন এখানে কি লিখলেন তা কেন না বুঝিয়েই অন্য কিছু করাচ্ছি। আমি সবকিছুই আপনাকে ক্লিয়ার করবো। তবে তার আগে আমাদের টেবিলে কিছু ডেটা রাখা লাগবে না হলে সবকিছু ঠিক ক্লিয়ারলি বুঝবেন না।
pgadmin মাধ্যমে আপনি খুব সহজের ডেটা ইন্সার্ট করতে পারবেন। সহজ বলছি কারণ আপনার কুয়েরী কোড লিখার ঝামেলা অনেকটাই কমিয়ে দেয় এটি। এর জন্য আপনার তৈরিকৃত Table এ রাইট ক্লিক করে Script এবং তারপর Insert Script এ ক্লিক করুন। এর মানে হলো আপনি একটি স্ক্রিপ্ট তার থেকে চেয়ে নিচ্ছেন যেটি হবে ডেটা ইন্সটার্ট করার জন্য ডিফল্ট স্ক্রিপ্ট। সহজ ভাষায় বললে আপনি চাচ্ছেন একটি ফর্মে আপনি শুধু আপনার নাম ঠিকানা লিখতে। আর বাকি যেসব তথ্য লাগবে, সেগুলো যেন কর্তৃপক্ষ নিজেই ফিল আপ করে দেয়।
ক্লিক করার পর ডানপাশে একটি টেক্সট ইডিটর এসেছে তবে এবার তাতে কিছু লিখা আছে। খেয়াল করে দেখবেন, এখানে আপনার টেবিলের নামে এবং ব্রাকেটে আপনার টেবিলের সবগুলো কলামের নাম দেয়া আছে, তার নিচেই VALUES এবং পাশে ব্রাকেটের মধ্যে প্রশ্নবোধক চিহ্ন। এবার আস্তে আস্তে আপনি কুয়েরী সিন্ট্যাক্সগুলো বুঝতে শুরু করবেন। এই পুরোকোডটার মানে হলো,
- Insert - অর্থাৎ আপনি কিছু ডেটা ইন্সার্ট বা নতুন করে যুক্ত করতে চাচ্ছেন।
- into public."Testing" - অর্থাৎ আপনি "Testing" নামক টেবিলে যুক্ত করতে যাচ্ছেন। এর আগে public দিয়ে একটি লোকেশন বুঝায় জাস্ট। আপাতত এটুকু বুঝে রাখুন।
- VALUES - প্রত্যেকটা কলাম এর ভ্যালু কি কি হবে তা নির্দেশ করছে।
আপনি আপনার মনমতো ডেটা দিতে পারেন। তবে কিছু নির্দেশনা মেনে চলতে হবে। যেমন কলামগুলোর নাম ঠিক যেভাবে আছে, আপনাকে সেই ধারাবাহিকতা মেনেই ভ্যালুগুলো '?' এর পরিবর্তে বসাতে হবে। যেসব কলামের ডেটাটাইপ integer সেগুলোতে শুধু সংখ্যা লিখলেই হবে, তবে বাকিগুলো সবগুলোতে ভ্যালুর দুইপাশে কোটেশন চিহ্ন সহ লিখতে হবে ( ' ' )। নিচের চিত্রটি দেখে আরো ক্লিয়ার হতে পারবেন।
যদি সবকিছু ঠিকঠাক থাকে এবং আপনি যদি রান আইকনে ক্লিক করেন, তাহলে দেখবেন নিচে Messages বারে
INSERT 0 1 Query returned successfully in সামথিং msec. এরকম কিছু লেখা আসবে। অর্থাৎ আপনার কুয়েরী এর কাজ সম্পন্ন হয়েছে। অভিনন্দন। আপনি PostgreSQL এর জগতে ইতিমধ্যে পদার্পণ করে ফেলেছেন। কি বিশ্বাস হয় নাহ? আমি একটু আগে কি বলেছিলাম? Insert - অর্থাৎ আপনি কিছু ডেটা ইন্সার্ট বা নতুন করে যুক্ত করতে চাচ্ছেন। - অর্থাৎ ইতিমধ্যে আপনার কিন্তু ডেটাগুলো ইন্সার্ট হয়ে যাওয়ার কথা। এবার তাহলে চেক করা উচিৎ আমাদের। তবে এবার আমরা আরেকটা নতুন উপায় শিখে ফেলি। এবার আপনি আবার আপনার ডেটাবেজ টেবিলের নামের উপর রাইট ক্লিক করুন। সেখান থেকে View/Edit Data এবং সেখান থেকে All Rows এ ক্লিক করলে দেখবেন আগের মতো একটা টেক্সট ইডিটর ওপেন হয়েগিয়েছে যেখানে অলরেডি আমাদের পুরো টেবিল ভিউ এর কোড লিখা আছে। আর তার নিচে Data Output এর জায়গায় আমাদের মাত্র ইন্সার্ট করা ডেটা দেখাচ্ছে। মজার না ব্যাপারটা? আরো মজার হলো আপনি চাইলেই এখান থেকেই সহজে ডেটাগুলো ইডিট করতে পারবেন। তবে এটা নিজে খুঁজে দেখুনতো পারেন কিনা। পারলে ভালো, না পারলেও সমস্যা নেই, আমি পরবর্তীতে দেখিয়ে দিবো। |
লক্ষ্য করুন, আপনি কিন্তু ইন্সার্ট করার সময় একটা করে Row ইন্সার্ট করছেন। অর্থাৎ আপনি প্রতিবার একটা করে রেকর্ড ইন্সার্ট করছেন। আপনি চাইলেই কোন Row তে শুধু একটি কলামের ডেটা ইন্সার্ট করতে পারেন না (Intermediate option)।
এবার আমি আপনার শিখার জন্য শুধু সিন্ট্যাক্স, তার কাজ, কিভাবে লিখতে হয় তা বলবো। বাকি কাজ গুলো আপনি নিজেই শিখে নিতে পারবেন। শুধু ভরসা রাখুন। তবে তার আগে আপনি মাত্র যেভাবে ইন্সার্ট করেছেন, ঠিক সেইট কোডেই, ভ্যালুগুলো চেঞ্জ করে আরো কমপক্ষে ৯টা Row ইন্সার্ট করুন। এর আগে নিচের অংশগুলো পড়া উচিৎ হবে না। কারণ আপনার ডেটা না থাকলে কুয়েরীগুলো রেজাল্টের তফাৎ বুঝতে পারবেন না। চিন্তার কারণ নেই, একেবারে অরিজিনাল ডেটা দেয়া লাগবে না। শুধুমাত্র আপনার বুঝতে পারার মতো ডেটা দিন, তাহলেই হবে।
চলুন এবার আমরা শুরু করি সিন্ট্যাক্স এবং কিওয়ার্ড শিখা।
সিন্ট্যাক্স ও PostgreSQL কিওয়ার্ডসঃ
PostgreSQL এর নিজস্ব কিছু কিওয়ার্ডস আছে যার প্রত্যেকটার আলাদা আলাদা কাজ রয়েছে। এই কিওয়ার্ডসগুলো দিয়ে আপনি স্ট্যাটমেন্ট বা কমান্ড লিখে কুয়েরী করবেন। একটু আগে টেবিল ভিউ এর জন্য যেই কোড লিখেছেন, বা ডেটা ইন্সার্ট করার জন্য যেই কোডটা লিখেছেন, প্রত্যেকটাই একেকটা স্ট্যাট্মেন্ট। এসব স্ট্যাট্মেন্টের মধ্যে SELECT, FROM, Insert, VALUES এগুলো প্রত্যেকটা একেক্টা কিওয়ার্ডস। প্রত্যেকটা স্ট্যাট্মেন্টের শেষে একটি করে সেমিকোলন (;) দিতে হবে। আপনি চাইলে অনেকগুলো স্ট্যাট্মেন্ট একসাথেই কুয়েরী করে রান করতে পারেন। যেমন ৯টা Row এর জন্য একসাথে ৯টা লাইন লিখে কুয়েরী রান করাতে পারেন। তবে প্রত্যেকটা স্ট্যাট্মেন্টের শেষে অবশ্যই সেমিকোলন দিতে হবে। যদিও এখনো আমরা ইন্টেন্ডেশন বা ট্যাব স্পেসিং ব্যাবহার করি নি, তবে জেনে রাখা ভালো ইন্টেন্ডেশনের কোন কাজ নেই। এটি কেবল মাত্র কুয়েরী স্ট্যাটমেন্ট পড়তে পারার সুবিধার্থে ব্যাবহৃত হয়। শেষে একটি ইন্টারেস্টিং কথা বলে যাই, এইযে আমরা একটু আগে যত কিওয়ার্ডস লিখেছি, এগুলো আমরা আপারকেস বা লোয়ার কেস লেটার - যেইভাবে খুশিই লিখতে পারি। অর্থাৎ PostgreSQL কেস সেন্সিটিভ না। অবশ্য কোন SQL ই কেস সেন্সিটিভ না।
SELECT :
আপাতত এখানে Insert ছাড়া কোনরকম ম্যানিপুলেশন কমান্ড বা ডেটাবেজ টেবিলের কোন পরিবর্তন করিনি। আসলে এগুলো পরের পর্বে শিখাবো বলে রেখেছি। আমরা এ পর্বে শুধু মাত্র Data দেখার জন্য কিওয়ার্ডসের ব্যাপারে শিখবো। আমরা যদি দোকানে গিয়ে কোন পণ্য দেখতে যাই তার আগে আমরা সেটি সিলেক্ট করি। ঠিক তেমনি SQL এ কোন ডেটা দেখার জন্য আমরা আগে থেকে সিলেক্ট করি SELECT স্ট্যাট্মেন্ট দিয়ে। কোন ডেটা আউটপুট পাওয়ায়ার জন্য SELECT স্ট্যাটমেন্ট অবশ্যই প্রথমে লিখতে হবে এবং এর পরে বাকি শর্ত বা যেই যেই কলাম দেখতে চাই তা লিখতে হবে।
* (ALL ):
আমরা ডেটা দেখতে হলে SELECT এর পরে ঠিক কোন কোন কলাম দেখতে চাই তা উল্লেখ করা লাগে। তবে যদি এমন হয় যে, কোন কারণ আমরা চাচ্ছি একটা টেবিলের সব কলাম দেখতে চাচ্ছি, তখন আমরা সবগুলো কলাম না লিখে শুধু মাত্র * লিখলেই তা সবগুলো কলামকে নির্দেশ করে।
FROM:
আমরা যতরকম SELECT কুয়েরীই করি না কেন, প্রত্যেকটা কুয়েরির মানেই কোননা কোন টেবিল থেকে ডেটাগুলো এনে আউটপুটে দেখানো। আমরা কোন টেবিল থেকে ডেটা গুলো এনে আউটপুট পেতে চাচ্ছি, তা বুঝানোর জন্যই FROM কিওয়ার্ডের ব্যাবহার করা হয়।
আশা করি এতক্ষনে আপনারা সবার বুঝতে পেরেছেন আমরা পুরো টেবিলের সবগুলো ডেটা আনার জন্য যেই লাইনটা লিখতাম, তার মানে আসলে কি বুঝাতো। এবার আমার অনুরোধ থাকবে নিজে নিজে পুরো টেবিলটা আউটপুটে দেখাতে পারেন কিনা তার জন্য কুয়েরী করা। তবে এবার কোড কোথাও থেকে না এনে, নিজে নিজে লিখুন।
AS:
আমরা যখন কোন ডেটা আউটপুটে দেখতে চাই, অনেক সময় এমন হয় যে আমরা কলামের নামগুলোকে একটু পরিবর্তন করে দেখতে চাই। তবে তা মূল ডেটাবেজ টেবিলের কলামের নাম যেন পরিবর্তন না করে সেটিও খেয়াল রাখতে চাই। তখন আমরা AS কিওয়ার্ড ব্যাবহার করি। ব্যাপারটা এমন যে আমি আমার দোকানে চমচম মিষ্টির বক্স সহজে চেনার জন্য বক্সের নিচে শর্টকার্ট করে চ_মি লিখে রেখেছি। এখন যখন কোন কাস্টমারকে আমি মিষ্টি দেখাতে যাবো, কখোনই তাকে এই মিষ্টির নাম চ_মি বলবো না। তাই শুধু তখন আমি চমচম নাম বলে মিষ্টিগুলো দেখাবো। ঠিক তেমনি কলামগুলোর নাম আমি চেঞ্জ না করে আউটপুট দেখার সময় আমি তার নামগুলো একটু পরিবর্তন করে আউটপুট দেখতে পারি। উদাহরণ দেখলে আরো সহজ হয়ে যাবে ব্যাপারটা।
এবার একটা কুয়েরী চালান। এতক্ষন আমি বারবার পুরো টেবিলের সব কলাম একসাথে দেখছিলাম। কিন্তু এখন আমি চাচ্ছি আমি শুধু প্রত্যেক Row এর first_name এর ডেটাগুলো দেখতে। অর্থাৎ আমার ডেটাবেজে যাদের ডেটা আছে, তাদের ফার্স্ট নেমগুলো দেখতে চাচ্ছি। তার জন্য কুয়েরি কিভাবে হতে পারে?
একটু যদি এইভাবে ভাবি, তাহলে কোড লিখতে সহজ হবে।
- আমি কি করতে চাচ্ছি? - ডেটা দেখতে। (SELECT )
- কি ডেটা দেখতে চাচ্ছি? - first_name (first_name)
- কোথা থেকে দেখতে চাচ্ছি? - "Testing" টেবিল থেকে
এবার এই কথাগুলোই যদি আমি PostgreSQL এর দেয়া নির্দেশনা অনুযায়ী সাজিয়ে লিখি তাহলে দাঁড়ায়, SELECT first_name FROM "Testing";
যদি এই কুয়েরীটি রান করান, তাহলে আপনি প্রত্যেকটা Row এর first_name গুলো দেখতে পাবেন। মজার না? PostgreSQL আসলে কোড হিসেবে ভাবা ভুল হবে। এটি আসলে একটি গেমস খেলার মতো। সামনে আরো মজা অপেক্ষা করছে। বিশ্বাস রাখুন।
আচ্ছা আপনার মনে এখন প্রশ্ন জাগতেই পারে, যদি আপনি অনেকগুলো কলাম দেখতে চান তাহলে কি করবেন? খুবই সহজ। আপনি কমা দিয়ে দিয়ে প্রতিটি কলামের নাম লিখুন। কোন কলামের পর কোন কলাম দেখতে চান, ইচ্ছেমতো লিখুন। তারপর আবার একই ভাবে রান করান। দেখবেন সব কলামগুলো আউটপুটে দেখাচ্ছে।
এবার ধরুন আপনি চাচ্ছেন, email কে email হিসবে না দেখিয়ে GMAIL হিসেবে দেখাতে। তার জন্য AS ব্যাবহার করলেই হবে এটা একটু আগেই বলেছি। কিন্তু কিভাবে! এটিও সহজ। আপনি যেই কলামের নামকে চেঞ্জ করতে চান, সেই কলামের পাশেই AS লিখে কি নামে দেখতে চান তা লিখে ফেলুন।
খেয়াল করে দেখবেন আমরা নাম দিয়েছিলাম DESIGNATION কিন্তু তা দেখাচ্ছে designation অর্থাৎ লোয়ারকেস লেটারে দেখাচ্ছে। বাই ডিফল্ট কলামের নামগুলো লোয়ারকেসেই দেখায়। তবে আপনি যদি আপারকেসে দেখাতে চান, তাহলে নামের দুপারে ডবল কোটেশন চিহ্ন দিলেই হবে।
এতক্ষনে আমরা একটু সাধারণ কুয়েরী স্ট্যাট্মেন্টের স্ট্রাকচার বা গঠন পেয়ে গিয়েছি।
SELECT column_name AS something FROM "Table_name"
WHERE:
টেবিল থেকে আমরা সবসময় যে সব Row এর বা রেকর্ডের ডেটা দেখতে চাইবো এমন নাও হতে পারে। বরং সবার ডেটা না দেখাই বেশি স্বাভাবিক। সাধারণত SQL এর প্রধান দরকার এখানেই। ধরুন বাংলাদেশে জনসংখ্যা আছে ১৮ কোটি। সরকারের কাছে ১৮ কোটি জনসংখ্যার ডেটা একটা টেবিলে আছে। এখন সরকার দেখতে চাচ্ছেন কারা কারা কর দেয়ার উপযুক্ত। আর কর দেয়ার জন্য শর্ত হচ্ছে, নূন্যতম আয় হওয়া লাগবে ২৫০০০। এখন ১৮ কোটি জনসংখ্যার ডেটাবেজ টেবিল থেকে প্রত্যেক Row দেখে দেখে কাদের আয় ২৫০০০ বা তার উপরে,সেটা বের করা অসম্ভব না হলেও অনেকটা অত্যাচারই হবে। তাই আমাদের একটি শর্ত যোগ করে দিয়ে দেখতে পারলেই হয়। আমরা যাই সেইসকল জনগণের ডেটা দেখতে যেখানে তাদের আয় ২৫০০০ (আপাতত আমরা শুধু এক্সাক্ট ভ্যালু নিয়ে শিখবো )। এই কাজটাই PostgreSQL এ লেখা যায় WHERE কিওয়ার্ড দিয়ে। একটি স্ট্যাট্মেন্টে FROM এর পরে WHERE এবং এরপরে শর্ত লিখলেই সেই শর্ত অনুযায়ী কুয়েরী রান হয়। তাহলে আমরা আগের স্ট্রাকচারটা নতুন করে এইভাবে লিখতে পারি,
SELECT column_name AS something FROM "Table_name" WHERE condition_is_something
বলে রাখা ভালো, এখানে AS যে দিতেই হবে এমনটি বাধ্যতামূলক নয়। আপনি চাইলেই দিতে পারেন, নয়তো নয়।
WHERE বুঝতে হলে আমাদের আরো কয়েকটা জিনিস বুঝতে হবে। এগুলোর নাম কন্ডিশনাল অপারেটর। আপাতত আমরা ব্যাসিক ৫টা অপারেটর সম্পর্কে লিখছি। পরের পর্বে বাকিগুলো জানবো।
- = ( যখন কোন শর্তে কিছু ঠিক একই রকম কিছু বুঝাতে চাই তখন ব্যবহার করা হয়। এটি শুধু নাম্বারই নয় বরং যেকোন ক্যারেক্টার ভ্যালুর ক্ষেত্রেও ব্যাবহার করা যায় )
- != বা <> ( সমান নয় বুঝাতে ব্যবহৃত হয় )
- < (কোন কিছু ছোট বুঝাতে)
- > (কোন কিছু বড় বুঝাতে )
- <= এবং >= ( কোনকিছু ছোট অথবা সমান এবং কোন কিছু বড় অথবা সমান )
এবার আমাদের বাস্তবে ব্যাবহার করে বাকিটা বুঝা লাগবে। ধরুন আমি চাচ্ছি আমার ডেটাবেজ টেবিলে সেইসকম মানুষদের ফার্স্টনেম দেখতে যাদের salary ২১০০০ এর সমান। তাহলে আমরা উপরের স্ট্রাকচার অনুযায়ী লিখতে পারি,
SELECT first_name FROM "Testing" WHERE salary = 21000
আশা করি এইবার আপনার কাছে আরো সহজ লাগছে। এবার আপনার কাজ যতভাবে উপরের এই কয়েকটা সিন্ট্যাক্স ব্যাবহার করা যায় করুন এবং প্রাকটিস করুন। আমি আপনাকে ৩টা কুয়েরী কোড লিখার জন্য চ্যালেঞ্জ করছি। এই কুয়েরী গুলো করতে গিয়ে হয়তো অনেক জায়গায় আটকাতে পারেন আবার নাও পারেন। তবে আটকালে কেন আটকিয়েছেন তা খুতিয়ে বের করার চেষ্টা করুন, তাহলেই আপনার প্রকৃত শিখা হবে।
- এমন সকল মানুষের ডেটা দেখান যাদের স্যালারি ১টাকা হলেও আছে 😝।
- এমন সকল মানুষের জিমেইল দেখান যাদের লাস্টনেম "Bond" 😎।
- এমন সকল মানষের ফার্স্ট নেম এবং লাস্ট নেম দেখান যাদের স্যালারি ২০০০০ এর নিচে। তবে তাদের ফার্স্টনেম কে "লাস্টনেম" হিসবে এবং লাস্টনেমকে ফার্স্টনেম হিসেবে দেখান।
আজ এপর্যন্তই। আর বেশি বড় করলে আপনাদের শিখার আগ্রহ কমে যেতে পারে। আমি চেয়েছি এ পর্বে আরো অনেক কিছু কভার করতে। কিন্তু প্রাথমিক কিছু ধারণা দিতে গিয়ে একটু বড় হয়ে গিয়েছে। বাংলায় লিখতে চাচ্ছিলাম না কারন PostgreSQL এর কিওয়ার্ডগুলো সব ইংরেজি। বারবার বাংলা থেকে ইংরেজি আবার ইংরেজি থেকে বাংলায় কী-বোর্ড সুইচ করাটা খুবই কষ্টের। তবুও বুঝানোর সুবিধার্থে এটা করাই শ্রেয় মনে হয়েছে। আমি চাইবো আমার ব্লগের উপর পুরোপুরি নির্ভর না করতে। গুগলে তেলাপোকা মারা থেকে শুরু করা আমেরিকা ধ্বংশ করা পর্যন্ত দুনিয়ার সবকিছুই আছে। আপনি সব জায়গা থেকে শিখতে পারেন। এতে করে আপনার শিখাটা আরো বেশি প্রখর ও শক্তিশালী হবে।
চাইলে আমার ব্লগটির ইমেইল সাবস্ক্রিবশন করতে পারেন ফ্রি। এতে আমার ব্লগ প্রকাশ পাওয়া মাত্রই আপনি ইমেইল পেয়ে যাবেন। আর এই পর্ব থেকে যদি কিছু শিখতে পারেন এবং আরো অন্য কিছু সম্পর্কে টিউটরিয়াল চান, তাহলে কমেন্ট অথবা ইমেইলে জানাতে ভুলবেন না।
আর হ্যা, কমেন্টে ফিডব্যাক দিলে খুবই খুশী হবো। কোন একদিন আমি আমার ব্লগের কমেন্টকারীদের নিয়ে আড্ডা দিবো - এটি একটি স্বপ্ন আমার।
যদি
Life of Loco সম্পর্কে জানতে চান, তাহলে
এই লিঙ্কে গিয়ে জানতে পারেন।
ভালো থাকবেন, ভালো রাখবেন।
Ma-Sha-Allah! A great initiative! Carry on brother! Take love from core of my heart!
উত্তরমুছুনঅনেক ধন্যবাদ ভাই।
উত্তরমুছুনAlhumdullha Kub valo leaka, porata enjoy korasi.
উত্তরমুছুনlekha jothesto valo hoyeche . calay jao
উত্তরমুছুন